<?php
require_once('api/buyers.php');

// Этот класс выбирает модуль в зависимости от параметра Section и выводит его на экран
class IndexAdmin extends Buyers
{
    // Соответсвие модулей и названий соответствующих прав
    private $modules_permissions = array(
        'PagesAdmin'          => 'pages',
        'PageAdmin'           => 'pages',
        'BlogAdmin'           => 'blog',
        'PostAdmin'           => 'blog',
        'BackupAdmin'         => 'backup',
        'ClearAdmin'          => 'backup',
        'DesignAdmin'         => 'design',
        'ThemeAdmin'          => 'design',
        'StylesAdmin'         => 'design',
        'TemplatesAdmin'      => 'design',
        'ImagesAdmin'         => 'design',
        'SettingsAdmin'       => 'settings',
        'BannersAdmin'        => 'banners',
        'BannerAdmin'         => 'banners',
        'ManagersAdmin'       => 'managers',
        'ManagerAdmin'        => 'managers',
        'CommentsAdmin'       => 'comments',
        'CommentAdmin'        => 'comments',
        'FeedbacksAdmin'      => 'feedbacks',
        'LicenseAdmin'        => 'license'
    );

    // Конструктор
    public function __construct()
    {
        $this->design->set_templates_dir('admin/design/html');
        $this->design->set_compiled_dir('admin/design/compiled');

        if(!$manager = $this->managers->auto_login())
            $manager = $this->auth();

        $this->design->assign('manager', $manager);

        // Берем название модуля из get-запроса
        $module = $this->request->get('module', 'string');
        $module = preg_replace('/[^A-Za-z0-9]+/', '', $module);

        if(empty($module))
            $module = 'PagesAdmin';

        // Если не запросили модуль - используем модуль первый из разрешенных
        if(empty($module) || !is_file('admin/'.$module.'.php'))
        {
            foreach($this->modules_permissions as $m=>$p)
            {
                if($this->managers->access($p))
                {
                    $module = $m;
                    break;
                }
            }
        }

        // Подключаем файл с необходимым модулем
        include_once('admin/'.$module.'.php');
        // Создаем соответствующий модуль
        if(class_exists($module))
        {
            $this->module = new $module();
        }
        else
            die("Error creating $module class");
    }

    function fetch()
    {
        $module = $this->modules_permissions[get_class($this->module)];
        $manager_permissions = $this->managers->manager->permissions;
        // Проверка прав доступа к модулю
        if(isset($module) && in_array($module, $manager_permissions))
        {
            $content = $this->module->fetch();
            $this->design->assign("content", $content);
            $this->design->assign("module", strtolower(get_class($this->module)));
        }
        else
        {
            $this->design->assign("content", "Permission denied");
        }

        return $this->body = $this->design->fetch('index.tpl');
    }

    /** Авторизация в админке */
    public function auth()
    {
        if($this->request->method('post'))
        {
            $email = $this->request->post("email", "email");
            $password = $this->request->post("password");
            $reset_password = $this->request->post("reset_password");

            $manager = $this->managers->get_manager($email);
            if(!$manager)
            {
                $this->design->assign('error', 'invalid_login');
            }
            else if($reset_password == "Y")
            {
                $this->notify->email_password_remind_admin($manager->login);
                $this->design->assign('success', true);
            }
            else
            {
                if(password_verify($password, $manager->passhash))
                {
                    //запишем IP чтобы проверить при автовходе
                    $this->sessions->ip = $this->request->ip();
                    $this->sessions->admin = $manager->passhash;
                    $this->request->redirect('/admin/');
                }
                else
                    $this->design->assign('error', 'invalid_login');
            }
        }

        exit($this->design->fetch('auth.tpl'));
    }
}
