コード例 #1
0
 public function executeLanguage(sfWebRequest $request)
 {
     $this->form = new sfFormLanguage($this->getUser(), array('languages' => sfSympalConfig::getLanguageCodes()));
     unset($this->form[$this->form->getCSRFFieldName()]);
     $widgetSchema = $this->form->getWidgetSchema();
     $widgetSchema->setLabel('language', 'Select Language');
 }
コード例 #2
0
 /**
  * Changes the user's culture
  */
 public function executeChange_language(sfWebRequest $request)
 {
     $oldCulture = $this->getUser()->getCulture();
     $this->form = new sfFormLanguage($this->getUser(), array('languages' => sfSympalConfig::getLanguageCodes()));
     unset($this->form[$this->form->getCSRFFieldName()]);
     $this->form->process($request);
     $newCulture = $this->getUser()->getCulture();
     $this->getUser()->setFlash('notice', 'Changed language successfully!');
     return $this->redirect(str_replace('/' . $oldCulture . '/', '/' . $newCulture . '/', $this->getRequest()->getReferer($this->getUser()->getReferer('@homepage'))));
 }
コード例 #3
0
    /**
     * Get the content routes yaml
     *
     * @return string $yaml
     */
    public static function getContentRoutesYaml()
    {
        $cachePath = sfConfig::get('sf_cache_dir') . '/' . sfConfig::get('sf_app') . '/' . sfConfig::get('sf_environment') . '/content_routes.cache.yml';
        if (file_exists($cachePath) && sfConfig::get('sf_environment') !== 'test') {
            return file_get_contents($cachePath);
        }
        try {
            $routeTemplate = '%s:
  url:   %s
  param:
    module: %s
    action: %s
    sf_format: html
    sympal_content_type: %s
    sympal_content_type_id: %s
    sympal_content_id: %s
  class: sfDoctrineRoute
  options:
    model: sfSympalContent
    type: object
    method: getContent
    allow_empty: true
    requirements:
      sf_culture:  (%s)
      sf_format:   (%s)
      sf_method:   [post, get]
';
            $routes = array();
            $siteSlug = sfConfig::get('sf_app');
            $contents = Doctrine::getTable('sfSympalContent')->createQuery('c')->leftJoin('c.Type t')->innerJoin('c.Site s')->where("c.custom_path IS NOT NULL AND c.custom_path != ''")->andWhere('s.slug = ?', $siteSlug)->execute();
            foreach ($contents as $content) {
                $routes['content_' . $content->getId()] = sprintf($routeTemplate, substr($content->getRouteName(), 1), $content->getRoutePath(), $content->getModuleToRenderWith(), $content->getActionToRenderWith(), $content->Type->name, $content->Type->id, $content->id, implode('|', sfSympalConfig::getLanguageCodes()), implode('|', sfSympalConfig::get('content_formats')));
            }
            $contents = Doctrine::getTable('sfSympalContent')->createQuery('c')->leftJoin('c.Type t')->innerJoin('c.Site s')->where("c.module IS NOT NULL AND c.module != ''")->orWhere("c.action IS NOT NULL AND c.action != ''")->andWhere('s.slug = ?', $siteSlug)->execute();
            foreach ($contents as $content) {
                $routes['content_' . $content->getId()] = sprintf($routeTemplate, substr($content->getRouteName(), 1), $content->getRoutePath(), $content->getModuleToRenderWith(), $content->getActionToRenderWith(), $content->Type->name, $content->Type->id, $content->id, implode('|', sfSympalConfig::getLanguageCodes()), implode('|', sfSympalConfig::get('content_formats')));
            }
            $contentTypes = Doctrine::getTable('sfSympalContentType')->createQuery('t')->execute();
            foreach ($contentTypes as $contentType) {
                $routes['content_type_' . $contentType->getId()] = sprintf($routeTemplate, substr($contentType->getRouteName(), 1), $contentType->getRoutePath(), $contentType->getModuleToRenderWith(), $contentType->getActionToRenderWith(), $contentType->name, $contentType->id, null, implode('|', sfSympalConfig::getLanguageCodes()), implode('|', sfSympalConfig::get('content_formats')));
            }
            $routes = implode("\n", $routes);
            file_put_contents($cachePath, $routes);
            return $routes;
        } catch (Exception $e) {
        }
    }
コード例 #4
0
 /**
  * Build the array of all culture values for the given content record
  *
  * @param sfSympalContent $content 
  * @return array $routeValues
  */
 protected function _buildRouteValues(sfSympalContent $content)
 {
     $variables = $this->getRouteObject()->getVariables();
     $isI18nEnabled = sfSympalConfig::isI18nEnabled();
     $languageCodes = $isI18nEnabled ? sfSympalConfig::getLanguageCodes() : array($this->getCurrentCulture());
     $values = array();
     foreach ($languageCodes as $code) {
         foreach (array_keys($variables) as $name) {
             if ($isI18nEnabled && $name == 'slug' && ($i18nSlug = $content->Translation[$code]->i18n_slug)) {
                 $values[$code][$name] = $i18nSlug;
             } else {
                 if ($content->hasField($name)) {
                     if ($isI18nEnabled && isset($content->Translation[$code]->{$name})) {
                         $values[$code][$name] = $content->Translation[$code]->{$name};
                     } else {
                         $values[$code][$name] = $content->{$name};
                     }
                 } else {
                     if (method_exists($content, $method = 'get' . sfInflector::camelize($name))) {
                         $values[$code][$name] = $content->{$method}();
                     }
                 }
             }
         }
     }
     return $values;
 }
コード例 #5
0
 /**
  * Listens to the sympal.load_admin_menu to configure the admin menu
  */
 public function setupAdminMenu(sfEvent $event)
 {
     $menu = $event->getSubject();
     // Setup the Content menu
     $manageContent = $menu->getChild('content');
     $manageContent->setLabel('Content');
     $manageContent->addChild('Search', '@sympal_admin_search');
     $contentTypes = Doctrine_Core::getTable('sfSympalContentType')->getAllContentTypes();
     foreach ($contentTypes as $contentType) {
         $manageContent->addChild($contentType->getLabel(), '@sympal_content_list_type?type=' . $contentType->getId())->setCredentials(array('ManageContent'));
     }
     $manageContent->addChild('Slots', '@sympal_content_slots')->setCredentials(array('ManageSlots'));
     $manageContent->addChild('XML Sitemap', '@sympal_sitemap')->setCredentials(array('ViewXmlSitemap'));
     // Setup the Site Administration menu
     $siteAdministration = $menu->getChild('site_administration');
     $siteAdministration->setLabel('Site Administration');
     $siteAdministration->addChild('404 Redirects', '@sympal_redirects')->setCredentials(array('ManageRedirects'));
     $siteAdministration->addChild('Edit Site', '@sympal_sites_edit?id=' . sfSympalContext::getInstance()->getService('site_manager')->getSite()->getId())->setCredentials(array('ManageSites'));
     // Add to the Administration menu
     $administration = $menu->getChild('administration');
     $administration->addChild('Content Types', '@sympal_content_types')->setCredentials(array('ManageContentTypes'));
     $administration->addChild('Sites', '@sympal_sites')->setCredentials(array('ManageSites'));
     // Add a Content menu if applicable
     $content = $this->_sympalContext->getService('site_manager')->getCurrentContent();
     if ($content) {
         $contentEditor = $menu->getChild($content->getType()->slug);
         $contentEditor->setLabel(sprintf(__('%s Actions'), $content->getType()->getLabel()));
         // If in the admin, put a link to view the content
         if (sfSympalConfiguration::getActive()->isAdminModule()) {
             $contentEditor->addChild(sprintf(__('View %s'), $content->getType()->getLabel()), $content->getRoute());
         }
         $contentEditor->addChild(sprintf(__('Create New %s'), $content->getType()->getLabel()), '@sympal_content_create_type?type=' . $content['Type']['slug'])->setCredentials('ManageContent');
         $contentEditor->addChild(sprintf(__('Edit %s'), $content->getType()->getLabel()), $content->getEditRoute())->setCredentials('ManageContent');
         $contentEditor->addChild(__('Edit Content Type'), '@sympal_content_types_edit?id=' . $content->getType()->getId())->setCredentials('ManageMenus');
         // Add a menu item entry
         $menuItem = $this->_sympalContext->getService('menu_manager')->getCurrentMenuItem();
         if ($menuItem && $menuItem->exists()) {
             $contentEditor->addChild(__('Edit Menu Item'), '@sympal_content_menu_item?id=' . $content->getId())->setCredentials('ManageMenus');
         } else {
             $contentEditor->addChild(__('Add to Menu'), '@sympal_content_menu_item?id=' . $content->getId())->setCredentials('ManageMenus');
         }
         // Add publish/unpublish icons
         $user = sfContext::getInstance()->getUser();
         if ($user->hasCredential('PublishContent')) {
             if ($content->getIsPublished()) {
                 $contentEditor->addChild(__('Unpublish'), '@sympal_unpublish_content?id=' . $content->id, 'title=' . __('Published on %date%', array('%date%' => format_date($content->getDatePublished(), 'g'))) . '. ' . __('Click to unpublish content.'));
             } elseif ($content->getIsPublishInTheFuture()) {
                 $contentEditor->addChild(__('Unpublish'), '@sympal_unpublish_content?id=' . $content->id, 'title=' . __('Will publish on %date%', array('%date%' => format_date($content->getDatePublished(), 'g'))) . '. ' . __('Click to unpublish content.'));
             } else {
                 $contentEditor->addChild(__('Publish'), '@sympal_publish_content?id=' . $content->id, 'title=' . __('Has not been published yet. ' . __('Click to publish content.')));
             }
         }
         if (sfSympalConfig::isI18nEnabled()) {
             foreach (sfSympalConfig::getLanguageCodes() as $code) {
                 if (sfContext::getInstance()->getUser()->getEditCulture() != $code) {
                     $contentEditor->addChild(sprintf(__('Edit in %s'), format_language($code)), '@sympal_change_edit_language?language=' . $code, 'title=' . sprintf(__('Edit %s version'), format_language($code)));
                 }
             }
         }
     }
 }
コード例 #6
0
 /**
  * Listens to sympal.load_config_form to load the configuration form
  */
 public function loadConfigForm(sfEvent $event)
 {
     $form = $event->getSubject();
     if (sfSympalConfig::isI18nEnabled()) {
         $cultures = sfCultureInfo::getCultures(sfCultureInfo::NEUTRAL);
         $languages = array();
         foreach ($cultures as $key => $value) {
             $formatted = format_language($value);
             if (!$formatted) {
                 $formatted = format_language($value, 'en');
             }
             if ($formatted) {
                 $languages[$value] = $formatted;
             }
         }
         asort($languages);
         $widget = new sfWidgetFormChoice(array('multiple' => true, 'choices' => $languages));
         $validator = new sfValidatorChoice(array('multiple' => true, 'choices' => array_keys($languages)));
         $form->addSetting(null, 'language_codes', 'Available Cultures', $widget, $validator);
         $languageForm = new sfFormLanguage(sfContext::getInstance()->getUser(), array('languages' => sfSympalConfig::getLanguageCodes()));
         $widgetSchema = $languageForm->getWidgetSchema();
         $validatorSchema = $languageForm->getValidatorSchema();
         $form->addSetting(null, 'default_culture', 'Default Culture', $widgetSchema['language'], $validatorSchema['language']);
     }
     $form->addSetting(null, 'default_rendering_module', 'Default Rendering Module');
     $form->addSetting(null, 'default_rendering_action', 'Default Rendering Action');
     $form->addSetting(null, 'breadcrumbs_separator', 'Breadcrumbs Separator');
     $form->addSetting(null, 'elastic_textareas', 'Elastic Textareas', 'InputCheckbox', 'Boolean');
     $form->addSetting(null, 'check_for_upgrades_on_dashboard', 'Check for Upgrades', 'InputCheckbox', 'Boolean');
     $form->addSetting('page_cache', 'enabled', 'Enabled?', 'InputCheckbox', 'Boolean');
     $form->addSetting('page_cache', 'super', 'Enable Super Cache?', 'InputCheckbox', 'Boolean');
     $form->addSetting('page_cache', 'with_layout', 'With layout?', 'InputCheckbox', 'Boolean');
     $form->addSetting('page_cache', 'lifetime', 'Lifetime');
 }
コード例 #7
0
 public function loadEditor(sfEvent $event)
 {
     $user = sfContext::getInstance()->getUser();
     $this->configuration->loadHelpers(array('Asset', 'Partial', 'I18N'));
     $menu = $event->getSubject();
     $content = $event['content'];
     $menuItem = $event['menuItem'];
     $sympalConfiguration = sfSympalConfiguration::getActive();
     $user = sfContext::getInstance()->getUser();
     $request = sfContext::getInstance()->getRequest();
     $contentEditor = $menu->getChild($content->getType()->getLabel() . ' Actions');
     if ($sympalConfiguration->isAdminModule()) {
         $contentEditor->addChild(image_tag('/sf/sf_admin/images/list.png') . ' ' . __('View ' . $content->getType()->getLabel()), $content->getRoute());
     }
     $contentEditor->addChild(image_tag('/sf/sf_admin/images/add.png') . ' ' . __('Create New ' . $content->getType()->getLabel()), '@sympal_content_create_type?type=' . $content['Type']['slug'])->setCredentials('ManageContent');
     $contentEditor->addChild(image_tag('/sf/sf_admin/images/edit.png') . ' ' . __('Edit ' . $content->getType()->getLabel()), $content->getEditRoute())->setCredentials('ManageContent');
     $contentEditor->addChild(image_tag('/sf/sf_admin/images/edit.png') . ' ' . __('Edit Content Type'), '@sympal_content_types_edit?id=' . $content->getType()->getId())->setCredentials('ManageMenus');
     if ($menuItem && $menuItem->exists()) {
         $contentEditor->addChild(image_tag('/sf/sf_admin/images/edit.png') . ' ' . __('Edit Menu Item'), '@sympal_content_menu_item?id=' . $content->getId())->setCredentials('ManageMenus');
     } else {
         $contentEditor->addChild(image_tag('/sf/sf_admin/images/add.png') . ' ' . __('Add to Menu'), '@sympal_content_menu_item?id=' . $content->getId())->setCredentials('ManageMenus');
     }
     if (sfSympalConfig::isI18nEnabled()) {
         foreach (sfSympalConfig::getLanguageCodes() as $code) {
             if (sfContext::getInstance()->getUser()->getEditCulture() != $code) {
                 $contentEditor->addChild(image_tag('/sfSympalPlugin/images/flags/' . strtolower($code) . '.png') . ' Edit ' . format_language($code), '@sympal_change_edit_language?language=' . $code, 'title=Switch to ' . format_language($code));
             }
         }
     }
 }
コード例 #8
0
<?php

$user = sfContext::getInstance()->getUser();
$form = new sfFormLanguage($user, array('languages' => sfSympalConfig::getLanguageCodes()));
unset($form[$form->getCSRFFieldName()]);
$widgetSchema = $form->getWidgetSchema();
$widgetSchema['language']->setAttribute('onChange', "this.form.submit();");
?>

<?php 
echo $form->renderFormTag(url_for('@sympal_change_language_form'));
?>
  <?php 
echo $form['language'];
?>
</form>
 public function loadEditor(sfEvent $event)
 {
     $user = sfContext::getInstance()->getUser();
     $this->configuration->loadHelpers(array('Asset', 'Partial', 'I18N'));
     $menu = $event->getSubject();
     $content = $event['content'];
     $menuItem = $event['menuItem'];
     $sympalConfiguration = sfSympalConfiguration::getActive();
     $user = sfContext::getInstance()->getUser();
     $request = sfContext::getInstance()->getRequest();
     $contentEditor = $menu->getChild($content->getType()->getLabel() . ' Actions');
     if ($sympalConfiguration->isAdminModule()) {
         $contentEditor->addChild(__('View ') . $content->getType()->getLabel(), $content->getRoute());
     }
     $contentEditor->addChild(__('Create New ') . $content->getType()->getLabel(), '@sympal_content_create_type?type=' . $content['Type']['slug'])->setCredentials('ManageContent');
     $contentEditor->addChild(__('Edit ') . $content->getType()->getLabel(), $content->getEditRoute())->setCredentials('ManageContent');
     $contentEditor->addChild(__('Edit Content Type'), '@sympal_content_types_edit?id=' . $content->getType()->getId())->setCredentials('ManageMenus');
     if ($menuItem && $menuItem->exists()) {
         $contentEditor->addChild(__('Edit Menu Item'), '@sympal_content_menu_item?id=' . $content->getId())->setCredentials('ManageMenus');
     } else {
         $contentEditor->addChild(__('Add to Menu'), '@sympal_content_menu_item?id=' . $content->getId())->setCredentials('ManageMenus');
     }
     if (sfSympalConfig::isI18nEnabled()) {
         foreach (sfSympalConfig::getLanguageCodes() as $code) {
             if (sfContext::getInstance()->getUser()->getEditCulture() != $code) {
                 $contentEditor->addChild(__('Edit ') . format_language($code), '@sympal_change_edit_language?language=' . $code, 'title=' . __('Switch to ') . '' . format_language($code));
             }
         }
     }
     if ($user->hasCredential('PublishContent')) {
         if ($content->getIsPublished()) {
             $contentEditor->addChild(__('Unpublish'), '@sympal_unpublish_content?id=' . $content['id'], 'title=' . __('Published on %date%', array('%date%' => format_date($content->getDatePublished(), 'g'))) . '. ' . __('Click to unpublish content.'));
         } elseif ($content->getIsPublishInTheFuture()) {
             $contentEditor->addChild(__('Unpublish'), '@sympal_unpublish_content?id=' . $content['id'], 'title=' . __('Will publish on %date%', array('%date%' => format_date($content->getDatePublished(), 'g'))) . '. ' . __('Click to unpublish content.'));
         } else {
             $contentEditor->addChild(__('Publish'), '@sympal_publish_content?id=' . $content['id'], 'title=' . __('Has not been published yet. ' . __('Click to publish content.')));
         }
     }
 }
コード例 #10
0
    /**
     * Get the content routes yaml
     *
     * @return string $yaml
     */
    public static function getContentRoutesYaml()
    {
        $cachePath = sfConfig::get('sf_cache_dir') . '/' . sfConfig::get('sf_app') . '/' . sfConfig::get('sf_environment') . '/content_routes.cache.yml';
        if (file_exists($cachePath) && sfConfig::get('sf_environment') !== 'test') {
            return file_get_contents($cachePath);
        }
        try {
            $routeTemplate = '%s:
  url:   %s
  param:
    module: %s
    action: %s
    sf_format: html
    sympal_content_type: %s
    sympal_content_type_id: %s
    sympal_content_id: %s
  class: sfDoctrineRoute
  options:
    model: sfSympalContent
    type: object
    method: getContent
    allow_empty: true
  requirements:
    sf_culture:  (%s)
    sf_format:   (%s)
    sf_method:   [post, get]
';
            $routes = array();
            $siteSlug = sfConfig::get('sf_app');
            if (!sfContext::hasInstance()) {
                $configuration = ProjectConfiguration::getApplicationConfiguration(sfConfig::get('sf_app'), 'prod', false);
                sfContext::createInstance($configuration);
            }
            /*
             * Step 1) Process all sfSympalContent records with a custom_path,
             *         module, or action. These have sympal_content_* routes
             */
            $contents = Doctrine::getTable('sfSympalContent')->createQuery('c')->leftJoin('c.Type t')->innerJoin('c.Site s')->where("(c.custom_path IS NOT NULL AND c.custom_path != '') OR (c.module IS NOT NULL AND c.module != '') OR (c.action IS NOT NULL AND c.action != '')")->andWhere('s.slug = ?', $siteSlug)->execute();
            foreach ($contents as $content) {
                $routes['content_' . $content->getId()] = sprintf($routeTemplate, substr($content->getRouteName(), 1), $content->getRoutePath(), $content->getModuleToRenderWith(), $content->getActionToRenderWith(), $content->Type->name, $content->Type->id, $content->id, implode('|', sfSympalConfig::getLanguageCodes()), implode('|', sfSympalConfig::get('content_formats')));
            }
            /*
             * Step 2) Create a route for each sfSympalContentType record
             */
            $contentTypes = Doctrine::getTable('sfSympalContentType')->createQuery('t')->execute();
            foreach ($contentTypes as $contentType) {
                $routes['content_type_' . $contentType->getId()] = sprintf($routeTemplate, substr($contentType->getRouteName(), 1), $contentType->getRoutePath(), $contentType->getModuleToRenderWith(), $contentType->getActionToRenderWith(), $contentType->name, $contentType->id, null, implode('|', sfSympalConfig::getLanguageCodes()), implode('|', sfSympalConfig::get('content_formats')));
            }
            $routes = implode("\n", $routes);
            file_put_contents($cachePath, $routes);
            return $routes;
        } catch (Exception $e) {
            // for now, I'd like to not obfuscate the errors - rather reportthem
            throw $e;
        }
    }