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'));
         }
     }
 }
 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'));
         }
     }
 }