示例#1
0
 function handleRequest(DevblocksHttpRequest $request)
 {
     @set_time_limit(0);
     // no timelimit (when possible)
     DevblocksPlatform::clearCache();
     $stack = $request->path;
     array_shift($stack);
     // update
     switch (array_shift($stack)) {
         case 'locked':
             if (!DevblocksPlatform::versionConsistencyCheck()) {
                 $url = DevblocksPlatform::getUrlService();
                 echo "<h1>PortSensor Portal</h1>";
                 echo "The application is currently waiting for an administrator to finish upgrading. " . "Please wait a few minutes and then " . sprintf("<a href='%s'>try again</a>.<br><br>", $url->write('c=update&a=locked'));
                 echo sprintf("If you're an admin you may <a href='%s'>finish the upgrade</a>.", $url->write('c=update'));
             } else {
                 DevblocksPlatform::redirect(new DevblocksHttpResponse(array('home')));
             }
             break;
         default:
             $path = DEVBLOCKS_PATH . 'tmp' . DIRECTORY_SEPARATOR;
             $file = $path . 'psupdate_lock';
             if (!file_exists($file) || @filectime($file) + 600 < time()) {
                 // 10 min lock
                 touch($file);
                 //				    $settings = CerberusSettings::getInstance();
                 //				    $authorized_ips_str = $settings->get(CerberusSettings::AUTHORIZED_IPS);
                 //				    $authorized_ips = CerberusApplication::parseCrlfString($authorized_ips_str);
                 //
                 //			   	    $authorized_ip_defaults = CerberusApplication::parseCsvString(AUTHORIZED_IPS_DEFAULTS);
                 //				    $authorized_ips = array_merge($authorized_ips, $authorized_ip_defaults);
                 //
                 //				    $pass = false;
                 //					foreach ($authorized_ips as $ip)
                 //					{
                 //						if(substr($ip,0,strlen($ip)) == substr($_SERVER['REMOTE_ADDR'],0,strlen($ip)))
                 //					 	{ $pass=true; break; }
                 //					}
                 $pass = true;
                 if (!$pass) {
                     echo 'Your IP address (' . $_SERVER['REMOTE_ADDR'] . ') is not authorized to update this helpdesk.';
                     return;
                 }
                 //echo "Running plugin patches...<br>";
                 if (DevblocksPlatform::runPluginPatches()) {
                     @unlink($file);
                     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('home')));
                 } else {
                     @unlink($file);
                     echo "Failure!";
                     // [TODO] Needs elaboration
                 }
                 break;
             } else {
                 echo "Another administrator is currently running update.  Please wait...";
             }
     }
     exit;
 }
示例#2
0
文件: config.php 项目: Hildy/cerb5
 function savePluginsAction()
 {
     $translate = DevblocksPlatform::getTranslationService();
     $worker = CerberusApplication::getActiveWorker();
     if (!$worker || !$worker->is_superuser) {
         echo $translate->_('common.access_denied');
         return;
     }
     if (DEMO_MODE) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'plugins')));
         return;
     }
     @($plugins_enabled = DevblocksPlatform::importGPC($_REQUEST['plugins_enabled'], 'array'));
     $pluginStack = DevblocksPlatform::getPluginRegistry();
     if (is_array($plugins_enabled)) {
         foreach ($plugins_enabled as $plugin_id) {
             $plugin = $pluginStack[$plugin_id];
             $plugin->setEnabled(true);
             unset($pluginStack[$plugin_id]);
         }
     }
     // [JAS]: Clear unchecked plugins
     foreach ($pluginStack as $plugin) {
         // [JAS]: We can't force disable core here [TODO] Improve
         if ($plugin->id == 'cerberusweb.core') {
             continue;
         }
         $plugin->setEnabled(false);
     }
     DevblocksPlatform::clearCache();
     // Run any enabled plugin patches
     // [TODO] Should the platform do this automatically on enable in order?
     $patchMgr = DevblocksPlatform::getPatchService();
     $patches = DevblocksPlatform::getExtensions("devblocks.patch.container", false, true);
     if (is_array($patches)) {
         foreach ($patches as $patch_manifest) {
             /* @var $patch_manifest DevblocksExtensionManifest */
             $container = $patch_manifest->createInstance();
             /* @var $container DevblocksPatchContainerExtension */
             $patchMgr->registerPatchContainer($container);
         }
     }
     if (!$patchMgr->run()) {
         // fail
         die("Failed updating plugins.");
         // [TODO] Make this more graceful
     }
     // Reload plugin translations
     DAO_Translation::reloadPluginStrings();
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'plugins')));
 }
示例#3
0
文件: setup.php 项目: rmiddle/feg
 function saveTabPluginsAction()
 {
     $translate = DevblocksPlatform::getTranslationService();
     $worker = FegApplication::getActiveWorker();
     if (!$worker || !$worker->is_superuser) {
         echo $translate->_('common.access_denied');
         return;
     }
     $pluginStack = DevblocksPlatform::getPluginRegistry();
     @($plugins_enabled = DevblocksPlatform::importGPC($_REQUEST['plugins_enabled']));
     if (is_array($pluginStack)) {
         foreach ($pluginStack as $plugin) {
             /* @var $plugin DevblocksPluginManifest */
             switch ($plugin->id) {
                 case 'devblocks.core':
                 case 'feg.core':
                 case 'feg.auditlog':
                     $plugin->setEnabled(true);
                     break;
                 default:
                     if (null !== $plugins_enabled && false !== array_search($plugin->id, $plugins_enabled)) {
                         $plugin->setEnabled(true);
                     } else {
                         $plugin->setEnabled(false);
                     }
                     break;
             }
         }
     }
     try {
         FegApplication::update();
     } catch (Exception $e) {
         // [TODO] ...
     }
     DevblocksPlatform::clearCache();
     // Reload plugin translations
     DAO_Translation::reloadPluginStrings();
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('setup', 'plugins')));
 }
示例#4
0
 /**
  * Reads and caches manifests from the plugin directory.
  *
  * @static 
  * @return DevblocksPluginManifest[]
  */
 static function readPlugins()
 {
     $dir = DEVBLOCKS_PLUGIN_PATH;
     $plugins = array();
     if (is_dir($dir)) {
         if ($dh = opendir($dir)) {
             while (($file = readdir($dh)) !== false) {
                 if ($file == "." || $file == ".." || 0 == strcasecmp($file, "CVS")) {
                     continue;
                 }
                 $path = $dir . '/' . $file;
                 if (is_dir($path) && file_exists($path . '/plugin.xml')) {
                     $manifest = self::_readPluginManifest($file);
                     /* @var $manifest DevblocksPluginManifest */
                     if (null != $manifest) {
                         $plugins[] = $manifest;
                     }
                     /*
                      * [TODO] Somehow here we need to cache the classes from the plugin so
                      * we don't have to load up the file unless we need it.
                      * 
                      * The main place this happens is when some class from a plugin gets 
                      * persisted in the session.
                      */
                     //	                   $instance = $manifest->createInstance();
                     //	                   $instance->load($manifest);
                 }
             }
             closedir($dh);
         }
     }
     // [TODO] Instance the plugins in dependency order
     //		$plugin_instance = $manifest->createInstance();
     //		if(!$plugin_instance->install($manifest))
     //			return;
     DAO_Platform::cleanupPluginTables();
     DevblocksPlatform::clearCache();
     return $plugins;
     // [TODO] Move this to the DB
 }
示例#5
0
 private function _createTable($namespace)
 {
     $rs = mysql_query("SHOW TABLES", $this->_db);
     $tables = array();
     while ($row = mysql_fetch_row($rs)) {
         $tables[$row[0]] = true;
     }
     $namespace = $this->escapeNamespace($namespace);
     if (isset($tables['fulltext_' . $namespace])) {
         return true;
     }
     $result = mysql_query(sprintf("CREATE TABLE IF NOT EXISTS fulltext_%s (\n\t\t\t\tid INT UNSIGNED NOT NULL DEFAULT 0,\n\t\t\t\tcontent LONGTEXT,\n\t\t\t\tPRIMARY KEY (id),\n\t\t\t\tFULLTEXT content (content)\n\t\t\t) ENGINE=MyISAM CHARACTER SET=utf8;", $this->escapeNamespace($namespace)), $this->_db);
     DevblocksPlatform::clearCache(DevblocksPlatform::CACHE_TABLES);
     return false !== $result ? true : false;
 }
示例#6
0
 $plugins = DevblocksPlatform::getPluginRegistry();
 // Tailor which plugins are enabled by default
 if (is_array($plugins)) {
     foreach ($plugins as $plugin_manifest) {
         /* @var $plugin_manifest DevblocksPluginManifest */
         switch ($plugin_manifest->id) {
             case "app.core":
                 $plugin_manifest->setEnabled(true);
                 break;
             default:
                 $plugin_manifest->setEnabled(false);
                 break;
         }
     }
 }
 DevblocksPlatform::clearCache();
 // Run enabled plugin patches
 $patches = DevblocksPlatform::getExtensions("devblocks.patch.container");
 if (is_array($patches)) {
     foreach ($patches as $patch_manifest) {
         /* @var $patch_manifest DevblocksExtensionManifest */
         $container = $patch_manifest->createInstance();
         /* @var $container DevblocksPatchContainerExtension */
         $patchMgr->registerPatchContainer($container);
     }
 }
 if (!$patchMgr->run()) {
     // fail
     $tpl->assign('template', 'steps/step_init_db.tpl.php');
 } else {
     // success
示例#7
0
 static function cleanupPluginTables()
 {
     DevblocksPlatform::clearCache();
     $db = DevblocksPlatform::getDatabaseService();
     $prefix = APP_DB_PREFIX != '' ? APP_DB_PREFIX . '_' : '';
     // [TODO] Cleanup
     $sql = sprintf("SELECT id FROM %splugin ", $prefix);
     $rs = $db->Execute($sql) or die(__CLASS__ . '(' . __LINE__ . ')' . ':' . $db->ErrorMsg());
     /* @var $rs ADORecordSet */
     $plugins = DevblocksPlatform::getPluginRegistry();
     // [JAS]: Remove any plugins that are no longer in the filesystem
     while (!$rs->EOF) {
         $plugin_id = $rs->fields['id'];
         if (!isset($plugins[$plugin_id])) {
             $db->Execute(sprintf("DELETE FROM %splugin WHERE id = %s", $prefix, $db->qstr($plugin_id)));
             $db->Execute(sprintf("DELETE FROM %sextension WHERE id = %s", $prefix, $db->qstr($plugin_id)));
             $db->Execute(sprintf("DELETE FROM %sproperty_store WHERE id = %s", $prefix, $db->qstr($plugin_id)));
         }
         $rs->MoveNext();
     }
 }
示例#8
0
 static function cleanupPluginTables()
 {
     $db = DevblocksPlatform::getDatabaseService();
     $prefix = APP_DB_PREFIX != '' ? APP_DB_PREFIX . '_' : '';
     // [TODO] Cleanup
     /*
      * Make sure this uses the DB directly and not the registry, since
      * that automatically filters out bad rows and we'd never purge them.
      */
     $sql = sprintf("SELECT p.* " . "FROM %splugin p " . "ORDER BY p.enabled DESC, p.name ASC ", $prefix);
     $results = $db->GetArray($sql);
     foreach ($results as $row) {
         $plugin = new DevblocksPluginManifest();
         @($plugin->id = $row['id']);
         @($plugin->dir = $row['dir']);
         if (!file_exists(APP_PATH . '/' . $plugin->dir)) {
             $plugin->purge();
         }
     }
     DevblocksPlatform::clearCache();
 }
示例#9
0
 private function _createTable($namespace)
 {
     $rs = mysql_query("SHOW TABLES", $this->_db);
     $tables = array();
     while ($row = mysql_fetch_row($rs)) {
         $tables[$row[0]] = true;
     }
     $namespace = $this->escapeNamespace($namespace);
     if (isset($tables['storage_' . $namespace])) {
         return true;
     }
     $result = mysql_query(sprintf("CREATE TABLE IF NOT EXISTS storage_%s (\n\t\t\t\tid INT UNSIGNED NOT NULL DEFAULT 0,\n\t\t\t\tdata BLOB,\n\t\t\t\tchunk SMALLINT UNSIGNED DEFAULT 1,\n\t\t\t\tINDEX id (id),\n\t\t\t\tINDEX chunk (chunk)\n\t\t\t) ENGINE=MyISAM;", $this->escapeNamespace($namespace)), $this->_db);
     DevblocksPlatform::clearCache(DevblocksPlatform::CACHE_TABLES);
     return false !== $result ? true : false;
 }
示例#10
0
 /**
  * Reads and caches manifests from the features + plugins directories.
  *
  * @static 
  * @return DevblocksPluginManifest[]
  */
 static function readPlugins()
 {
     $scan_dirs = array('features', 'storage/plugins');
     $plugins = array();
     if (is_array($scan_dirs)) {
         foreach ($scan_dirs as $scan_dir) {
             $scan_path = APP_PATH . '/' . $scan_dir;
             if (is_dir($scan_path)) {
                 if ($dh = opendir($scan_path)) {
                     while (($file = readdir($dh)) !== false) {
                         if ($file == "." || $file == "..") {
                             continue;
                         }
                         $plugin_path = $scan_path . '/' . $file;
                         $rel_path = $scan_dir . '/' . $file;
                         if (is_dir($plugin_path) && file_exists($plugin_path . '/plugin.xml')) {
                             $manifest = self::_readPluginManifest($rel_path);
                             /* @var $manifest DevblocksPluginManifest */
                             if (null != $manifest) {
                                 $plugins[] = $manifest;
                             }
                         }
                     }
                     closedir($dh);
                 }
             }
         }
     }
     // [TODO] Instance the plugins in dependency order
     DAO_Platform::cleanupPluginTables();
     DevblocksPlatform::clearCache();
     return $plugins;
 }