public function execute($request)
 {
     $this->form = new sfForm();
     if (!$this->context->user->hasCredential('administrator')) {
         QubitAcl::forwardUnauthorized();
     }
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'plugins');
     if (1 == count($query = QubitSetting::get($criteria))) {
         $setting = $query[0];
         $this->form->setDefault('enabled', unserialize($setting->__get('value', array('sourceCulture' => true))));
     }
     $configuration = ProjectConfiguration::getActive();
     $pluginPaths = $configuration->getAllPluginPaths();
     foreach (sfPluginAdminPluginConfiguration::$pluginNames as $name) {
         unset($pluginPaths[$name]);
     }
     $this->plugins = array();
     foreach ($pluginPaths as $name => $path) {
         $className = $name . 'Configuration';
         if (sfConfig::get('sf_plugins_dir') == substr($path, 0, strlen(sfConfig::get('sf_plugins_dir'))) && is_readable($classPath = $path . '/config/' . $className . '.class.php')) {
             $this->installPluginAssets($name, $path);
             require_once $classPath;
             $class = new $className($configuration);
             // Build a list of themes
             if (isset($class::$summary) && 1 === preg_match('/theme/i', $class::$summary)) {
                 $this->plugins[$name] = $class;
             }
         }
     }
     if ($request->isMethod('post')) {
         $this->form->setValidators(array('enabled' => new sfValidatorChoice(array('choices' => array_keys($this->plugins), 'empty_value' => array(), 'multiple' => true))));
         $this->form->bind($request->getPostParameters());
         if ($this->form->isValid()) {
             if (1 != count($query)) {
                 $setting = new QubitSetting();
                 $setting->name = 'plugins';
             }
             $settings = unserialize($setting->__get('value', array('sourceCulture' => true)));
             foreach (array_keys($this->plugins) as $item) {
                 if (in_array($item, (array) $this->form->getValue('enabled'))) {
                     $settings[] = $item;
                 } else {
                     if (false !== ($key = array_search($item, $settings))) {
                         unset($settings[$key]);
                     }
                 }
             }
             $setting->__set('value', serialize(array_unique($settings)));
             $setting->save();
             // Clear cache
             $cacheClear = new sfCacheClearTask(sfContext::getInstance()->getEventDispatcher(), new sfFormatter());
             $cacheClear->run();
             $this->redirect(array('module' => 'sfPluginAdminPlugin', 'action' => 'themes'));
         }
     }
 }
 /**
  * @see sfPluginConfiguration
  */
 public function initialize()
 {
     // Project classes, e.g. QubitSetting, not loaded unless
     // sfApplicationConfiguration,
     // http://qubit-toolkit.org/wiki/index.php?title=Autoload#Plugins
     if (!$this->configuration instanceof sfApplicationConfiguration) {
         return;
     }
     $enabledModules = sfConfig::get('sf_enabled_modules');
     $enabledModules[] = 'sfPluginAdminPlugin';
     sfConfig::set('sf_enabled_modules', $enabledModules);
     // Stash plugin names enabled in ProjectConfiguration.class.php for
     // sfPluginAdminPluginIndexAction. Where is the best place to stash it?
     // This is probably not the best place : P
     sfPluginAdminPluginConfiguration::$pluginNames = $this->configuration->getPlugins();
     new sfDatabaseManager($this->configuration);
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'plugins');
     try {
         if (1 == count($query = QubitSetting::get($criteria))) {
             // http://qubit-toolkit.org/wiki/index.php?title=Autoload
             $this->dispatcher->disconnect('autoload.filter_config', array($this->configuration, 'filterAutoloadConfig'));
             $pluginNames = unserialize($query[0]->__get('value', array('sourceCulture' => true)));
             $this->configuration->enablePlugins($pluginNames);
             $pluginPaths = $this->configuration->getAllPluginPaths();
             foreach ($pluginNames as $name) {
                 if (!isset($pluginPaths[$name])) {
                     throw new InvalidArgumentException('The plugin "' . $name . '" does not exist.');
                 }
                 // Copied from sfProjectConfiguration::loadPlugins()
                 $className = $name . 'Configuration';
                 if (!is_readable($path = $pluginPaths[$name] . '/config/' . $className . '.class.php')) {
                     $configuration = new sfPluginConfigurationGeneric($this->configuration, $pluginPaths[$name], $name);
                 } else {
                     require_once $path;
                     $configuration = new $className($this->configuration, $pluginPaths[$name], $name);
                 }
                 // Is this cached?
                 $configuration->initializeAutoload();
                 $configuration->initialize();
                 $this->configuration->pluginConfigurations[$name] = $configuration;
             }
             $this->dispatcher->connect('autoload.filter_config', array($this->configuration, 'filterAutoloadConfig'));
         }
     } catch (PropelException $e) {
         // Silently swallow PropelException because we can't tell at this point
         // if we are in install, and install plugin can't listen for an exception
         // thrown at this point, is this the best solution?
     }
 }
 public function execute($request)
 {
     $this->form = new sfForm();
     $this->form->setWidgets(array('toggleDescription' => new sfWidgetFormInputCheckbox(), 'toggleLogo' => new sfWidgetFormInputCheckbox(), 'toggleTitle' => new sfWidgetFormInputCheckbox()));
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'toggleDescription');
     if (1 == count($toggleDescriptionQuery = QubitSetting::get($criteria))) {
         $toggleDescriptionSetting = $toggleDescriptionQuery[0];
         $this->form->setDefault('toggleDescription', $toggleDescriptionSetting->__get('value', array('sourceCulture' => true)));
     }
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'toggleLogo');
     if (1 == count($toggleLogoQuery = QubitSetting::get($criteria))) {
         $toggleLogoSetting = $toggleLogoQuery[0];
         $this->form->setDefault('toggleLogo', $toggleLogoSetting->__get('value', array('sourceCulture' => true)));
     }
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'toggleTitle');
     if (1 == count($toggleTitleQuery = QubitSetting::get($criteria))) {
         $toggleTitleSetting = $toggleTitleQuery[0];
         $this->form->setDefault('toggleTitle', $toggleTitleSetting->__get('value', array('sourceCulture' => true)));
     }
     if ($request->isMethod('post')) {
         $this->form->setValidators(array('toggleDescription' => new sfValidatorBoolean(), 'toggleLogo' => new sfValidatorBoolean(), 'toggleTitle' => new sfValidatorBoolean()));
         $this->form->bind($request->getPostParameters());
         if ($this->form->isValid()) {
             if (1 != count($toggleDescriptionQuery)) {
                 $toggleDescriptionSetting = new QubitSetting();
                 $toggleDescriptionSetting->name = 'toggleDescription';
             }
             $toggleDescriptionSetting->__set('value', $this->form->getValue('toggleDescription'), array('sourceCulture' => true));
             $toggleDescriptionSetting->save();
             if (1 != count($toggleLogoQuery)) {
                 $toggleLogoSetting = new QubitSetting();
                 $toggleLogoSetting->name = 'toggleLogo';
             }
             $toggleLogoSetting->__set('value', $this->form->getValue('toggleLogo'), array('sourceCulture' => true));
             $toggleLogoSetting->save();
             if (1 != count($toggleTitleQuery)) {
                 $toggleTitleSetting = new QubitSetting();
                 $toggleTitleSetting->name = 'toggleTitle';
             }
             $toggleTitleSetting->__set('value', $this->form->getValue('toggleTitle'), array('sourceCulture' => true));
             $toggleTitleSetting->save();
             $this->redirect(array('module' => 'settings', 'action' => 'list'));
         }
     }
 }
 public function contextLoadFactories(sfEvent $event)
 {
     $context = $event->getSubject();
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'siteTitle');
     try {
         if (1 == count($query = QubitSetting::get($criteria))) {
             $context->response->addMeta('title', $query[0]->__get('value', array('cultureFallback' => true)));
         }
     } catch (PropelException $e) {
         // Silently swallow PropelException in install
         if ('sfInstallPlugin' != $context->request->module) {
             throw $e;
         }
     }
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'siteDescription');
     try {
         if (1 == count($query = QubitSetting::get($criteria))) {
             $context->response->addMeta('description', $query[0]->__get('value', array('cultureFallback' => true)));
         }
     } catch (PropelException $e) {
         // Silently swallow PropelException in install
         if ('sfInstallPlugin' != $context->request->module) {
             throw $e;
         }
     }
     foreach (array('actor_template', 'informationobject_template', 'repository_template') as $name) {
         if (isset($context->request[$name])) {
             $context->routing->setDefaultParameter($name, $context->request[$name]);
         } else {
             $criteria = new Criteria();
             $criteria->add(QubitSetting::NAME, substr($name, 0, -9));
             $criteria->add(QubitSetting::SCOPE, 'default_template');
             try {
                 if (1 == count($query = QubitSetting::get($criteria))) {
                     $context->routing->setDefaultParameter($name, $query[0]->__get('value', array('sourceCulture' => true)));
                 }
             } catch (PropelException $e) {
                 // Silently swallow PropelException in install
                 if ('sfInstallPlugin' != $context->request->module) {
                     throw $e;
                 }
             }
         }
     }
 }
 protected function initializeDefaultPageElementsForm()
 {
     $this->defaultPageElementsForm = new sfForm();
     $this->defaultPageElementsForm->setWidgets(array('toggleDescription' => new sfWidgetFormInputCheckbox(), 'toggleLogo' => new sfWidgetFormInputCheckbox(), 'toggleTitle' => new sfWidgetFormInputCheckbox()));
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'toggleDescription');
     if (1 == count($toggleDescriptionQuery = QubitSetting::get($criteria))) {
         $toggleDescriptionSetting = $toggleDescriptionQuery[0];
         $this->defaultPageElementsForm->setDefault('toggleDescription', $toggleDescriptionSetting->__get('value', array('sourceCulture' => true)));
     }
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'toggleLogo');
     if (1 == count($toggleLogoQuery = QubitSetting::get($criteria))) {
         $toggleLogoSetting = $toggleLogoQuery[0];
         $this->defaultPageElementsForm->setDefault('toggleLogo', $toggleLogoSetting->__get('value', array('sourceCulture' => true)));
     }
     $criteria = new Criteria();
     $criteria->add(QubitSetting::NAME, 'toggleTitle');
     if (1 == count($toggleTitleQuery = QubitSetting::get($criteria))) {
         $toggleTitleSetting = $toggleTitleQuery[0];
         $this->defaultPageElementsForm->setDefault('toggleTitle', $toggleTitleSetting->__get('value', array('sourceCulture' => true)));
     }
     return $this;
 }
 /**
  * Get all settings matching $scope parameter.
  *
  * @param string $scope
  */
 public static function getByScope($scope = null)
 {
     $criteria = new Criteria();
     if (null !== $scope) {
         $criteria->add(QubitSetting::SCOPE, $scope);
     } else {
         $criteria->add(QubitSetting::SCOPE, null, Criteria::ISNULL);
     }
     return QubitSetting::get($criteria);
 }