public function execute()
 {
     $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
     installerHelper::checkUpdates($messages);
     if ($m = $this->view->getVars('messages')) {
         $messages = array_merge($m, $messages);
     }
     $this->view->assign('messages', $messages);
     $plugins = 'wa-plugins/payment';
     $apps = wa()->getApps();
     if (isset($apps['shop'])) {
         $plugins = 'shop';
     } else {
         ksort($apps);
         foreach ($apps as $app => $info) {
             if (!empty($info['plugins'])) {
                 $plugins = $app;
                 break;
             }
         }
     }
     $model = new waAppSettingsModel();
     $this->view->assign('update_counter', $model->get($this->getApp(), 'update_counter'));
     $this->view->assign('module', waRequest::get('module', 'backend'));
     $this->view->assign('default_query', array('plugins' => $plugins));
 }
 public function execute()
 {
     $extended = false;
     $this->view->assign('action', 'update');
     $update_counter = 0;
     $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
     $this->view->assign('error', false);
     $app = null;
     try {
         $app_list = installerHelper::getApps($messages, $update_counter);
         $slug = waRequest::get('slug');
         $vendor = waRequest::get('vendor');
         $edition = waRequest::get('edition');
         foreach ($app_list as $info) {
             if ($info['slug'] == $slug && $info['vendor'] == $vendor && $info['edition'] == $edition) {
                 $app = $info;
                 break;
             }
         }
         if (!$app) {
             throw new waException(_w('Application not found'));
         }
     } catch (Exception $ex) {
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
         $this->redirect(array('module' => 'apps', 'msg' => $msg));
     }
     $this->view->assign('identity_hash', installerHelper::getHash());
     $this->view->assign('messages', $messages);
     $this->view->assign('update_counter', $update_counter);
     $this->view->assign('app', $app);
     $this->view->assign('title', sprintf(_w('Application "%s"'), $app['name']));
 }
 /**
  *
  * @return installerMessage
  */
 public static function getInstance()
 {
     if (!self::$instance) {
         self::$instance = new self();
     }
     return self::$instance;
 }
 public function execute()
 {
     $this->view->assign('action', 'update');
     $counter = array('total' => 0, 'applicable' => 0, 'payware' => 0);
     $app_list = array();
     $this->view->assign('error', false);
     $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
     try {
         $app_list = installerHelper::getApps($messages, $counter);
         foreach ($app_list as &$info) {
             if ($info['slug'] == 'installer') {
                 $info['name'] = _w('Webasyst Framework');
                 break;
             }
         }
         unset($info);
         $plugin_list = installerHelper::getSystemPlugins($messages, $counter);
     } catch (Exception $ex) {
         $messages[] = array('text' => $ex->getMessage(), 'result' => 'fail');
     }
     installerHelper::checkUpdates($messages);
     $this->view->assign('messages', $messages);
     //$this->view->assign('install_counter', $model->get($this->getApp(), 'install_counter'));
     $this->getConfig()->setCount($counter['total'] ? $counter['total'] : null);
     $this->view->assign('update_counter', $counter['total']);
     $this->view->assign('update_counter_applicable', $counter['applicable']);
     $this->view->assign('apps', $app_list);
     $this->view->assign('plugins', $plugin_list);
     $this->view->assign('identity_hash', installerHelper::getHash());
     $this->view->assign('title', _w('Updates'));
 }
 public function execute()
 {
     $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
     $counter = array('total' => 0, 'applicable' => 0, 'payware' => 0);
     $items = array();
     try {
         $items = installerHelper::getUpdates();
         $counter = installerHelper::getUpdatesCounter(null);
         if (isset($items['installer'])) {
             $items['installer']['name'] = _w('Webasyst Framework');
         }
     } catch (Exception $ex) {
         $messages[] = array('text' => $ex->getMessage(), 'result' => 'fail');
     }
     installerHelper::checkUpdates($messages);
     if (!waRequest::get('_')) {
         $this->setLayout(new installerBackendLayout());
         if ($messages) {
             $this->getLayout()->assign('messages', $messages);
         }
         $this->getLayout()->assign('update_counter', $counter['total']);
         $this->getLayout()->assign('no_ajax', true);
     } else {
         $this->view->assign('messages', $messages);
     }
     $this->view->assign('error', false);
     $this->view->assign('update_counter', $counter['total']);
     $this->view->assign('update_counter_applicable', $counter['applicable']);
     $this->view->assign('items', $items);
     $this->view->assign('domain', installerHelper::getDomain());
     $this->view->assign('title', _w('Updates'));
 }
 function execute()
 {
     try {
         $message = array();
         $settings = waRequest::get('setting');
         if ($settings) {
             $model = new waAppSettingsModel();
             $changed = false;
             foreach ((array) $settings as $setting) {
                 if (in_array($setting, array('auth_form_background'))) {
                     if ($value = $model->get('webasyst', $setting)) {
                         waFiles::delete(wa()->getDataPath($value, true, 'webasyst'));
                         $message[] = _w('Image deleted');
                     }
                 } else {
                     $changed = true;
                 }
                 $model->set('webasyst', $setting, false);
             }
             if ($changed) {
                 $message[] = _w('Settings saved');
             }
         }
         $params = array('module' => 'settings', 'msg' => installerMessage::getInstance()->raiseMessage(implode(', ', $message)));
         $this->redirect($params);
     } catch (waException $ex) {
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
         $params = array('module' => 'settings', 'msg' => $msg);
         $this->redirect($params);
     }
 }
 public function execute()
 {
     $extended = false;
     $this->view->assign('action', 'update');
     $this->view->assign('error', false);
     $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
     $update_counter = null;
     $this->view->assign('apps', installerHelper::getApps($messages, $update_counter));
     installerHelper::checkUpdates($messages);
     $this->view->assign('identity_hash', installerHelper::getHash());
     $this->view->assign('messages', $messages);
     $model = new waAppSettingsModel();
     $this->view->assign('update_counter', $model->get($this->getApp(), 'update_counter'));
     $this->view->assign('extended', $extended);
     $this->view->assign('title', _w('Installer'));
 }
 public function execute()
 {
     $extended = false;
     $this->view->assign('action', 'update');
     $this->view->assign('error', false);
     $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
     $filter = array();
     $filter['enabled'] = true;
     if ($this->module) {
         $filter['extras'] = $this->module;
     }
     $applications = installerHelper::getApps($messages, $this->update_counter, $filter);
     $app = false;
     try {
         $subject = waRequest::get('subject');
         if (empty($subject)) {
             $storage = wa()->getStorage();
             $search = array();
             $extras = preg_replace('/s$/', '', $this->module);
             $slug_id = "installer_select_{$extras}";
             $vendor_id = "installer_select_{$extras}_vendor";
             $search['slug'] = waRequest::get('slug', $storage->read($slug_id));
             $search['vendor'] = waRequest::get('vendor', $storage->read($vendor_id));
             if ((!$this->redirect || array_filter($search, 'strlen')) && ($app = installerHelper::search($applications, $search))) {
                 $storage->write($slug_id, $search['slug'] = $app['slug']);
                 $storage->write($vendor_id, $search['vendor'] = $app['vendor']);
             } else {
                 reset($applications);
                 if ($app = current($applications)) {
                     $this->redirect(array('module' => $this->module, 'slug' => $app['slug'], 'vendor' => $app['vendor']));
                 }
             }
             $this->view->assign('slug', $search['slug']);
             $this->view->assign('vendor', $search['vendor']);
             $this->view->assign('selected_app', $app);
         }
     } catch (Exception $ex) {
         $messages[] = array('text' => $ex->getMessage(), 'result' => 'fail');
     }
     installerHelper::checkUpdates($messages);
     $model = new waAppSettingsModel();
     $this->view->assign('update_counter', $model->get($this->getApp(), 'update_counter'));
     $this->view->assign('messages', $messages);
     $this->view->assign('apps', $applications);
     $this->view->assign('extended', $extended);
     $this->view->assign('title', _w('Installer'));
 }
 public function execute()
 {
     //TODO use POST
     $app_ids = waRequest::request('app_id');
     try {
         if (installerHelper::isDeveloper()) {
             throw new waException(_w('Unable to delete application (developer version is on)'));
         }
         if (!$app_ids || !is_array($app_ids)) {
             throw new waException(_w('Application not found'));
         }
         foreach ($app_ids as &$info) {
             if (!is_array($info)) {
                 $info = array('vendor' => $info);
             }
         }
         unset($info);
         $this->apps = new waInstallerApps();
         $app_list = $this->apps->getApps(array('installed' => true));
         $deleted_apps = array();
         foreach ($app_list as $info) {
             $app_id = $info['slug'];
             if (isset($app_ids[$app_id]) && $app_ids[$app_id]['vendor'] == $info['vendor']) {
                 if (!empty($info['installed']['system'])) {
                     throw new waException(sprintf(_w('Can not delete system application "%s"'), $info['name']));
                 }
                 $deleted_apps[] = $this->deleteApp($app_id);
             }
         }
         wa()->setActive('installer');
         if (!$deleted_apps) {
             throw new waException(_w('Application not found'));
         }
         $message = _w('Application %s has been deleted', 'Applications %s have been deleted', min(2, count($deleted_apps)), false);
         $message = sprintf($message, implode(', ', $deleted_apps));
         $msg = installerMessage::getInstance()->raiseMessage($message);
     } catch (Exception $ex) {
         wa()->setActive('installer');
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
     }
     //'module' => installerHelper::getModule(),
     $this->redirect(array('msg' => $msg));
 }
示例#10
0
 public function execute()
 {
     if (!waRequest::get('_')) {
         $this->setLayout(new installerBackendLayout());
     }
     $options = array('local' => false, 'filter' => (array) waRequest::get('filter'));
     try {
         $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
         $this->view->assign('apps', $apps = installerHelper::getInstaller()->getApps($options));
         $vendor_name = null;
         if (!empty($options['filter']['vendor']) && empty($vendor_name)) {
             foreach ($apps as $app) {
                 if (!empty($app['vendor_name'])) {
                     $vendor_name = $app['vendor_name'];
                     break;
                 }
             }
         }
         $this->view->assign('vendor_name', $vendor_name);
     } catch (Exception $ex) {
         $messages[] = array('text' => $ex->getMessage(), 'result' => 'fail');
         $this->view->assign('messages', $messages);
     }
 }
 public function execute()
 {
     try {
         $message = array();
         $settings = waRequest::get('setting');
         if ($settings) {
             $model = new waAppSettingsModel();
             $changed = false;
             foreach ((array) $settings as $setting) {
                 if (in_array($setting, array('auth_form_background'))) {
                     $images_path = wa()->getDataPath(null, true, 'webasyst');
                     if ($images = waFiles::listdir($images_path)) {
                         foreach ($images as $image) {
                             if (is_file($images_path . '/' . $image) && !preg_match('@\\.(jpe?g|png|gif|bmp)$@', $image)) {
                                 waFiles::delete($images_path . "/" . $image);
                             }
                         }
                         $message[] = _w('Image deleted');
                     }
                 } else {
                     $changed = true;
                 }
                 $model->del('webasyst', $setting);
             }
             if ($changed) {
                 $message[] = _w('Settings saved');
             }
         }
         $params = array('module' => 'settings', 'msg' => installerMessage::getInstance()->raiseMessage(implode(', ', $message)));
         $this->redirect($params);
     } catch (waException $ex) {
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
         $params = array('module' => 'settings', 'msg' => $msg);
         $this->redirect($params);
     }
 }
 public function execute()
 {
     $module = 'update';
     $url = parse_url(waRequest::server('HTTP_REFERER'), PHP_URL_QUERY);
     if (preg_match('/(^|&)module=(update|apps|plugins)($|&)/', $url, $matches)) {
         $module = $matches[2];
     }
     try {
         $updater = new waInstaller(waInstaller::LOG_TRACE);
         $state = $updater->getState();
         if (!isset($state['stage_status']) || $state['stage_name'] != waInstaller::STAGE_NONE && $state['heartbeat'] > waInstaller::TIMEOUT_RESUME + 5 || $state['stage_name'] == waInstaller::STAGE_UPDATE && $state['heartbeat'] || $state['stage_status'] == waInstaller::STATE_ERROR && $state['heartbeat'] || $state['stage_name'] == waInstaller::STAGE_NONE && $state['heartbeat'] === false) {
             $updater->setState();
             $this->view->assign('action', 'update');
             $app_ids = waRequest::request('app_id');
             $default_info = array('vendor' => waInstallerApps::VENDOR_SELF, 'edition' => '');
             $vendors = array();
             if ($app_ids && is_array($app_ids)) {
                 foreach ($app_ids as $app_id => &$info) {
                     if (!is_array($info)) {
                         if (strpos($info, ':') === false) {
                             $vendor = $info;
                             $edition = '';
                         } else {
                             list($vendor, $edition) = explode(':', $info, 2);
                         }
                         $info = array('vendor' => $vendor, 'edition' => $edition);
                     } else {
                         $info = array_merge($info, $default_info);
                     }
                     $vendors[] = $info['vendor'];
                     unset($info);
                 }
             } else {
                 $app_ids = array();
             }
             $vendors = array_unique($vendors);
             if (!$vendors) {
                 $vendors = array();
             }
             $model = new waAppSettingsModel();
             $license = $model->get('webasyst', 'license', false);
             $locale = wa()->getLocale();
             $apps = new waInstallerApps($license, $locale);
             $app_list = $vendors ? $apps->getApplicationsList(false, $vendors) : array();
             $model->ping();
             $queue_apps = array();
             foreach ($app_list as &$info) {
                 $app_id = $info['slug'];
                 if ($app_id == 'installer') {
                     $info['name'] = _w('Webasyst Framework');
                 }
                 if (isset($app_ids[$app_id])) {
                     if (installerHelper::equals($app_ids[$app_id], $info)) {
                         $queue_apps[] = $info;
                     }
                 }
                 if (!empty($info['extras'])) {
                     foreach ($info['extras'] as $type => &$extras) {
                         foreach ($extras as $extra_id => &$extras_info) {
                             $extras_id = $extras_info['slug'];
                             $extras_info['name'] .= " ({$info['name']})";
                             if (isset($app_ids[$extras_id]) && installerHelper::equals($app_ids[$extras_id], $extras_info)) {
                                 $queue_apps[] = $extras_info;
                             }
                         }
                         unset($extras_info);
                     }
                     unset($extras);
                 }
                 unset($info);
             }
             $system_list = $apps->getSystemList();
             foreach ($system_list as $item) {
                 if (!empty($item['subject']) && $item['subject'] == 'systemplugins' && isset($app_ids[$item['slug']])) {
                     $queue_apps[] = $item;
                 }
             }
             if (!$queue_apps) {
                 throw new waException(_w('Please select items for update'));
             }
             $this->view->assign('queue_apps', $queue_apps);
             $this->view->assign('apps', $app_list);
             $this->view->assign('install', waRequest::request('install'));
             $this->view->assign('title', _w('Updates'));
         } else {
             $this->redirect(array('module' => $module, 'msg' => installerMessage::getInstance()->raiseMessage(_w('Update is already in progress. Please wait while previous update session is finished before starting update session again.'), 'fail')));
         }
     } catch (Exception $ex) {
         $this->redirect(array('module' => $module, 'msg' => installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL)));
     }
 }
 function execute()
 {
     $module = 'apps';
     $url = parse_url(waRequest::server('HTTP_REFERER'), PHP_URL_QUERY);
     if (preg_match('/(^|&)module=(update|apps|plugins)($|&)/', $url, $matches)) {
         $module = $matches[2];
     }
     $app_ids = waRequest::get('app_id');
     try {
         if (!$app_ids || !is_array($app_ids)) {
             throw new waException(_w('Application not found'));
         }
         $vendors = array();
         foreach ($app_ids as $app_id => &$info) {
             if (!is_array($info)) {
                 $info = array('vendor' => $info);
             }
             $vendors[] = $info['vendor'];
             unset($info);
         }
         $vendors = array_unique($vendors);
         $apps = new waInstallerApps();
         $app_list = $apps->getApplicationsList(true, $vendors);
         $deleted_apps = array();
         if (installerHelper::isDeveloper()) {
             throw new waException(_w('Unable to delete application (developer version is on)'));
         }
         foreach ($app_list as $info) {
             $app_id = $info['slug'];
             if (isset($app_ids[$app_id]) && $app_ids[$app_id]['vendor'] == $info['vendor']) {
                 if (isset($info['system']) && $info['system']) {
                     throw new waException(sprintf(_w('Can not delete system application "%s"'), $info['name']));
                 }
                 $apps->updateRoutingConfig($app_id, false);
                 $apps->updateAppConfig($app_id, null);
                 //remove db tables and etc
                 $paths = array();
                 $app_instance = waSystem::getInstance($app_id);
                 $plugins = $app_instance->getConfig()->getPlugins();
                 foreach ($plugins as $plugin_id => $plugin) {
                     if ($plugin && ($plugin_instance = $app_instance->getPlugin($plugin_id))) {
                         $plugin_instance->uninstall();
                     }
                     $apps->updateAppPluginsConfig($app_id, $plugin_id, null);
                     //wa-apps/$app_id/plugins/$slug
                     $paths[] = wa()->getAppPath("plugins/{$plugin_id}", $app_id);
                     foreach ($paths as $path) {
                         waFiles::delete($path, true);
                     }
                     $paths = array();
                 }
                 $app_instance->getConfig()->uninstall();
                 //XXX called at uninstall
                 //$paths[] = wa()->getAppCachePath(null, $app_id);//wa-cache/apps/$app_id/
                 $paths[] = wa()->getTempPath(null, $app_id);
                 //wa-cache/temp/$app_id/
                 $paths[] = wa()->getAppCachePath(null, $app_id);
                 //wa-cache/apps/$app_id/
                 $paths[] = wa()->getDataPath(null, true, $app_id);
                 //wa-data/public/$app_id/
                 $paths[] = wa()->getDataPath(null, false, $app_id);
                 //wa-data/protected/$app_id/
                 //XXX uncomplete code
                 //$paths[] = wa()->   null, false, $app_id);//wa-log/$app_id/
                 //XXX uncomplete code
                 //$paths[] = wa()->getAppPath(null, $app_id);//wa-config/$app_id/
                 $paths[] = wa()->getAppPath(null, $app_id);
                 //wa-apps/$app_id/
                 foreach ($paths as $path) {
                     waFiles::delete($path, true);
                 }
                 $deleted_apps[] = $info['name'];
             }
         }
         if (!$deleted_apps) {
             throw new waException(_w('Application not found'));
         }
         $message = _w('Application %s has been deleted', 'Applications %s have been deleted', min(2, count($deleted_apps)), false);
         $message = sprintf($message, implode(', ', $deleted_apps));
         $msg = installerMessage::getInstance()->raiseMessage($message);
         $this->redirect(array('module' => $module, 'msg' => $msg));
     } catch (Exception $ex) {
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
         $this->redirect(array('module' => $module, 'msg' => $msg));
     }
 }
 public function execute()
 {
     $this->init();
     try {
         $updater = new waInstaller(waInstaller::LOG_TRACE);
         $state = $updater->getState();
         if (!isset($state['stage_status']) || $state['stage_name'] != waInstaller::STAGE_NONE && $state['heartbeat'] > waInstaller::TIMEOUT_RESUME + 5 || $state['stage_name'] == waInstaller::STAGE_UPDATE && $state['heartbeat'] || $state['stage_status'] == waInstaller::STATE_ERROR && $state['heartbeat'] || $state['stage_name'] == waInstaller::STAGE_NONE && $state['heartbeat'] === false) {
             $updater->setState();
             $state = $updater->getState();
             $apps = installerHelper::getInstaller();
             $items = $apps->getUpdates(null, $this->getItemsList());
             $queue_apps = array();
             $execute_actions = array(waInstallerApps::ACTION_INSTALL, waInstallerApps::ACTION_CRITICAL_UPDATE, waInstallerApps::ACTION_UPDATE);
             foreach ($items as $app_id => $info) {
                 if (!empty($info['download_url']) && in_array($info['action'], $execute_actions)) {
                     $info['subject'] = 'app';
                     if ($app_id == 'installer') {
                         foreach ($info['download_url'] as $target => $url) {
                             $_info = $info;
                             $_info['download_url'] = $url;
                             $_info['name'] = _w('Webasyst Framework') . ' (' . $target . ')';
                             $this->add($target, $_info);
                             $queue_apps[$target] = $_info;
                             unset($_info);
                         }
                     } else {
                         $target = 'wa-apps/' . $app_id;
                         $this->add($target, $info, $app_id);
                         $queue_apps[$target] = $info;
                     }
                 }
                 foreach (array('themes', 'plugins') as $type) {
                     if (!empty($info[$type]) && is_array($info[$type])) {
                         foreach ($info[$type] as $extra_id => $extras_info) {
                             if (!empty($extras_info['download_url']) && in_array($extras_info['action'], $execute_actions)) {
                                 $extras_info['subject'] = 'app_' . $type;
                                 if ($type == 'themes' && is_array($extras_info['download_url'])) {
                                     foreach ($extras_info['download_url'] as $target => $url) {
                                         $__info = $extras_info;
                                         $__info['download_url'] = $url;
                                         $__info['slug'] = preg_replace('@^wa-apps/@', '', $target);
                                         $__info['app'] = preg_replace('@^wa-apps/([^/]+)/.+$@', '$1', $target);
                                         if (!isset($queue_apps[$target])) {
                                             if ($__info['app'] == $app_id || empty($items[$__info['app']][$type][$extra_id])) {
                                                 if (!empty($items[$__info['app']][$type][$extra_id]['name'])) {
                                                     $__info['name'] .= " ({$info['name']})";
                                                 } elseif ($app_info = wa()->getAppInfo($__info['app'])) {
                                                     $__info['name'] .= " ({$app_info['name']})";
                                                 } else {
                                                     $__info['name'] .= " ({$__info['app']})";
                                                 }
                                                 $this->add($target, $__info);
                                                 $queue_apps[$target] = $__info;
                                             }
                                         }
                                     }
                                 } else {
                                     if (!empty($info['name'])) {
                                         $extras_info['name'] .= " ({$info['name']})";
                                     }
                                     if (strpos($app_id, '/')) {
                                         //system plugins
                                         $target = $app_id . '/' . $extra_id;
                                     } else {
                                         $target = 'wa-apps/' . $app_id . '/' . $type . '/' . $extra_id;
                                     }
                                     $this->add($target, $extras_info, $target);
                                     $queue_apps[$target] = $extras_info;
                                 }
                             }
                         }
                     }
                 }
                 unset($info);
             }
             if (!$queue_apps) {
                 throw new waException(_w('Please select items for update'));
             }
             if (!waRequest::get('_')) {
                 $this->setLayout(new installerBackendLayout());
                 $this->getLayout()->assign('no_ajax', true);
             }
             $this->view->assign('action', 'update');
             $this->view->assign('queue_apps', $queue_apps);
             $install = waRequest::request('install');
             $this->view->assign('install', !empty($install) ? 'install' : '');
             $this->view->assign('title', _w('Updates'));
             $this->view->assign('thread_id', $state['thread_id']);
             $this->view->assign('return_url', waRequest::post('return_url'));
             $cache = new waSerializeCache($this->getApp() . '.' . $state['thread_id']);
             $cache->set($this->urls);
         } else {
             $msg = _w('Update is already in progress. Please wait while previous update session is finished before starting update session again.');
             $this->redirect(array('module' => $this->module, 'msg' => installerMessage::getInstance()->raiseMessage($msg, installerMessage::R_FAIL)));
         }
     } catch (Exception $ex) {
         $this->redirect(array('module' => $this->module, 'msg' => installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL)));
     }
 }
 public function execute()
 {
     $model = new waAppSettingsModel();
     $settings = array('name' => 'Webasyst', 'url' => wa()->getRootUrl(true), 'auth_form_background' => null, 'auth_form_background_stretch' => 1, 'locale' => 'ru_RU', 'email' => '', 'rememberme' => 1);
     $config_settings = array('debug' => 'boolean');
     $flush_settings = array('debug');
     $config_path = waSystem::getInstance()->getConfigPath() . '/config.php';
     $config = file_exists($config_path) ? include $config_path : array();
     if (!is_array($config)) {
         $config = array();
     }
     $changed = false;
     $flush = false;
     $message = array();
     try {
         $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
         foreach ($settings as $setting => &$value) {
             if (waRequest::post() && !in_array($setting, array('auth_form_background'))) {
                 $post_value = waRequest::post($setting, '', 'string_trim');
                 if (!is_null($post_value)) {
                     $model->set('webasyst', $setting, $post_value);
                     $changed = true;
                 } elseif (!is_null($value)) {
                     $model->set('webasyst', $setting, '');
                 }
                 $value = $model->get('webasyst', $setting, $value);
             } else {
                 $value = $model->get('webasyst', $setting, $value);
             }
             unset($value);
         }
         $config_changed = false;
         if (waRequest::post()) {
             $config_values = waRequest::post('config');
             if (!is_array($config_values)) {
                 $config_values = array();
             }
             foreach ($config_settings as $setting => $type) {
                 $value = isset($config_values[$setting]) ? $config_values[$setting] : false;
                 switch ($type) {
                     case 'boolean':
                         $value = $value ? true : false;
                         break;
                 }
                 if (!isset($config[$setting]) || $config[$setting] !== $value) {
                     $config[$setting] = $value;
                     $config_changed = true;
                     if (in_array($setting, $flush_settings)) {
                         $flush = true;
                     }
                 }
             }
             if ($config_changed) {
                 waUtils::varExportToFile($config, $config_path);
             }
             if ($flush) {
                 $path_cache = waConfig::get('wa_path_cache');
                 waFiles::delete($path_cache, true);
                 waFiles::protect($path_cache);
             }
             $model->ping();
         }
         if ($changed || $config_changed) {
             $message[] = '[`Settings saved`]';
         }
         $name = preg_replace('/\\?.*$/', '', $settings['auth_form_background']);
         $path = wa()->getDataPath($name, true, 'webasyst');
         $file = waRequest::file('auth_form_background');
         if ($file->uploaded()) {
             if ($name) {
                 waFiles::delete(wa()->getDataPath($name, true, 'webasyst'));
                 $model->set('webasyst', 'auth_form_background', false);
                 $settings['auth_form_background'] = false;
             }
             $ext = 'png';
             if (preg_match('/\\.(png|gif|jpg|jpeg|bmp|tif)$/i', $file->name, $matches)) {
                 $ext = $matches[1];
             }
             $name = 'auth_form_background.' . $ext;
             $path = wa()->getDataPath($name, true, 'webasyst');
             try {
                 $image = $file->waImage();
             } catch (waException $ex) {
                 $message = $ex->getMessage();
                 $tmp_name = $file->tmp_name;
                 if (!preg_match('//u', $tmp_name)) {
                     $tmp_name = iconv('windows-1251', 'utf-8', $tmp_name);
                 }
                 if (strpos($message, $tmp_name) !== false) {
                     throw new waException(preg_replace('/:\\s*$/', '', str_replace($tmp_name, '', $message)));
                 }
                 throw $ex;
             }
             $file->copyTo($path);
             //$image->save($path);
             $name .= '?' . time();
             $model->set('webasyst', 'auth_form_background', $name);
             $settings['auth_form_background'] = $name;
             $message[] = '[`Image uploaded`]';
             $image_info = get_object_vars($image);
             $image_info['file_size'] = filesize($path);
             $image_info['file_name'] = basename($path);
             $this->view->assign('image', $image_info);
         }
         if ($settings['auth_form_background'] && file_exists($path)) {
             $image = new waImage($path);
             $image_info = get_object_vars($image);
             $image_info['file_size'] = filesize($path);
             $image_info['file_name'] = basename($path);
             $this->view->assign('image', $image_info);
             unset($image);
         }
         if ($message) {
             $params = array();
             $params['module'] = 'settings';
             $params['msg'] = installerMessage::getInstance()->raiseMessage(implode(', ', $message));
             $this->redirect($params);
         }
     } catch (waException $ex) {
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
         $params = array('module' => 'settings', 'msg' => $msg);
         if ($message) {
             //$params['success'] = base64_encode(implode(', ', $message));
         }
         $this->redirect($params);
     }
     $this->view->assign('update_counter', $model->get($this->getApp(), 'update_counter'));
     //$this->view->assign('install_counter', $model->get($this->getApp(), 'install_counter'));
     $apps = wa()->getApps();
     $version = $apps['installer']['version'];
     if (abs(time() - $apps['installer']['build']) > 2) {
         $version .= '.' . $apps['installer']['build'];
     }
     $this->view->assign('version', $version);
     $this->view->assign('settings', $settings);
     $this->view->assign('config', $config);
     $this->view->assign('action', 'settings');
     $this->view->assign('messages', $messages);
     $locales = waSystem::getInstance()->getConfig()->getLocales('name');
     $this->view->assign('locales', $locales);
     $this->view->assign('title', _w('Settings'));
 }
 function execute()
 {
     if (!$this->extras_type && preg_match('/^installer(\\w+)RemoveAction$/', get_class($this), $matches)) {
         $this->extras_type = strtolower($matches[1]);
     }
     $module = $this->extras_type;
     $url = parse_url(waRequest::server('HTTP_REFERER'), PHP_URL_QUERY);
     if (preg_match("/(^|&)module=(update|apps| {\n            {$this->extras_type}})(\$|&)/", $url, $matches)) {
         $module = $matches[2];
     }
     $extras_ids = waRequest::get('extras_id');
     try {
         /*
         _w('Application themes not found');
         _w('Application plugins not found');
         */
         //$message =  sprintf('Application %s not found', $this->extras_type);
         //throw new waException(_w($message));
         if (installerHelper::isDeveloper()) {
             /*
             _w("Unable to delete application's themes (developer version is on)");
             _w("Unable to delete application's plugins (developer version is on)");
             */
             $message = "Unable to delete application's {$this->extras_type} (developer version is on)";
             throw new waException(_w($message));
         }
         $vendors = array();
         foreach ($extras_ids as $extras_id => &$info) {
             if (!is_array($info)) {
                 $info = array('vendor' => $info);
             }
             $vendors[] = $info['vendor'];
             unset($info);
         }
         $vendors = array_unique($vendors);
         $locale = wa()->getLocale();
         $this->installer = new waInstallerApps(null, $locale);
         $app_list = $this->installer->getApplicationsList(true);
         $deleted_extras = array();
         foreach ($app_list as $app) {
             if (isset($app['extras']) && $app['extras'] && isset($app['extras'][$this->extras_type]) && $app['extras'][$this->extras_type]) {
                 foreach ($app['extras'][$this->extras_type] as $extras_id => $info) {
                     $slug = $info['slug'];
                     if (isset($extras_ids[$slug]) && $extras_ids[$slug]['vendor'] == $info['current']['vendor']) {
                         if (isset($info['system']) && $info['system']) {
                             /*
                             _w("Can not delete system application's themes \"%s\"");
                             _w("Can not delete system application's plugins \"%s\"");
                             */
                             $message = "Can not delete system application's {$this->extras_type} \"%s\"";
                             throw new waException(sprintf(_w($message), $info['name']));
                         }
                         if ($this->removeExtras($app['slug'], $extras_id, $info)) {
                             $deleted_extras[] = "{$info['name']} ({$app['name']})";
                         }
                         unset($extras_ids[$slug]);
                     }
                 }
             }
         }
         foreach ($extras_ids as $slug => $data) {
             if (preg_match('@^wa-plugins/([^/]+/[^/]+)$@', $slug, $matches)) {
                 $path = wa()->getConfig()->getPath('plugins') . '/' . $matches[1];
                 $info_path = $path . '/lib/config/plugin.php';
                 if (file_exists($info_path) && ($info = (include $info_path))) {
                     waFiles::delete($path, true);
                     $deleted_extras[] = empty($info['name']) ? $matches[1] : $info['name'];
                 }
             }
         }
         if (!$deleted_extras) {
             $message = sprintf('Application %s not found', $this->extras_type);
             throw new waException(_w($message));
         }
         /*
         _w('Application plugin %s has been deleted', 'Applications plugins %s have been deleted');
         _w('Application theme %s has been deleted', 'Applications themes %s have been deleted');
         */
         $message_singular = sprintf('Application %s %%s has been deleted', preg_replace('/s$/', '', $this->extras_type));
         $message_plural = sprintf('Applications %a %%s have been deleted', $this->extras_type);
         $message = sprintf(_w($message_singular, $message_plural, count($deleted_extras), false), implode(', ', $deleted_extras));
         $msg = installerMessage::getInstance()->raiseMessage($message);
         $this->redirect(array('module' => $module, 'msg' => $msg));
     } catch (Exception $ex) {
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
         $this->redirect(array('module' => $module, 'msg' => $msg));
     }
 }
 public function execute()
 {
     $this->init();
     $extras_ids = waRequest::post('extras_id');
     try {
         /*
         _w('Application themes not found');
         _w('Application plugins not found');
         */
         foreach ($extras_ids as &$info) {
             if (!is_array($info)) {
                 $info = array('vendor' => $info);
             }
             unset($info);
         }
         $options = array('installed' => true, 'local' => true);
         if ($this->extras_type == 'plugins') {
             $options['system'] = true;
         }
         $this->installer = installerHelper::getInstaller();
         $app_list = $this->installer->getItems($options);
         $queue = array();
         foreach ($extras_ids as $slug => $info) {
             $slug_chunks = explode('/', $slug);
             if ($slug_chunks[0] == 'wa-plugins') {
                 $app_id = $slug_chunks[0] . '/' . $slug_chunks[1];
             } else {
                 $app_id = reset($slug_chunks);
             }
             if (isset($app_list[$app_id]) || $slug_chunks == 'wa-plugins') {
                 $app = $app_list[$app_id];
                 if (($installed = $this->installer->getItemInfo($slug, $options)) && $info['vendor'] == $installed['vendor']) {
                     if (!empty($installed['installed']['system'])) {
                         /*
                         _w("Can not delete system application's themes \"%s\"");
                         _w("Can not delete system application's plugins \"%s\"");
                         */
                         $message = "Can not delete system application's {$this->extras_type} \"%s\"";
                         throw new waException(sprintf(_w($message), _wd($slug, isset($info['name']) ? $info['name'] : '???')));
                     }
                     $queue[] = array('app_slug' => $app_id, 'ext_id' => $installed['id'], 'name' => sprintf("%s (%s)", _wd($slug, $installed['installed']['name']), _wd($app_id, $app['name'])));
                     unset($extras_ids[$slug]);
                 }
             }
         }
         $deleted_extras = array();
         foreach ($queue as $q) {
             if ($this->removeExtras($q['app_slug'], $q['ext_id'])) {
                 $deleted_extras[] = $q['name'];
             }
         }
         if (!$deleted_extras) {
             $message = sprintf('Application %s not found', $this->extras_type);
             throw new waException(_w($message));
         }
         /*
         _w('Application plugin %s has been deleted', 'Applications plugins %s have been deleted');
         _w('Application theme %s has been deleted', 'Applications themes %s have been deleted');
         */
         $message_singular = sprintf('Application %s %%s has been deleted', preg_replace('/s$/', '', $this->extras_type));
         $message_plural = sprintf('Applications %a %%s have been deleted', $this->extras_type);
         $message = sprintf(_w($message_singular, $message_plural, count($deleted_extras), false), implode(', ', $deleted_extras));
         $msg = installerMessage::getInstance()->raiseMessage($message);
         $this->redirect('?msg=' . $msg . '#/' . $this->extras_type . '/');
     } catch (Exception $ex) {
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
         $this->redirect('?msg=' . $msg . '#/' . $this->extras_type . '/');
     }
 }
 public function execute()
 {
     if (!waRequest::get('_') && false) {
         $this->setLayout(new installerBackendLayout());
     }
     $this->view->assign('action', 'update');
     $this->view->assign('error', false);
     $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
     $filter = array();
     if ($this->module) {
         $filter['extras'] = $this->module;
     }
     $app_options = $this->getAppOptions();
     try {
         $applications = installerHelper::getInstaller()->getApps($app_options, $filter);
         $this->extendApplications($applications);
         $subject = waRequest::get('subject');
         if (empty($subject)) {
             $extras = array();
             $search = array();
             $options = $this->getExtrasOptions();
             $slug = waRequest::get('slug');
             if (!empty($options['filter']['slug'])) {
                 $slug = $options['filter']['slug'];
                 unset($options['filter']['slug']);
             }
             $search['slug'] = array_filter(array_map('trim', explode(',', $slug)), 'strlen');
             if ($this->module == 'themes') {
                 if (empty($search['slug'])) {
                     $search['slug'] = array_keys($applications);
                 }
             } else {
                 foreach ($search['slug'] as $id) {
                     if (isset($applications[$id]) && !empty($applications[$id]['system_plugins'])) {
                         $search['slug'] = array_unique(array_merge($search['slug'], $applications[$id]['system_plugins']));
                     }
                 }
             }
             if ((!$this->redirect || !empty($search['slug'])) && ($keys = installerHelper::search($applications, $search, true)) !== null) {
                 $slug = array();
                 foreach ($keys as $id => $key) {
                     $slug[$id] = $applications[$key]['slug'];
                 }
                 $extras = installerHelper::getInstaller()->getExtras($slug, $this->module, $options);
                 $vendor_name = null;
                 foreach ($extras as $app_id => $app_item) {
                     if (!empty($app_item[$this->module])) {
                         foreach ($app_item[$this->module] as $extras_id => $extras_item) {
                             if (!empty($extras_item['vendor_name']) && !empty($options['filter']['vendor']) && empty($vendor_name)) {
                                 $vendor_name = $extras_item['vendor_name'];
                             }
                             if (in_array($app_id, $keys) !== false) {
                                 $app =& $applications[$app_id];
                                 if (!isset($app[$this->module])) {
                                     $app[$this->module] = array();
                                 }
                                 $app[$this->module][$extras_id] = $extras_item;
                                 unset($app);
                             } elseif (!empty($extras_item['inherited'])) {
                                 foreach (array_keys($extras_item['inherited']) as $app_id) {
                                     if (in_array($app_id, $keys) !== false) {
                                         $app =& $applications[$app_id];
                                         if (!isset($app[$this->module])) {
                                             $app[$this->module] = array();
                                         }
                                         $app[$this->module][$extras_id] = $extras_item;
                                         unset($app);
                                     }
                                 }
                             }
                         }
                     }
                 }
                 foreach ($keys as $id => $key) {
                     if (empty($applications[$key][$this->module])) {
                         unset($slug[$id]);
                     }
                 }
                 $this->view->assign('vendor_name', $vendor_name);
             } else {
                 reset($applications);
                 if ($app = current($applications)) {
                     $this->redirect(array('module' => $this->module, 'slug' => $app['slug'], 'vendor' => $app['vendor']));
                 }
             }
             $this->view->assign('slug', $search['slug']);
             //$this->view->assign('vendor', $search['vendor']);
             $this->view->assign('extras', $extras);
         }
         $this->view->assign('apps', $applications);
     } catch (Exception $ex) {
         $messages[] = array('text' => $ex->getMessage(), 'result' => 'fail');
     }
     installerHelper::checkUpdates($messages);
     $model = new waAppSettingsModel();
     $this->view->assign('update_counter', $model->get($this->getApp(), 'update_counter'));
     $this->view->assign('messages', $messages);
     $this->view->assign('title', _w('Installer'));
 }
 public function execute()
 {
     $model = new waAppSettingsModel();
     $settings = array('name' => 'Webasyst', 'url' => wa()->getRootUrl(true), 'auth_form_background' => 'stock:bokeh_vivid.jpg', 'auth_form_background_stretch' => 1, 'locale' => 'ru_RU', 'email' => '', 'sender' => '', 'rememberme' => 1);
     $config_settings = array('debug' => 'boolean');
     $flush_settings = array('debug');
     $config_path = waSystem::getInstance()->getConfigPath() . '/config.php';
     $images_path = wa()->getDataPath(null, true, 'webasyst');
     $config = file_exists($config_path) ? include $config_path : array();
     if (!is_array($config)) {
         $config = array();
     }
     $images = array();
     $changed = false;
     $flush = false;
     $message = array();
     try {
         foreach ($settings as $setting => &$value) {
             if (waRequest::post() && !in_array($setting, array('auth_form_background'))) {
                 $post_value = waRequest::post($setting, '', waRequest::TYPE_STRING_TRIM);
                 if (!is_null($post_value)) {
                     $model->set('webasyst', $setting, $post_value);
                     $changed = true;
                 } elseif (!is_null($value)) {
                     $model->set('webasyst', $setting, '');
                 }
                 $value = $model->get('webasyst', $setting, $value);
             } else {
                 $value = $model->get('webasyst', $setting, $value);
             }
             unset($value);
         }
         $config_changed = false;
         if (waRequest::post()) {
             $config_values = waRequest::post('config');
             if (!is_array($config_values)) {
                 $config_values = array();
             }
             foreach ($config_settings as $setting => $type) {
                 $value = isset($config_values[$setting]) ? $config_values[$setting] : false;
                 switch ($type) {
                     case 'boolean':
                         $value = $value ? true : false;
                         break;
                 }
                 if (!isset($config[$setting]) || $config[$setting] !== $value) {
                     $config[$setting] = $value;
                     $config_changed = true;
                     if (in_array($setting, $flush_settings)) {
                         $flush = true;
                     }
                 }
             }
             if ($config_changed) {
                 waUtils::varExportToFile($config, $config_path);
             }
             if ($flush) {
                 $path_cache = waConfig::get('wa_path_cache');
                 waFiles::delete($path_cache, true);
                 waFiles::protect($path_cache);
             }
             $model->ping();
         }
         if ($changed || $config_changed) {
             $message[] = '[`Settings saved`]';
         }
         $name = preg_replace('/\\?.*$/', '', $settings['auth_form_background']);
         $path = wa()->getDataPath($name, true, 'webasyst');
         $file = waRequest::file('auth_form_background');
         $images = $this->getImages($images_path);
         if ($file->uploaded()) {
             if ($name) {
                 //waFiles::delete(wa()->getDataPath($name, true, 'webasyst'));
                 $model->set('webasyst', 'auth_form_background', false);
                 $settings['auth_form_background'] = false;
             }
             $ext = 'png';
             if (preg_match('/\\.(png|gif|jpg|jpeg|bmp|tif)$/i', $file->name, $matches)) {
                 $ext = $matches[1];
             }
             $name = 'auth_form_background.' . $ext;
             $path = wa()->getDataPath($name, true, 'webasyst');
             try {
                 $image = $file->waImage();
             } catch (waException $ex) {
                 $message = $ex->getMessage();
                 $tmp_name = $file->tmp_name;
                 if (!preg_match('//u', $tmp_name)) {
                     $tmp_name = iconv('windows-1251', 'utf-8', $tmp_name);
                 }
                 if (strpos($message, $tmp_name) !== false) {
                     throw new waException(preg_replace('/:\\s*$/', '', str_replace($tmp_name, '', $message)));
                 }
                 throw $ex;
             }
             foreach ($images as $i) {
                 waFiles::delete($images_path . '/' . $i);
             }
             $file->copyTo($path);
             clearstatcache();
             $images = $this->getImages($images_path);
             //$image->save($path);
             $name .= '?' . time();
             $model->set('webasyst', 'auth_form_background', $name);
             $settings['auth_form_background'] = $name;
             $message[] = '[`Image uploaded`]';
             $image_info = get_object_vars($image);
             $image_info['file_size'] = filesize($path);
             $image_info['file_mtime'] = filemtime($path);
             $image_info['file_name'] = basename($path);
             $this->view->assign('image', $image_info);
         } elseif ($thumb = waRequest::post('auth_form_background_thumb')) {
             $settings['auth_form_background'] = $thumb;
             $model->set('webasyst', 'auth_form_background', $settings['auth_form_background']);
         }
         if (strpos($settings['auth_form_background'], 'stock:') === 0) {
             $this->view->assign('image', false);
         } elseif ($settings['auth_form_background'] && file_exists($path)) {
             $settings['auth_form_background'] = preg_replace('@\\?\\d+$@', '', $settings['auth_form_background']);
             $image = new waImage($path);
             $image_info = get_object_vars($image);
             $image_info['file_size'] = filesize($path);
             $image_info['file_mtime'] = filemtime($path);
             $image_info['file_name'] = basename($path);
             $this->view->assign('image', $image_info);
             unset($image);
         } elseif ($settings['auth_form_background']) {
             $this->view->assign('image', null);
         }
         if (empty($image) && $images && file_exists($images_path . '/' . reset($images))) {
             $image = new waImage($path = $images_path . '/' . reset($images));
             $image_info = get_object_vars($image);
             $image_info['file_size'] = filesize($path);
             $image_info['file_mtime'] = filemtime($path);
             $image_info['file_name'] = basename($path);
             $this->view->assign('image', $image_info);
         }
         if ($message) {
             $params = array();
             $params['module'] = 'settings';
             $params['msg'] = installerMessage::getInstance()->raiseMessage(implode(', ', $message));
             if ($t = waRequest::get('_')) {
                 $params['_'] = $t;
             }
             $this->redirect($params);
         }
     } catch (waException $ex) {
         $msg = installerMessage::getInstance()->raiseMessage($ex->getMessage(), installerMessage::R_FAIL);
         $params = array('module' => 'settings', 'msg' => $msg);
         if ($message) {
             //$params['success'] = base64_encode(implode(', ', $message));
         }
         $this->redirect($params);
     }
     if (!waRequest::get('_')) {
         $this->setLayout(new installerBackendLayout());
         $this->getLayout()->assign('no_ajax', true);
     } else {
         $messages = installerMessage::getInstance()->handle(waRequest::get('msg'));
         $this->view->assign('messages', $messages);
     }
     $this->view->assign('version', wa()->getVersion('webasyst'));
     $backgrounds_path = wa()->getConfig()->getPath('content') . '/img/backgrounds/thumbs';
     $this->view->assign('backgrounds', $this->getImages($backgrounds_path));
     $images_url = wa()->getDataUrl(null, true, 'webasyst');
     $this->view->assign('images_url', $images_url);
     $this->view->assign('images_path', $images_path);
     $this->view->assign('images', $images);
     //auth_form_background
     $this->view->assign('settings', $settings);
     $this->view->assign('config', $config);
     $this->view->assign('action', 'settings');
     $locales = waSystem::getInstance()->getConfig()->getLocales('name');
     $this->view->assign('locales', $locales);
     $this->view->assign('title', _w('Settings'));
 }