public function execute() { try { $path_cache = waConfig::get('wa_path_cache'); waFiles::delete($path_cache, true); waFiles::protect($path_cache); $app_path = waConfig::get('wa_path_apps'); $apps = new waInstallerApps(); $app_list = $apps->getApplicationsList(true); foreach ($app_list as $app) { if (isset($app['enabled']) && $app['enabled']) { $path_cache = $app_path . '/' . $app['slug'] . '/js/compiled'; waFiles::delete($path_cache, true); } } $this->response['message'] = _w('Cache cleared'); } catch (Exception $ex) { $this->setError($ex->getMessage()); } }
public static function flushCache($apps = array()) { $path_cache = waConfig::get('wa_path_cache'); waFiles::protect($path_cache); $caches = array(); $paths = waFiles::listdir($path_cache); foreach ($paths as $path) { #skip long action & data path if ($path != 'temp') { $path = $path_cache . '/' . $path; if (is_dir($path)) { $caches[] = $path; } } } if ($apps) { $app_path = waConfig::get('wa_path_apps'); foreach ($apps as $app) { if (!empty($app['installed'])) { $caches[] = $app_path . '/' . $app['slug'] . '/js/compiled'; } } } $caches[] = $path_cache . '/temp'; $root_path = wa()->getConfig()->getRootPath(); $errors = array(); foreach ($caches as $path) { try { waFiles::delete($path); } catch (Exception $ex) { $errors[] = str_replace($root_path . DIRECTORY_SEPARATOR, '', $ex->getMessage()); waFiles::delete($path, true); } } return $errors; }
// Create cli.php if not included in distr already $path = wa()->getConfig()->getRootPath() . '/cli.php'; if (!file_exists($path)) { if ($fp = fopen($path, 'w')) { $content = <<<CLI #!/usr/bin/php <?php require_once(dirname(__FILE__).'/wa-system/cli.php'); CLI; fwrite($fp, $content); fclose($fp); } } // Protect private dirs with .htaccess $paths = array('log', 'cache', 'config', 'installer'); foreach ($paths as $path) { $path = waSystem::getInstance()->getConfig()->getPath($path); waFiles::protect($path); } // Insert data into tables foreach (array('wa_country', 'wa_region') as $table) { if ($sql = @file_get_contents(dirname(__FILE__) . '/' . $table . '.sql')) { try { $m = new waModel(); $m->exec($sql); } catch (Exception $e) { waLog::log('Unable to populate ' . $table . ': ' . $e->getMessage() . "\n" . $e->getTraceAsString()); } } }
protected function create($app_id, $path, $params = array()) { if (!file_exists($path)) { $path .= '/'; mkdir($path); mkdir($path . 'css'); touch($path . 'css/' . $app_id . '.css'); mkdir($path . 'js'); touch($path . 'js/' . $app_id . '.js'); mkdir($path . 'img'); // lib mkdir($path . 'lib'); waFiles::protect($path . 'lib'); mkdir($path . 'lib/actions'); // backend controller mkdir($path . 'lib/actions/backend'); // api if (isset($params['api'])) { mkdir($path . 'lib/api'); if ($params['api'] !== true) { mkdir($path . 'lib/api/' . $params['api']); } } // cli if (isset($params['cli'])) { mkdir($path . 'lib/cli'); } mkdir($path . 'lib/classes'); mkdir($path . 'lib/models'); // config mkdir($path . 'lib/config'); // app description $app = array('name' => empty($params['name']) ? ucfirst($app_id) : $params['name'], 'icon' => 'img/' . $app_id . '.gif', 'version' => $version = empty($params['version']) ? '0.1' : $params['version']); if (isset($params['frontend'])) { $app['frontend'] = true; if (isset($params['themes'])) { $app['themes'] = true; } $routing = array('*' => 'frontend'); waUtils::varExportToFile($routing, $path . 'lib/config/routing.php'); // frontend controller mkdir($path . 'lib/actions/frontend'); } // plugins if (isset($params['plugins'])) { $app['plugins'] = true; mkdir($path . 'plugins'); } waUtils::varExportToFile($app, $path . 'lib/config/app.php'); // templates mkdir($path . 'templates'); waFiles::protect($path . 'templates'); mkdir($path . 'templates/actions'); mkdir($path . 'templates/actions/backend'); // backend template if (isset($params['frontend'])) { // frontend template mkdir($path . 'templates/actions/frontend'); } // locale mkdir($path . 'locale'); if (isset($params['frontend']) && isset($params['themes'])) { // themes mkdir($path . 'themes'); mkdir($path . 'themes/default'); $theme = new waTheme('default', $app_id, true); $theme->name = 'Default theme'; $theme->description = 'Auto generated default theme'; $theme->system = 1; $theme->addFile('index.html', 'Frontend index file'); touch($path . 'themes/default/index.html'); $theme->addFile('default.css', 'Frontend CSS file'); touch($path . 'themes/default/default.css'); $theme->version = $version; $theme->save(); } print "App with id {$app_id} created"; } else { print "App with id {$app_id} already exists"; } }
protected function create($app_id, $path, $params = array()) { $report = ''; if (!file_exists($path)) { $path .= '/'; mkdir($path); mkdir($path . 'css'); touch($path . 'css/' . $app_id . '.css'); mkdir($path . 'js'); touch($path . 'js/' . $app_id . '.js'); mkdir($path . 'img'); // lib mkdir($path . 'lib'); waFiles::protect($path . 'lib'); mkdir($path . 'lib/actions'); // backend controller mkdir($path . 'lib/actions/backend'); // api if (isset($params['api'])) { mkdir($path . 'lib/api'); if ($params['api'] !== true) { mkdir($path . 'lib/api/' . $params['api']); } else { mkdir($path . 'lib/api/v1'); } } // cli if (isset($params['cli'])) { mkdir($path . 'lib/cli'); } mkdir($path . 'lib/classes'); mkdir($path . 'lib/models'); // config mkdir($path . 'lib/config'); // app description $app = array('name' => empty($params['name']) ? ucfirst($app_id) : $params['name'], 'icon' => 'img/' . $app_id . '.gif', 'version' => $version = empty($params['version']) ? '0.1' : $params['version'], 'vendor' => $vendor = empty($params['vendor']) ? '--' : $params['vendor']); if (isset($params['frontend'])) { $app['frontend'] = true; if (isset($params['themes'])) { $app['themes'] = true; } $routing = array('*' => 'frontend'); waUtils::varExportToFile($routing, $path . 'lib/config/routing.php'); // frontend controller mkdir($path . 'lib/actions/frontend'); } // plugins if (isset($params['plugins'])) { $app['plugins'] = true; mkdir($path . 'plugins'); } waUtils::varExportToFile($app, $path . 'lib/config/app.php'); // templates mkdir($path . 'templates'); waFiles::protect($path . 'templates'); mkdir($path . 'templates/actions'); mkdir($path . 'templates/actions/backend'); // backend template if (isset($params['frontend'])) { // frontend template mkdir($path . 'templates/actions/frontend'); } // locale mkdir($path . 'locale'); waFiles::protect($path . 'locale'); if (isset($params['frontend']) && isset($params['themes'])) { // themes mkdir($path . 'themes'); mkdir($path . 'themes/default'); $theme = new waTheme('default', $app_id, true); $theme->name = 'Default theme'; $theme->description = 'Auto generated default theme'; $theme->vendor = $vendor; $theme->system = 1; $theme->addFile('index.html', 'Frontend index file'); touch($path . 'themes/default/index.html'); $theme->addFile('default.css', 'Frontend CSS file'); touch($path . 'themes/default/default.css'); $theme->version = $version; $theme->save(); waFiles::move($theme->path . '/theme.xml', $path . 'themes/default/theme.xml'); } $report .= <<<REPORT App with id "{$app_id}" created! Useful commands: #generate app's database description file db.php php wa.php generateDb {$app_id} #generate app's locale files php wa-system/locale/locale.php {$app_id} REPORT; if (isset($params['plugins'])) { $report .= "\n\n" . <<<REPORT #create a plugin with specified 'plugin_id' for your app php wa.php createPlugin {$app_id} plugin_id REPORT; } //TODO add hint about compress command } else { $report .= <<<REPORT App with id "{$app_id}" already exists. REPORT; } print $report . "\n"; }
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')); }
protected function protect($paths) { foreach ($paths as $path) { waFiles::protect($this->path . $path); } }
protected function create($type, $id, $path, $params = array()) { $template_id = 'wapattern'; $template_path = wa()->getConfig()->getPath('plugins') . '/' . $type . '/' . $template_id . '/'; if (!file_exists($path)) { try { $path .= '/'; mkdir($path); // lib mkdir($path . 'lib'); waFiles::protect($path . 'lib'); $plugin_class = null; mkdir($path . 'lib/classes'); // config mkdir($path . 'lib/config'); // app description $plugin = array('name' => empty($params['name']) ? ucfirst($id) : $params['name'], 'description' => '', 'icon' => 'img/' . $id . '.png', 'version' => empty($params['version']) ? '1.0.0' : $params['version'], 'vendor' => empty($params['vendor']) ? '' : $params['vendor']); waUtils::varExportToFile($plugin, $path . 'lib/config/plugin.php'); switch ($type) { case 'payment': #settings if (isset($params['settings'])) { waUtils::varExportToFile(array(), $path . 'lib/config/settings.php'); } #plugin class $template_class_path = $template_path . 'lib/' . $template_id . ucfirst($type) . '.class.php'; $class_path = $path . 'lib/' . $id . ucfirst($type) . '.class.php'; $template = file_get_contents($template_class_path); waFiles::write($class_path, str_replace($template_id, $id, $template)); #plugin template mkdir($path . 'templates'); waFiles::protect($path . 'templates'); waFiles::copy($template_path . 'templates/payment.html', $path . 'templates/payment.html'); break; case 'shipping': #settings if (isset($params['settings'])) { waUtils::varExportToFile(array(), $path . 'lib/config/settings.php'); } #plugin class $template_class_path = $template_path . 'lib/' . $template_id . ucfirst($type) . '.class.php'; $class_path = $path . 'lib/' . $id . ucfirst($type) . '.class.php'; $template = file_get_contents($template_class_path); waFiles::write($class_path, str_replace($template_id, $id, $template)); break; default: throw new waException(sprintf("Plugin type \"%s\" not supported yet.\n", $type)); break; } print "Plugin with id \"{$id}\" created!\n"; } catch (waException $ex) { print "Plugin with id \"{$id}\" was NOT created.\n"; if (waSystemConfig::isDebug()) { echo $ex; } else { print "Error:" . $ex->getMessage() . "\n"; } waFiles::delete($path); } } else { print "Plugin with id \"{$id}\" already exists.\n"; } }
function execute() { $update_ids = waRequest::get('app_id'); if ($update_ids && is_array($update_ids)) { ob_start(); $app_ids = array(); $plugins_ids = array(); $vendors = array(); foreach ($update_ids as $app_id => &$info) { if (!is_array($info)) { if (strpos($info, ':') === false) { $vendor = $info; $edition = ''; } else { list($vendor, $edition) = explode(':', $info, 2); } $app_ids[$app_id] = array('vendor' => $info, 'slug' => $app_id); } else { if (isset($info['slug'])) { $app_id = $info['slug']; } $app_ids[$app_id] = $info; } $vendors[] = $info['vendor']; unset($info); } $vendors = array_unique($vendors); $model = new waAppSettingsModel(); $license = $model->get('webasyst', 'license', false); $locale = wa()->getLocale(); try { $log_level = waSystemConfig::isDebug() ? waInstaller::LOG_DEBUG : waInstaller::LOG_WARNING; $thread_id = $this->getRequest()->request('thread_id', false); $updater = new waInstaller($log_level, $thread_id); $this->getStorage()->close(); $updater->init(); $apps = new waInstallerApps($license, $locale, false); $app = $this->getApp(); if (isset($app_ids[$app]) || true) { $system_list = $apps->getSystemList(); } if (isset($app_ids[$app])) { #update system items foreach ($system_list as $target => $item) { if (empty($item['subject'])) { $this->add(!empty($item['target']) ? $item['target'] : $item['slug'], $item); } } } foreach ($system_list as $target => $item) { if (!empty($item['subject']) && $item['subject'] == 'systemplugins' && isset($app_ids[$item['slug']])) { $this->add(!empty($item['target']) ? $item['target'] : $item['slug'], $item, $item['slug']); unset($app_ids[$item['slug']]); } } $app_list = $apps->getApplicationsList(false, $vendors, wa()->getDataPath('images', true)); $model->ping(); $this->pass = count($this->urls) || count($app_ids) > 1 ? true : false; $added = true; $execute_actions = array(waInstallerApps::ACTION_INSTALL, waInstallerApps::ACTION_CRITICAL_UPDATE, waInstallerApps::ACTION_UPDATE); while ($app_ids && $added) { $added = false; foreach ($app_list as &$info) { $app_id = $info['slug']; if ($app_id == 'installer') { $info['name'] = _w('Webasyst Framework'); } if (isset($app_ids[$app_id]) && installerHelper::equals($app_ids[$app_id], $info)) { $target = 'wa-apps/' . $app_id; $info['subject'] = 'app'; $this->add($target, $info, $app_id); unset($app_ids[$app_id]); } if (isset($info['extras']) && is_array($info['extras'])) { foreach ($info['extras'] as $subject => $extras) { foreach ($extras as $extras_id => $extras_info) { $extras_id = $app_id . '/' . $subject . '/' . $extras_id; if (isset($app_ids[$extras_id]) && installerHelper::equals($app_ids[$extras_id], $extras_info)) { if (!empty($app_ids[$extras_id]['dependent']) && (empty($extras_info['action']) || !in_array($extras_info['action'], $execute_actions))) { continue; } $target = 'wa-apps/' . $extras_id; $extras_info['subject'] = 'app_' . $subject; $this->add($target, $extras_info, $extras_info['slug']); if ($extras_info['dependency']) { foreach ($extras_info['dependency'] as $dependency) { $app_ids[$dependency] = $app_ids[$extras_id]; $app_ids[$dependency]['slug'] = $dependency; $app_ids[$dependency]['dependent'] = $target; $added = true; } } if ($subject == 'themes') { if (!empty($extras_info['current']['parent_theme_id'])) { $parent_id = $extras_info['current']['parent_theme_id']; $parent_app_id = $app_id; if (strpos($parent_id, ':')) { list($parent_app_id, $parent_id) = explode(':', $parent_id); } $dependency = "{$parent_app_id}/{$subject}/{$parent_id}"; $app_ids[$dependency] = $app_ids[$extras_id]; $app_ids[$dependency]['slug'] = $dependency; $app_ids[$dependency]['dependent'] = $target; $added = true; } } unset($app_ids[$extras_id]); } } } } } unset($info); } $storage = wa()->getStorage(); $storage->close(); $result_urls = $updater->update($this->urls); if (waRequest::get('install')) { $model->ping(); $user = $this->getUser(); $set_rights = false; if (!$user->isAdmin()) { $set_rights = true; } foreach ($this->urls as $target => $url) { //TODO workaround exceptions if ((!isset($url['skipped']) || !$url['skipped']) && preg_match('@^wa-apps@', $target)) { $apps->installWebAsystItem($url['slug'], null, isset($url['edition']) ? $url['edition'] : true); if ($set_rights) { $user->setRight($url['slug'], 'backend', 2); } } } } $secure_properties = array('archive', 'source', 'backup', 'md5', 'extract_path'); foreach ($result_urls as &$result_url) { foreach ($secure_properties as $property) { if (isset($result_url[$property])) { unset($result_url[$property]); } } unset($result_url); } $this->response['sources'] = $result_urls; $this->response['current_state'] = $updater->getState(); $this->response['state'] = $updater->getFullState(waRequest::get('mode', 'apps')); //cleanup cache //waFiles::delete(wa()->getAppCachePath(null, false), true); $path_cache = waConfig::get('wa_path_cache'); waFiles::delete($path_cache, true); waFiles::protect($path_cache); $root_path = waConfig::get('wa_path_root'); foreach ($this->urls as $url) { if (!isset($url['skipped']) || !$url['skipped']) { $path_cache = $root_path . '/' . $url['target'] . '/js/compiled'; waFiles::delete($path_cache, true); } } $model->ping(); $this->getConfig()->setCount(false); $response = $this->getResponse(); $response->addHeader('Content-Type', 'application/json; charset=utf-8'); $response->sendHeaders(); } catch (Exception $ex) { $this->setError($ex->getMessage()); } if ($ob = ob_get_clean()) { $this->response['warning'] = $ob; waLog::log('Output at ' . __METHOD__ . ': ' . $ob); } } else { throw new Exception('nothing to update'); } }
protected function create($app_id, $plugin_id, $path, $params = array()) { $report = ''; if (!file_exists($path)) { $plugin = array('name' => empty($params['name']) ? ucfirst($plugin_id) : $params['name'], 'icon' => 'img/' . $plugin_id . '.gif', 'version' => $version = empty($params['version']) ? '0.1' : $params['version'], 'vendor' => $vendor = empty($params['vendor']) ? '--' : $params['vendor'], 'handlers' => array()); $path .= '/'; mkdir($path); mkdir($path . 'css'); touch($path . 'css/' . $plugin_id . '.css'); mkdir($path . 'js'); touch($path . 'js/' . $plugin_id . '.js'); mkdir($path . 'img'); // lib mkdir($path . 'lib'); waFiles::protect($path . 'lib'); $class_name = $app_id . ucfirst($plugin_id) . 'Plugin'; wa($app_id, true); $extends = $app_id . 'Plugin'; if (!class_exists($extends)) { $extends = 'waPlugin'; } $class = <<<PHP <?php class {$class_name} extends {$extends} { } PHP; waFiles::write($path . 'lib/' . $app_id . ucfirst($plugin_id) . 'Plugin.class.php', $class); mkdir($path . 'lib/config'); mkdir($path . 'lib/actions'); mkdir($path . 'lib/classes'); if (isset($params['db'])) { mkdir($path . 'lib/models'); } if (isset($params['frontend'])) { $plugin['frontend'] = true; $routing = array('*' => 'frontend'); waUtils::varExportToFile($routing, $path . 'lib/config/routing.php'); // frontend controller mkdir($path . 'lib/actions/frontend'); } // config waUtils::varExportToFile($plugin, $path . 'lib/config/plugin.php'); if (isset($params['settings'])) { waUtils::varExportToFile(array(), $path . 'lib/config/settings.php'); } // templates mkdir($path . 'templates'); waFiles::protect($path . 'templates'); mkdir($path . 'templates/actions'); mkdir($path . 'templates/actions/backend'); // backend template if (isset($params['frontend'])) { // frontend template mkdir($path . 'templates/actions/frontend'); } // locale if (isset($params['locale'])) { mkdir($path . 'locale'); waFiles::protect($path . 'locale'); } $report .= <<<REPORT Plugin with id "{$plugin_id}" created! Useful commands: #generate plugin's database description file db.php php wa.php generateDb {$app_id}/{$plugin_id} table1 table2 table3 #generate plugin's locale files php wa-system/locale/locale.php {$app_id}/plugins/{$plugin_id} REPORT; } else { $report .= <<<REPORT Plugin with id "{$plugin_id}" already exists. REPORT; } print $report . "\n"; }
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')); }