示例#1
0
文件: toolbar.php 项目: Tommar/vino2
 /**
  * Renders the submenu (toolbar links) for all detected views of this component
  *
  * @return  void
  */
 public function renderSubmenu()
 {
     $views = $this->getMyViews();
     if (empty($views)) {
         return;
     }
     $activeView = $this->input->getCmd('view', 'cpanel');
     foreach ($views as $view) {
         // Get the view name
         $key = strtoupper($this->component) . '_TITLE_' . strtoupper($view);
         if (strtoupper(JText::_($key)) == $key) {
             $altview = FOFInflector::isPlural($view) ? FOFInflector::singularize($view) : FOFInflector::pluralize($view);
             $key2 = strtoupper($this->component) . '_TITLE_' . strtoupper($altview);
             if (strtoupper(JText::_($key2)) == $key2) {
                 $name = ucfirst($view);
             } else {
                 $name = JText::_($key2);
             }
         } else {
             $name = JText::_($key);
         }
         $link = 'index.php?option=' . $this->component . '&view=' . $view;
         $active = $view == $activeView;
         $this->appendLink($name, $link, $active);
     }
 }
示例#2
0
 /**
  * Tries to guess the controller task to execute based on the view name and
  * the HTTP request method.
  *
  * @param   string  $view  The name of the view
  *
  * @return  string  The best guess of the task to execute
  */
 protected function getTask($view)
 {
     // Get a default task based on plural/singular view
     $request_task = $this->input->getCmd('task', null);
     $task = FOFInflector::isPlural($view) ? 'browse' : 'edit';
     // Get a potential ID, we might need it later
     $id = $this->input->get('id', null, 'int');
     if ($id == 0) {
         $ids = $this->input->get('ids', array(), 'array');
         if (!empty($ids)) {
             $id = array_shift($ids);
         }
     }
     // Check the request method
     if (!isset($_SERVER['REQUEST_METHOD'])) {
         $_SERVER['REQUEST_METHOD'] = 'GET';
     }
     $requestMethod = strtoupper($_SERVER['REQUEST_METHOD']);
     switch ($requestMethod) {
         case 'POST':
         case 'PUT':
             if (!is_null($id)) {
                 $task = 'save';
             }
             break;
         case 'DELETE':
             if ($id != 0) {
                 $task = 'delete';
             }
             break;
         case 'GET':
         default:
             // If it's an edit without an ID or ID=0, it's really an add
             if ($task == 'edit' && $id == 0) {
                 $task = 'add';
             } elseif ($task == 'edit' && FOFPlatform::getInstance()->isFrontend()) {
                 $task = 'read';
             }
             break;
     }
     return $task;
 }
 /**
  * Creates a View object instance and returns it
  *
  * @param   string  $name    The name of the view, e.g. Items
  * @param   string  $prefix  The prefix of the view, e.g. FoobarView
  * @param   string  $type    The type of the view, usually one of Html, Raw, Json or Csv
  * @param   array   $config  The configuration variables to use for creating the view
  *
  * @return  FOFView
  */
 protected function createView($name, $prefix = '', $type = '', $config = array())
 {
     // Make sure $config is an array
     if (is_object($config)) {
         $config = (array) $config;
     } elseif (!is_array($config)) {
         $config = array();
     }
     $result = null;
     // Clean the view name
     $viewName = preg_replace('/[^A-Z0-9_]/i', '', $name);
     $classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
     $viewType = preg_replace('/[^A-Z0-9_]/i', '', $type);
     if (!isset($config['input'])) {
         $config['input'] = $this->input;
     }
     if ($config['input'] instanceof FOFInput) {
         $tmpInput = $config['input'];
     } else {
         $tmpInput = new FOFInput($config['input']);
     }
     // Guess the component name and view
     if (!empty($prefix)) {
         preg_match('/(.*)View$/', $prefix, $m);
         $component = 'com_' . strtolower($m[1]);
     } else {
         $component = '';
     }
     if (empty($component) && array_key_exists('input', $config)) {
         $component = $tmpInput->get('option', $component, 'cmd');
     }
     if (array_key_exists('option', $config)) {
         if ($config['option']) {
             $component = $config['option'];
         }
     }
     $config['option'] = $component;
     $view = strtolower($viewName);
     if (empty($view) && array_key_exists('input', $config)) {
         $view = $tmpInput->get('view', $view, 'cmd');
     }
     if (array_key_exists('view', $config)) {
         if ($config['view']) {
             $view = $config['view'];
         }
     }
     $config['view'] = $view;
     if (array_key_exists('input', $config)) {
         $tmpInput->set('option', $config['option']);
         $tmpInput->set('view', $config['view']);
         $config['input'] = $tmpInput;
     }
     // Get the component directories
     $componentPaths = FOFPlatform::getInstance()->getComponentBaseDirs($config['option']);
     // Get the base paths where the view class files are expected to live
     $basePaths = array($componentPaths['main'], $componentPaths['alt']);
     $basePaths = array_merge($this->paths['view']);
     // Get the alternate (singular/plural) view name
     $altViewName = FOFInflector::isPlural($viewName) ? FOFInflector::singularize($viewName) : FOFInflector::pluralize($viewName);
     $suffixes = array($viewName, $altViewName, 'default');
     $filesystem = FOFPlatform::getInstance()->getFilesystem();
     foreach ($suffixes as $suffix) {
         // Build the view class name
         $viewClass = $classPrefix . ucfirst($suffix);
         if (class_exists($viewClass)) {
             // The class is already loaded
             break;
         }
         // The class is not loaded. Let's load it!
         $viewPath = $this->createFileName('view', array('name' => $suffix, 'type' => $viewType));
         $path = $filesystem->pathFind($basePaths, $viewPath);
         if ($path) {
             require_once $path;
         }
         if (class_exists($viewClass)) {
             // The class was loaded successfully
             break;
         }
     }
     if (!class_exists($viewClass)) {
         $viewClass = 'FOFView' . ucfirst($type);
     }
     $templateOverridePath = FOFPlatform::getInstance()->getTemplateOverridePath($config['option']);
     // Setup View configuration options
     if (!array_key_exists('template_path', $config)) {
         $config['template_path'][] = $componentPaths['main'] . '/views/' . FOFInflector::pluralize($config['view']) . '/tmpl';
         if ($templateOverridePath) {
             $config['template_path'][] = $templateOverridePath . '/' . FOFInflector::pluralize($config['view']);
         }
         $config['template_path'][] = $componentPaths['main'] . '/views/' . FOFInflector::singularize($config['view']) . '/tmpl';
         if ($templateOverridePath) {
             $config['template_path'][] = $templateOverridePath . '/' . FOFInflector::singularize($config['view']);
         }
         $config['template_path'][] = $componentPaths['main'] . '/views/' . $config['view'] . '/tmpl';
         if ($templateOverridePath) {
             $config['template_path'][] = $templateOverridePath . '/' . $config['view'];
         }
     }
     $extraTemplatePath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.template_path', null);
     if ($extraTemplatePath) {
         array_unshift($config['template_path'], $componentPaths['main'] . '/' . $extraTemplatePath);
     }
     if (!array_key_exists('helper_path', $config)) {
         $config['helper_path'] = array($componentPaths['main'] . '/helpers', $componentPaths['admin'] . '/helpers');
     }
     $extraHelperPath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.helper_path', null);
     if ($extraHelperPath) {
         $config['helper_path'][] = $componentPaths['main'] . '/' . $extraHelperPath;
     }
     // Set the use_hypermedia flag in $config if it's not already set
     if (!isset($config['use_hypermedia'])) {
         $config['use_hypermedia'] = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.use_hypermedia', false);
     }
     $result = new $viewClass($config);
     return $result;
 }
示例#4
0
 /**
  * Creates a View object instance and returns it
  *
  * @param   string  $name    The name of the view, e.g. Items
  * @param   string  $prefix  The prefix of the view, e.g. FoobarView
  * @param   string  $type    The type of the view, usually one of Html, Raw, Json or Csv
  * @param   array   $config  The configuration variables to use for creating the view
  *
  * @return  FOFView
  */
 protected function createView($name, $prefix = '', $type = '', $config = array())
 {
     // Make sure $config is an array
     if (is_object($config)) {
         $config = (array) $config;
     } elseif (!is_array($config)) {
         $config = array();
     }
     $result = null;
     // Clean the view name
     $viewName = preg_replace('/[^A-Z0-9_]/i', '', $name);
     $classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
     $viewType = preg_replace('/[^A-Z0-9_]/i', '', $type);
     if (!isset($config['input'])) {
         $config['input'] = $this->input;
     }
     if ($config['input'] instanceof FOFInput) {
         $tmpInput = $config['input'];
     } else {
         $tmpInput = new FOFInput($config['input']);
     }
     // Guess the component name and view
     if (!empty($prefix)) {
         preg_match('/(.*)View$/', $prefix, $m);
         $component = 'com_' . strtolower($m[1]);
     } else {
         $component = '';
     }
     if (empty($component) && array_key_exists('input', $config)) {
         $component = $tmpInput->get('option', $component, 'cmd');
     }
     if (array_key_exists('option', $config)) {
         if ($config['option']) {
             $component = $config['option'];
         }
     }
     $config['option'] = $component;
     $view = strtolower($viewName);
     if (empty($view) && array_key_exists('input', $config)) {
         $view = $tmpInput->get('view', $view, 'cmd');
     }
     if (array_key_exists('view', $config)) {
         if ($config['view']) {
             $view = $config['view'];
         }
     }
     $config['view'] = $view;
     if (array_key_exists('input', $config)) {
         $tmpInput->set('option', $config['option']);
         $tmpInput->set('view', $config['view']);
         $config['input'] = $tmpInput;
     }
     // Get the component directories
     $componentPaths = FOFPlatform::getInstance()->getComponentBaseDirs($config['option']);
     // Get the base paths where the view class files are expected to live
     $basePaths = array($componentPaths['main'], $componentPaths['alt']);
     $basePaths = array_merge($this->paths['view']);
     // Get the alternate (singular/plural) view name
     $altViewName = FOFInflector::isPlural($viewName) ? FOFInflector::singularize($viewName) : FOFInflector::pluralize($viewName);
     $suffixes = array($viewName, $altViewName, 'default');
     $filesystem = FOFPlatform::getInstance()->getIntegrationObject('filesystem');
     foreach ($suffixes as $suffix) {
         // Build the view class name
         $viewClass = $classPrefix . ucfirst($suffix);
         if (class_exists($viewClass)) {
             // The class is already loaded
             break;
         }
         // The class is not loaded. Let's load it!
         $viewPath = $this->createFileName('view', array('name' => $suffix, 'type' => $viewType));
         $path = $filesystem->pathFind($basePaths, $viewPath);
         if ($path) {
             require_once $path;
         }
         if (class_exists($viewClass)) {
             // The class was loaded successfully
             break;
         }
     }
     if (!class_exists($viewClass)) {
         $viewClass = 'FOFView' . ucfirst($type);
     }
     $templateOverridePath = FOFPlatform::getInstance()->getTemplateOverridePath($config['option']);
     // Setup View configuration options
     if (!array_key_exists('template_path', $config)) {
         $config['template_path'][] = $componentPaths['main'] . '/views/' . FOFInflector::pluralize($config['view']) . '/tmpl';
         if ($templateOverridePath) {
             $config['template_path'][] = $templateOverridePath . '/' . FOFInflector::pluralize($config['view']);
         }
         $config['template_path'][] = $componentPaths['main'] . '/views/' . FOFInflector::singularize($config['view']) . '/tmpl';
         if ($templateOverridePath) {
             $config['template_path'][] = $templateOverridePath . '/' . FOFInflector::singularize($config['view']);
         }
         $config['template_path'][] = $componentPaths['main'] . '/views/' . $config['view'] . '/tmpl';
         if ($templateOverridePath) {
             $config['template_path'][] = $templateOverridePath . '/' . $config['view'];
         }
     }
     $extraTemplatePath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.template_path', null);
     if ($extraTemplatePath) {
         array_unshift($config['template_path'], $componentPaths['main'] . '/' . $extraTemplatePath);
     }
     if (!array_key_exists('helper_path', $config)) {
         $config['helper_path'] = array($componentPaths['main'] . '/helpers', $componentPaths['admin'] . '/helpers');
     }
     $extraHelperPath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.helper_path', null);
     if ($extraHelperPath) {
         $config['helper_path'][] = $componentPaths['main'] . '/' . $extraHelperPath;
     }
     // Set up the page title
     $setFrontendPageTitle = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.setFrontendPageTitle', null);
     if ($setFrontendPageTitle) {
         $setFrontendPageTitle = strtolower($setFrontendPageTitle);
         $config['setFrontendPageTitle'][] = in_array($setFrontendPageTitle, array('1', 'yes', 'true', 'on'));
     }
     $defaultPageTitle = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.defaultPageTitle', null);
     if ($defaultPageTitle) {
         $config['defaultPageTitle'][] = in_array($defaultPageTitle, array('1', 'yes', 'true', 'on'));
     }
     // Set the use_hypermedia flag in $config if it's not already set
     if (!isset($config['use_hypermedia'])) {
         $config['use_hypermedia'] = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.use_hypermedia', false);
     }
     // Set also the linkbar_style
     if (!isset($config['linkbar_style'])) {
         $style = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.linkbar_style', false);
         if ($style) {
             $config['linkbar_style'] = $style;
         }
     }
     /**
      * Some administrative templates force format=utf (yeah, I know, what the heck, right?) when a format
      * URL parameter does not exist in the URL. Of course there is no such thing as FOFViewUtf (why the heck would
      * it be, there is no such thing as a format=utf in Joomla! for crying out loud) which causes a Fatal Error. So
      * we have to detect that and force $type='html'...
      */
     if (!class_exists($viewClass) && $type != 'html') {
         $type = 'html';
         $result = $this->createView($name, $prefix, $type, $config);
     } else {
         $result = new $viewClass($config);
     }
     return $result;
 }
示例#5
0
 public static function getPluralization($name, $form = 'singular')
 {
     static $cache = array();
     if (!empty($cache[$name . '.' . $form])) {
         return $cache[$name . '.' . $form];
     }
     //Pluralization
     if (JFile::exists(JPATH_LIBRARIES . '/fof/include.php')) {
         if (!defined('FOF_INCLUDED')) {
             require_once JPATH_LIBRARIES . '/fof/include.php';
         }
     } else {
         if (JFile::exists(JPATH_LIBRARIES . '/fof/inflector/inflector.php')) {
             require_once JPATH_LIBRARIES . '/fof/inflector/inflector.php';
         } else {
             require_once JPATH_COMPONENT . '/helpers/fofinflector.php';
         }
     }
     $plural = null;
     //$inflector = new FOFInflector();
     //see if name is singular, if so get a plural
     if (FOFInflector::isSingular($name)) {
         $plural = FOFInflector::pluralize($name);
     }
     //if still no plural check if name is plural
     if (empty($plural)) {
         if (FOFInflector::isPlural($name)) {
             //if its a plural switch them
             $plural = $name;
             //and get a singular
             $name = FOFInflector::singularize($name);
         }
     }
     //if still no plural just make one anyway
     if (empty($plural)) {
         $plural = $name . 's';
     }
     $cache[$name . '.plural'] = $plural;
     $cache[$name . '.singular'] = $name;
     return $cache[$name . '.' . $form];
 }
 /**
  * Creates a View object instance and returns it
  *
  * @param   string  $name    The name of the view, e.g. Items
  * @param   string  $prefix  The prefix of the view, e.g. FoobarView
  * @param   string  $type    The type of the view, usually one of Html, Raw, Json or Csv
  * @param   array   $config  The configuration variables to use for creating the view
  *
  * @return  FOFView
  */
 protected function createView($name, $prefix = '', $type = '', $config = array())
 {
     // Make sure $config is an array
     if (is_object($config)) {
         $config = (array) $config;
     } elseif (!is_array($config)) {
         $config = array();
     }
     $result = null;
     // Clean the view name
     $viewName = preg_replace('/[^A-Z0-9_]/i', '', $name);
     $classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
     $viewType = preg_replace('/[^A-Z0-9_]/i', '', $type);
     if (!isset($config['input'])) {
         $config['input'] = $this->input;
     }
     if ($config['input'] instanceof FOFInput) {
         $tmpInput = $config['input'];
     } else {
         $tmpInput = new FOFInput($config['input']);
     }
     // Guess the component name and view
     if (!empty($prefix)) {
         preg_match('/(.*)View$/', $prefix, $m);
         $component = 'com_' . strtolower($m[1]);
     } else {
         $component = '';
     }
     if (empty($component) && array_key_exists('input', $config)) {
         $component = $tmpInput->get('option', $component, 'cmd');
     }
     if (array_key_exists('option', $config)) {
         if ($config['option']) {
             $component = $config['option'];
         }
     }
     $config['option'] = $component;
     $view = strtolower($viewName);
     if (empty($view) && array_key_exists('input', $config)) {
         $view = $tmpInput->get('view', $view, 'cmd');
     }
     if (array_key_exists('view', $config)) {
         if ($config['view']) {
             $view = $config['view'];
         }
     }
     $config['view'] = $view;
     if (array_key_exists('input', $config)) {
         $tmpInput->set('option', $config['option']);
         $tmpInput->set('view', $config['view']);
         $config['input'] = $tmpInput;
     }
     // Get the base paths where the view class files are expected to live
     list($isCli, $isAdmin) = FOFDispatcher::isCliAdmin();
     $basePaths = array(JPATH_SITE . '/components/' . $config['option'] . '/views', JPATH_ADMINISTRATOR . '/components/' . $config['option'] . '/views');
     if ($isAdmin || $isCli) {
         $basePaths = array_reverse($basePaths);
         $basePaths = array_merge($basePaths, $this->paths['view'], $basePaths);
     } else {
         $basePaths = array_merge($this->paths['view']);
     }
     // Get the alternate (singular/plural) view name
     $altViewName = FOFInflector::isPlural($viewName) ? FOFInflector::singularize($viewName) : FOFInflector::pluralize($viewName);
     $suffixes = array($viewName, $altViewName, 'default');
     JLoader::import('joomla.filesystem.path');
     foreach ($suffixes as $suffix) {
         // Build the view class name
         $viewClass = $classPrefix . ucfirst($suffix);
         if (class_exists($viewClass)) {
             // The class is already loaded
             break;
         }
         // The class is not loaded. Let's load it!
         $viewPath = $this->createFileName('view', array('name' => $suffix, 'type' => $viewType));
         $path = JPath::find($basePaths, $viewPath);
         if ($path) {
             require_once $path;
         }
         if (class_exists($viewClass)) {
             // The class was loaded successfully
             break;
         }
     }
     if (!class_exists($viewClass)) {
         $viewClass = 'FOFView' . ucfirst($type);
     }
     // Setup View configuration options
     if ($isAdmin) {
         $basePath = JPATH_ADMINISTRATOR;
     } elseif ($isCli) {
         $basePath = JPATH_ROOT;
     } else {
         $basePath = JPATH_SITE;
     }
     if (!array_key_exists('template_path', $config)) {
         $config['template_path'][] = $basePath . '/components/' . $config['option'] . '/views/' . FOFInflector::pluralize($config['view']) . '/tmpl';
         if (!$isCli) {
             $config['template_path'][] = JPATH_BASE . '/templates/' . JFactory::getApplication()->getTemplate() . '/html/' . $config['option'] . '/' . FOFInflector::pluralize($config['view']);
         }
         $config['template_path'][] = $basePath . '/components/' . $config['option'] . '/views/' . FOFInflector::singularize($config['view']) . '/tmpl';
         if (!$isCli) {
             $config['template_path'][] = JPATH_BASE . '/templates/' . JFactory::getApplication()->getTemplate() . '/html/' . $config['option'] . '/' . FOFInflector::singularize($config['view']);
         }
         $config['template_path'][] = $basePath . '/components/' . $config['option'] . '/views/' . $config['view'] . '/tmpl';
         if (!$isCli) {
             $config['template_path'][] = JPATH_BASE . '/templates/' . JFactory::getApplication()->getTemplate() . '/html/' . $config['option'] . '/' . $config['view'];
         }
     }
     $extraTemplatePath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.template_path', null);
     if ($extraTemplatePath) {
         array_unshift($config['template_path'], $basePath . '/components/' . $config['option'] . '/' . $extraTemplatePath);
     }
     if (!array_key_exists('helper_path', $config)) {
         $config['helper_path'] = array($basePath . '/components/' . $config['option'] . '/helpers', JPATH_ADMINISTRATOR . '/components/' . $config['option'] . '/helpers');
     }
     $extraHelperPath = $this->configProvider->get($config['option'] . '.views.' . $config['view'] . '.config.helper_path', null);
     if ($extraHelperPath) {
         $config['helper_path'][] = $basePath . '/components/' . $config['option'] . '/' . $extraHelperPath;
     }
     $result = new $viewClass($config);
     return $result;
 }