public function settingsAction()
 {
     $plugin_id = waRequest::get('id', null);
     $plugins_count = 0;
     $vars = array();
     if ($plugin_id) {
         $plugins = $this->getConfig()->getPlugins();
         $plugins_count = count($plugins);
         if (isset($plugins[$plugin_id])) {
             /**
              * @var shopPlugin $plugin
              */
             $plugin = waSystem::getInstance()->getPlugin($plugin_id, true);
             $namespace = wa()->getApp() . '_' . $plugin_id;
             $params = array();
             $params['id'] = $plugin_id;
             $params['namespace'] = $namespace;
             $params['title_wrapper'] = '%s';
             $params['description_wrapper'] = '<br><span class="hint">%s</span>';
             $params['control_wrapper'] = '<div class="name">%s</div><div class="value">%s %s</div>';
             $settings_controls = $plugin->getControls($params);
             $this->getResponse()->setTitle(_w(sprintf('Plugin %s settings', $plugin->getName())));
             $vars['plugin_info'] = $plugins[$plugin_id];
             $vars['plugin_id'] = $plugin_id;
             $vars['settings_controls'] = $settings_controls;
         }
         waSystem::popActivePlugin();
     }
     $template = $this->getTemplatePath('settings');
     $vars['plugins_count'] = $plugins_count;
     $this->display($vars, $template);
 }
 public function execute()
 {
     if (!$this->getUser()->getRights('shop', 'settings')) {
         throw new waException(_w('Access denied'));
     }
     $plugin_id = waRequest::get('id', null);
     $plugins_count = 0;
     if ($plugin_id) {
         $plugins = $this->getConfig()->getPlugins();
         $plugins_count = count($plugins);
         if (isset($plugins[$plugin_id])) {
             /**
              * @var shopPlugin $plugin
              */
             $plugin = waSystem::getInstance()->getPlugin($plugin_id, true);
             $namespace = 'shop_' . $plugin_id;
             $params = array();
             $params['id'] = $plugin_id;
             $params['namespace'] = $namespace;
             $params['title_wrapper'] = '%s';
             $params['description_wrapper'] = '<br><span class="hint">%s</span>';
             $params['control_wrapper'] = '<div class="name">%s</div><div class="value">%s %s</div>';
             $settings_controls = $plugin->getControls($params);
             $this->getResponse()->setTitle(_w(sprintf('Plugin %s settings', $plugin->getName())));
             $this->view->assign('plugin_info', $plugins[$plugin_id]);
             $this->view->assign('plugin_id', $plugin_id);
             $this->view->assign('settings_controls', $settings_controls);
         }
         waSystem::popActivePlugin();
     }
     $this->view->assign('plugins_count', $plugins_count);
 }
 public function execute()
 {
     $plugin_id = waRequest::get('id', null);
     $plugins_count = 0;
     if ($plugin_id) {
         $plugins = $this->getConfig()->getPlugins();
         $plugins_count = count($plugins);
         if (isset($plugins[$plugin_id])) {
             /**
              * @var photosPlugin $plugin
              */
             $plugin = waSystem::getInstance()->getPlugin($plugin_id);
             waSystem::pushActivePlugin($plugin_id, 'photos');
             $namespace = 'photos_' . $plugin_id;
             $params = array();
             $params['id'] = $plugin_id;
             $params['namespace'] = $namespace;
             $params['title_wrapper'] = '%s';
             $params['description_wrapper'] = '<br><span class="hint">%s</span>';
             $params['control_wrapper'] = '<div class="name">%s</div><div class="value">%s %s</div>';
             $settings_controls = $plugin->getControls($params);
             $this->getResponse()->setTitle(_w(sprintf('Plugin %s settings', $plugin->getName())));
             $this->view->assign('plugin_info', $plugins[$plugin_id]);
             $this->view->assign('plugin_id', $plugin_id);
             $this->view->assign('settings_controls', $settings_controls);
             waSystem::popActivePlugin();
         }
     }
     $this->view->assign('plugins_count', $plugins_count);
 }
 public function __construct($coupon = array())
 {
     waLocale::loadByDomain(array('shop', 'coupon'));
     waSystem::pushActivePlugin('coupon', 'shop');
     $this->data['code'] = ifempty($coupon['code'], '');
     $this->data['expire'] = ifempty($coupon['expire_datetime']);
     $curm = new shopCurrencyModel();
     $currencies = $curm->getAll('code');
     $this->data['discount'] = shopCouponPlugin::formatValue($coupon, $currencies);
     waSystem::popActivePlugin();
 }
 public function execute()
 {
     $url = waRequest::param('url');
     $domain = waRequest::server('HTTP_HOST');
     $model = new waModel();
     //    $main_domain = $model->query("SELECT value FROM wa_app_settings WHERE app_id = 'webasyst' AND name = 'url'")->fetchField();
     $app_settings_model = new waAppSettingsModel();
     $main_domain = trim(str_replace(array('https', 'http', '://'), '', $app_settings_model->get('webasyst', 'url')), "/");
     $data = $model->query("\nSELECT\n  shop_deliveryshop_city_description.*\n, shop_deliveryshop_city.city\n, shop_deliveryshop_city.region\nFROM\n  shop_deliveryshop_city_description\nLEFT JOIN\n  shop_deliveryshop_city ON shop_deliveryshop_city_description.cityCode = shop_deliveryshop_city.cityCode\nLEFT JOIN\n  wa_region ON wa_region.code = shop_deliveryshop_city.region AND wa_region.country_iso3='rus'\nWHERE\n  (url = '{$url}' OR city = '{$url}')\nAND\n  domain IN ('{$domain}', '{$main_domain}')\nLIMIT 1\n  ")->fetchAssoc();
     // Уменьшаем стоимость доставки на сумму указанную в настройках плагина
     $delivery_compensation = $model->query("SELECT price FROM shop_deliveryshop_delivery WHERE domain = '" . $domain . "'")->fetchField();
     $delivery_compensation = intval($delivery_compensation);
     $delivery_price = intval($data['delivery_price']);
     $courier_price = intval($data['courier_price']);
     if ($delivery_price > $delivery_compensation) {
         $data['delivery_price'] = (int) (($delivery_price - $delivery_compensation) / 50) * 50;
         //Уменьшаем до ближайшего полтинника
     } else {
         $data['delivery_price'] = 0;
     }
     if ($courier_price > $delivery_compensation) {
         $data['courier_price'] = (int) (($courier_price - $delivery_compensation) / 50) * 50;
         //Уменьшаем до ближайшего полтинника
     } else {
         $data['courier_price'] = 0;
     }
     foreach (array('meta_title' => $main_domain, 'meta_description' => '', 'meta_keywords' => '', 'delivery_time' => '', 'courier_time' => '') as $key => $value) {
         $data[$key] = isset($data[$key]) ? $data[$key] : $value;
     }
     wa()->getResponse()->setTitle($data['meta_title']);
     wa()->getResponse()->setMeta('description', $data['meta_description']);
     wa()->getResponse()->setMeta('keywords', $data['meta_keywords']);
     $city_code = isset($data['cityCode']) ? $data['cityCode'] : 0;
     $pvz = $model->query("\nSELECT\n  shop_deliveryshop_pvz.*\nFROM\n  shop_deliveryshop_pvz\nWHERE\n  cityCode = {$city_code}\nAND\n  status = 'completed'\nAND\n  (domain IN ('{$domain}', '{$main_domain}') OR domain IS NULL)\n")->fetchAll();
     //$site_model = new siteDomainModel();
     //$domain_id = $site_model->getByName($domain);
     $domain_id = $model->query("SELECT id FROM site_domain WHERE name = '" . $domain . "'")->fetchField();
     $template_path = wa()->getDataPath('plugins/deliveryshop/templates/actions/frontend/FrontendDostavka' . $domain_id . '.html', false, 'shop', true);
     if (!file_exists($template_path)) {
         $template_path = wa()->getDataPath('plugins/deliveryshop/templates/actions/frontend/FrontendDostavka.html', false, 'shop', true);
     }
     if (!file_exists($template_path)) {
         $template_path = wa()->getAppPath('plugins/deliveryshop/templates/actions/frontend/FrontendDostavka.html', 'shop');
     }
     $this->view->assign('data', $data);
     $this->view->assign('pvz', $pvz);
     $this->view->assign('page', array('id' => null, 'name' => '', 'content' => $this->view->fetch($template_path)));
     $this->setThemeTemplate('page.html');
     waSystem::popActivePlugin();
 }
    public function execute()
    {
        if (!$this->getUser()->isAdmin($this->getApp())) {
            throw new waRightsException(_w('Access denied'));
        }
        $plugin_settings = array();
        $plugins = wa()->getConfig()->getPlugins();
        if ($this->plugin_id || ($this->plugin_id = waRequest::request('slug', false))) {
            if (!isset($plugins[$this->plugin_id]) || !($this->plugin_instance = waSystem::getInstance()->getPlugin($this->plugin_id))) {
                throw new waException(_w('Plugin not found', 404));
            }
            $namespace = $this->getApp() . '_' . $this->plugin_id;
            if ($post = $this->getRequest()->post($namespace)) {
                $this->plugin_instance->setup($post)->saveSettings();
                if (get_class($this) == 'blogPluginsSettingsAction') {
                    $this->getResponse()->redirect('?module=plugins');
                }
            }
            $params = array();
            $params['namespace'] = $namespace;
            $params['title_wrapper'] = '<div class="name">%s</div>';
            $params['description_wrapper'] = '<br><span class="hint">%s</span><br>';
            $params['control_separator'] = '</div><br><div class="value no-shift">';
            $params['control_wrapper'] = <<<HTML
%s
<div class="value no-shift">
\t%s
\t%s
</div>
HTML;
            $this->view->assign('plugin_settings', $this->plugin_instance->getControls($params));
            $this->view->assign('plugin_info', $plugins[$this->plugin_id]);
            $this->view->assign('plugin_slug', $this->plugin_id);
            $title = sprintf(_w('Plugin %s settings'), $plugins[$this->plugin_id]['name']);
            $title .= " &mdash; " . wa()->accountName();
            $this->view->assign('title', html_entity_decode($title, ENT_NOQUOTES, 'utf-8'));
            waSystem::popActivePlugin();
        } else {
            $this->view->assign('plugin_slug', false);
        }
    }
 public function execute()
 {
     if (!$this->getUser()->getRights('shop', 'settings')) {
         throw new waException(_w('Access denied'));
     }
     if ($plugin_id = waRequest::request('id')) {
         $plugins = $this->getConfig()->getPlugins();
         $plugins_count = count($plugins);
         if (isset($plugins[$plugin_id]) && !empty($plugins[$plugin_id]['printform'])) {
             $plugin = waSystem::getInstance()->getPlugin($plugin_id);
             $namespace = 'printform_' . $plugin_id;
             if ($settings = waRequest::post($namespace)) {
                 $plugin->saveSettings($settings);
                 $this->view->assign('saved', true);
             }
             $params = array();
             $params['id'] = $plugin_id;
             $params['namespace'] = $namespace;
             $params['title_wrapper'] = '%s';
             $params['description_wrapper'] = '<br><span class="hint">%s</span>';
             $params['control_wrapper'] = '<div class="name">%s</div><div class="value">%s %s</div>';
             $params['subject'] = 'printform';
             $settings_controls = $plugin->getControls($params);
             $this->getResponse()->setTitle(_w(sprintf('Plugin %s settings', $plugin->getName())));
             $this->view->assign('plugin_info', $plugins[$plugin_id]);
             $this->view->assign('plugin_id', $plugin_id);
             $this->view->assign('settings_controls', $settings_controls);
             if (method_exists($plugin, 'getTemplate')) {
                 $this->view->assign('template', $plugin->getTemplate());
                 $this->view->assign('is_template_changed', $plugin->isTemplateChanged());
             } else {
                 $this->view->assign('template', false);
                 $this->view->assign('is_template_changed', false);
             }
         }
         $this->view->assign('plugins_count', $plugins_count);
         waSystem::popActivePlugin();
     }
 }
 /**
  * Returns information about all app's installed plugins as an associative array.
  *
  * @return array
  */
 public function getPlugins()
 {
     if ($this->plugins === null) {
         $locale = wa()->getLocale();
         $file = waConfig::get('wa_path_cache') . "/apps/" . $this->application . '/config/plugins.' . $locale . '.php';
         if (!file_exists($file) || SystemConfig::isDebug()) {
             waFiles::create(waConfig::get('wa_path_cache') . "/apps/" . $this->application . '/config');
             // read plugins from file wa-config/[APP_ID]/plugins.php
             $path = $this->getConfigPath('plugins.php', true);
             if (!file_exists($path)) {
                 $this->plugins = array();
                 return $this->plugins;
             }
             $all_plugins = (include $path);
             $this->plugins = array();
             foreach ($all_plugins as $plugin_id => $enabled) {
                 if ($enabled) {
                     $plugin_config = $this->getPluginPath($plugin_id) . "/lib/config/plugin.php";
                     if (!file_exists($plugin_config)) {
                         continue;
                     }
                     $plugin_info = (include $plugin_config);
                     waSystem::pushActivePlugin($plugin_id, $this->application);
                     // Load plugin locale if it exists
                     $locale_path = wa()->getAppPath('plugins/' . $plugin_id . '/locale', $this->application);
                     if (is_dir($locale_path)) {
                         waLocale::load($locale, $locale_path, wa()->getActiveLocaleDomain(), false);
                     }
                     $plugin_info['name'] = _wp($plugin_info['name']);
                     if (isset($plugin_info['title'])) {
                         $plugin_info['title'] = _wp($plugin_info['title']);
                     }
                     if (isset($plugin_info['description'])) {
                         $plugin_info['description'] = _wp($plugin_info['description']);
                     }
                     waSystem::popActivePlugin();
                     $plugin_info['id'] = $plugin_id;
                     $plugin_info['app_id'] = $this->application;
                     if (isset($plugin_info['img'])) {
                         $plugin_info['img'] = 'wa-apps/' . $this->application . '/plugins/' . $plugin_id . '/' . $plugin_info['img'];
                     }
                     if (isset($plugin_info['rights']) && $plugin_info['rights']) {
                         $plugin_info['handlers']['rights.config'] = 'rightsConfig';
                     }
                     if (isset($plugin_info['frontend']) && $plugin_info['frontend']) {
                         $plugin_info['handlers']['routing'] = 'routing';
                     }
                     if (!empty($plugin_info[$this->application . '_settings'])) {
                         $plugin_info['custom_settings'] = $plugin_info[$this->application . '_settings'];
                     }
                     $this->plugins[$plugin_id] = $plugin_info;
                 }
             }
             if (!SystemConfig::isDebug()) {
                 waUtils::varExportToFile($this->plugins, $file);
             } else {
                 waFiles::delete($file);
             }
         } else {
             $this->plugins = (include $file);
         }
     }
     return $this->plugins;
 }
 /** Execute appropriate controller and return it's result.
  * Throw 404 exception if no controller found. */
 public function execute($plugin = null, $module = null, $action = null, $default = false)
 {
     if (!$this->system->getConfig()->checkRights($module, $action)) {
         throw new waRightsException(_ws("Access denied."));
     }
     // current app prefix
     $prefix = $this->system->getConfig()->getPrefix();
     // Load plugin locale and set plugin as active
     if ($plugin) {
         $plugin_path = $this->system->getAppPath('plugins/' . $plugin, $this->system->getApp());
         if (!file_exists($plugin_path . '/lib/config/plugin.php')) {
             $plugin = null;
         } else {
             $plugin_info = (include $plugin_path . '/lib/config/plugin.php');
             // check rights
             if (isset($plugin_info['rights']) && $plugin_info['rights']) {
                 if (!$this->system->getUser()->getRights($this->system->getConfig()->getApplication(), 'plugin.' . $plugin)) {
                     throw new waRightsException(_ws("Access denied"), 403);
                 }
             }
             waSystem::pushActivePlugin($plugin, $prefix);
             if (is_dir($plugin_path . '/locale')) {
                 waLocale::load($this->system->getLocale(), $plugin_path . '/locale', waSystem::getActiveLocaleDomain(), false);
             }
         }
     }
     // custom login and signup
     if (wa()->getEnv() == 'frontend') {
         if (!$plugin && !$action && $module == 'login') {
             $login_action = $this->system->getConfig()->getFactory('login_action');
             if ($login_action) {
                 $controller = $this->system->getDefaultController();
                 $controller->setAction($login_action);
                 $r = $controller->run();
                 return $r;
             }
         } elseif (!$plugin && !$action && $module == 'signup') {
             $signup_action = $this->system->getConfig()->getFactory('signup_action');
             if ($signup_action) {
                 $controller = $this->system->getDefaultController();
                 $controller->setAction($signup_action);
                 $r = $controller->run();
                 return $r;
             }
         }
     }
     //
     // Check possible ways to handle the request one by one
     //
     // list of failed class names (for debugging)
     $class_names = array();
     // Single Controller (recomended)
     $class_name = $prefix . ($plugin ? ucfirst($plugin) . 'Plugin' : '') . ucfirst($module) . ($action ? ucfirst($action) : '') . 'Controller';
     if (class_exists($class_name, true)) {
         /**
          * @var $controller waController
          */
         $controller = new $class_name();
         $r = $controller->run();
         if ($plugin) {
             waSystem::popActivePlugin();
         }
         return $r;
     }
     $class_names[] = $class_name;
     // Single Action
     $class_name = $prefix . ($plugin ? ucfirst($plugin) . 'Plugin' : '') . ucfirst($module) . ($action ? ucfirst($action) : '') . 'Action';
     if (class_exists($class_name)) {
         // get default view controller
         /**
          * @var $controller waDefaultViewController
          */
         $controller = $this->system->getDefaultController();
         $controller->setAction($class_name);
         $r = $controller->run();
         if ($plugin) {
             waSystem::popActivePlugin();
         }
         return $r;
     }
     $class_names[] = $class_name;
     // Controller Multi Actions, Zend/Symfony style
     $class_name = $prefix . ($plugin ? ucfirst($plugin) . 'Plugin' : '') . ucfirst($module) . 'Actions';
     if (class_exists($class_name, true)) {
         $controller = new $class_name();
         $r = $controller->run($action);
         if ($plugin) {
             waSystem::popActivePlugin();
         }
         return $r;
     }
     $class_names[] = $class_name;
     // Plugin is no longer active
     if ($plugin) {
         waSystem::popActivePlugin();
     }
     // Last chance: default action for this module
     if ($action && $default) {
         return $this->execute($plugin, $module);
     }
     // Too bad. 404.
     throw new waException(sprintf('Empty module and/or action after parsing the URL "%s" (%s/%s).<br />Not found classes: %s', $this->system->getConfig()->getCurrentUrl(), $module, $action, implode(', ', $class_names)), 404);
 }