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());
     }
 }
예제 #2
0
 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;
 }
예제 #3
0
파일: install.php 프로젝트: Lazary/webasyst
// 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";
     }
 }
예제 #5
0
    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');
     }
 }
예제 #10
0
    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";
    }
예제 #11
0
 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'));
 }