/** * Checks if the user should be granted access to the current view, * based on his Master Password setting. * * @param string view Optional. The string to check. Leave null to use the current view. * * @return bool */ public function accessAllowed($view = null) { if (interface_exists('JModel')) { $params = JModelLegacy::getInstance('Storage', 'AdmintoolsModel'); } else { $params = JModel::getInstance('Storage', 'AdmintoolsModel'); } if (empty($view)) { $view = $this->input->get('view', 'cpanel'); } $altView = F0FInflector::isPlural($view) ? F0FInflector::singularize($view) : F0FInflector::pluralize($view); if (!in_array($view, $this->views) && !in_array($altView, $this->views)) { return true; } $masterHash = $params->getValue('masterpassword', ''); if (!empty($masterHash)) { $masterHash = md5($masterHash); // Compare the master pw with the one the user entered $session = JFactory::getSession(); $userHash = $session->get('userpwhash', '', 'admintools'); if ($userHash != $masterHash) { // The login is invalid. If the view is locked I'll have to kick the user out. $lockedviews_raw = $params->getValue('lockedviews', ''); if (!empty($lockedviews_raw)) { $lockedViews = explode(",", $lockedviews_raw); if (in_array($view, $lockedViews) || in_array($altView, $lockedViews)) { return false; } } } } return true; }
public function getRepeatable() { $html = ''; // Find which is the relation to use if ($this->item instanceof F0FTable) { // Pluralize the name to match that of the relation $relation_name = F0FInflector::pluralize($this->name); // Get the relation $iterator = $this->item->getRelations()->getMultiple($relation_name); $results = array(); // Decide which class name use in tag markup $class = !empty($this->element['class']) ? $this->element['class'] : F0FInflector::singularize($this->name); foreach ($iterator as $item) { $markup = '<span class="%s">%s</span>'; // Add link if show_link parameter is set if (!empty($this->element['url']) && !empty($this->element['show_link']) && $this->element['show_link']) { // Parse URL $url = $this->getReplacedPlaceholders($this->element['url'], $item); // Set new link markup $markup = '<a class="%s" href="' . JRoute::_($url) . '">%s</a>'; } array_push($results, sprintf($markup, $class, $item->get($item->getColumnAlias('title')))); } // Join all html segments $html .= implode(', ', $results); } // Parse field parameters if (empty($html) && !empty($this->element['empty_replacement'])) { $html = JText::_($this->element['empty_replacement']); } return $html; }
private function addSubmenuLink($view, $parent = null, $icon = null) { static $activeView = null; if (empty($activeView)) { $activeView = $this->input->getCmd('view', 'cpanel'); } if ($activeView == 'cpanels') { $activeView = 'cpanel'; } $key = strtoupper($this->component) . '_TITLE_' . strtoupper($view); if (strtoupper(JText::_($key)) == $key) { $altview = F0FInflector::isPlural($view) ? F0FInflector::singularize($view) : F0FInflector::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, $icon, $parent); }
public function onBeforeDispatch() { $result = parent::onBeforeDispatch(); if ($result) { // Load Akeeba Strapper include_once JPATH_ROOT . '/media/akeeba_strapper/strapper.php'; AkeebaStrapper::$tag = AKEEBAMEDIATAG; AkeebaStrapper::bootstrap(); AkeebaStrapper::jQueryUI(); AkeebaStrapper::addJSfile('media://com_akeeba/js/gui-helpers.js'); AkeebaStrapper::addJSfile('media://com_akeeba/js/akeebaui.js'); AkeebaStrapper::addJSfile('media://com_akeeba/js/piecon.min.js'); jimport('joomla.filesystem.file'); if (JFile::exists(F0FTemplateUtils::parsePath('media://com_akeeba/js/akeebauipro.js', true))) { AkeebaStrapper::addJSfile('media://com_akeeba/js/akeebauipro.js'); } AkeebaStrapper::addCSSfile('media://com_akeeba/theme/akeebaui.css'); // Control Check $view = F0FInflector::singularize($this->input->getCmd('view', $this->defaultView)); if ($view == 'liveupdate') { $url = JUri::base() . 'index.php?option=com_akeeba'; JFactory::getApplication()->redirect($url); return; } } return $result; }
public function onBeforeDispatch() { $result = parent::onBeforeDispatch(); if ($result) { // Clear com_modules and com_plugins cache (needed when we alter module/plugin state) $core_components = array('com_modules', 'com_plugins'); foreach ($core_components as $component) { try { $cache = JFactory::getCache($component); $cache->clean(); } catch (Exception $e) { // suck it up } } // Merge the language overrides $paths = array(JPATH_ROOT, JPATH_ADMINISTRATOR); $jlang = JFactory::getLanguage(); $jlang->load($this->component, $paths[0], 'en-GB', true); $jlang->load($this->component, $paths[0], null, true); $jlang->load($this->component, $paths[1], 'en-GB', true); $jlang->load($this->component, $paths[1], null, true); $jlang->load($this->component . '.override', $paths[0], 'en-GB', true); $jlang->load($this->component . '.override', $paths[0], null, true); $jlang->load($this->component . '.override', $paths[1], 'en-GB', true); $jlang->load($this->component . '.override', $paths[1], null, true); // Load Akeeba Strapper if (!defined('ADMINTOOLSMEDIATAG')) { $staticFilesVersioningTag = md5(ADMINTOOLS_VERSION . ADMINTOOLS_DATE); define('ADMINTOOLSMEDIATAG', $staticFilesVersioningTag); } include_once JPATH_ROOT . '/media/akeeba_strapper/strapper.php'; AkeebaStrapper::$tag = ADMINTOOLSMEDIATAG; AkeebaStrapper::bootstrap(); AkeebaStrapper::jQueryUI(); AkeebaStrapper::addCSSfile('admin://components/com_admintools/media/css/backend.css'); // Work around non-transparent proxy and reverse proxy IP issues if (class_exists('F0FUtilsIp', true)) { F0FUtilsIp::workaroundIPIssues(); } // Control Check $view = F0FInflector::singularize($this->input->getCmd('view', $this->defaultView)); if ($view == 'liveupdate') { $url = JUri::base() . 'index.php?option=com_admintools'; JFactory::getApplication()->redirect($url); return; } // ========== Master PW check ========== /** @var AdmintoolsModelMasterpw $model */ $model = F0FModel::getAnInstance('Masterpw', 'AdmintoolsModel'); if (!$model->accessAllowed($view)) { $url = $view == 'cpanel' ? 'index.php' : 'index.php?option=com_admintools&view=cpanel'; JFactory::getApplication()->redirect($url, JText::_('ATOOLS_ERR_NOTAUTHORIZED'), 'error'); return; } } return $result; }
public function dispatch() { // Look for controllers in the plugins folder $option = $this->input->get('option', 'com_foobar', 'cmd'); $view = $this->input->get('view', $this->defaultView, 'cmd'); $c = F0FInflector::singularize($view); $alt_path = JPATH_SITE . '/components/' . $option . '/plugins/controllers/' . $c . '.php'; JLoader::import('joomla.filesystem.file'); if (JFile::exists($alt_path)) { // The requested controller exists and there you load it... require_once $alt_path; } $this->input->set('view', $this->view); parent::dispatch(); }
public function dispatch() { if (!class_exists('AkeebaControllerDefault')) { require_once JPATH_ADMINISTRATOR . '/components/com_akeeba/controllers/default.php'; } // Merge the language overrides $paths = array(JPATH_ROOT, JPATH_ADMINISTRATOR); $jlang = JFactory::getLanguage(); $jlang->load($this->component, $paths[0], 'en-GB', true); $jlang->load($this->component, $paths[0], null, true); $jlang->load($this->component, $paths[1], 'en-GB', true); $jlang->load($this->component, $paths[1], null, true); $jlang->load($this->component . '.override', $paths[0], 'en-GB', true); $jlang->load($this->component . '.override', $paths[0], null, true); $jlang->load($this->component . '.override', $paths[1], 'en-GB', true); $jlang->load($this->component . '.override', $paths[1], null, true); F0FInflector::addWord('alice', 'alices'); // Timezone fix; avoids errors printed out by PHP 5.3.3+ (thanks Yannick!) if (function_exists('date_default_timezone_get') && function_exists('date_default_timezone_set')) { if (function_exists('error_reporting')) { $oldLevel = error_reporting(0); } $serverTimezone = @date_default_timezone_get(); if (empty($serverTimezone) || !is_string($serverTimezone)) { $serverTimezone = 'UTC'; } if (function_exists('error_reporting')) { error_reporting($oldLevel); } @date_default_timezone_set($serverTimezone); } // Necessary defines for Akeeba Engine if (!defined('AKEEBAENGINE')) { define('AKEEBAENGINE', 1); // Required for accessing Akeeba Engine's factory class define('AKEEBAROOT', dirname(__FILE__) . '/akeeba'); define('ALICEROOT', dirname(__FILE__) . '/alice'); } // Setup Akeeba's ACLs, honoring laxed permissions in component's parameters, if set // Access check, Joomla! 1.6 style. $user = JFactory::getUser(); if (!$user->authorise('core.manage', 'com_akeeba')) { return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR')); } // Make sure we have a profile set throughout the component's lifetime $session = JFactory::getSession(); $profile_id = $session->get('profile', null, 'akeeba'); if (is_null($profile_id)) { // No profile is set in the session; use default profile $session->set('profile', 1, 'akeeba'); } // Load the factory require_once JPATH_COMPONENT_ADMINISTRATOR . '/akeeba/factory.php'; @(include_once JPATH_COMPONENT_ADMINISTRATOR . '/alice/factory.php'); // Load the Akeeba Backup configuration and check user access permission $aeconfig = AEFactory::getConfiguration(); AEPlatform::getInstance()->load_configuration(); $jDbo = JFactory::getDbo(); if ($jDbo->name == 'pdomysql') { // Prevents the "SQLSTATE[HY000]: General error: 2014" due to resource sharing with Akeeba Engine @JFactory::getDbo()->disconnect(); } unset($aeconfig); // Preload helpers require_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/includes.php'; require_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/escape.php'; // Load the utils helper library AEPlatform::getInstance()->load_version_defines(); // Create a versioning tag for our static files $staticFilesVersioningTag = md5(AKEEBA_VERSION . AKEEBA_DATE); define('AKEEBAMEDIATAG', $staticFilesVersioningTag); // If JSON functions don't exist, load our compatibility layer if (!function_exists('json_encode') || !function_exists('json_decode')) { require_once JPATH_COMPONENT_ADMINISTRATOR . '/helpers/jsonlib.php'; } // Look for controllers in the plugins folder $option = $this->input->get('option', 'com_foobar', 'cmd'); $view = $this->input->get('view', $this->defaultView, 'cmd'); $c = F0FInflector::singularize($view); $alt_path = JPATH_ADMINISTRATOR . '/components/' . $option . '/plugins/controllers/' . $c . '.php'; JLoader::import('joomla.filesystem.file'); if (JFile::exists($alt_path)) { // The requested controller exists and there you load it... require_once $alt_path; } $this->input->set('view', $this->view); parent::dispatch(); }
/** * Guesses the best candidate for the path to use for a particular form. * * @param string $source The name of the form file to load, without the .xml extension. * @param array $paths The paths to look into. You can declare this to override the default F0F paths. * * @return mixed A string if the path and filename of the form to load is found, false otherwise. * * @since 2.0 */ public function findFormFilename($source, $paths = array()) { // TODO Should we read from internal variables instead of the input? With a temp instance we have no input $option = $this->input->getCmd('option', 'com_foobar'); $view = $this->name; $componentPaths = F0FPlatform::getInstance()->getComponentBaseDirs($option); $file_root = $componentPaths['main']; $alt_file_root = $componentPaths['alt']; $template_root = F0FPlatform::getInstance()->getTemplateOverridePath($option); if (empty($paths)) { // Set up the paths to look into // PLEASE NOTE: If you ever change this, please update Model Unit tests, too, since we have to // copy these default folders (we have to add the protocol for the virtual filesystem) $paths = array($template_root . '/' . $view, $template_root . '/' . F0FInflector::singularize($view), $template_root . '/' . F0FInflector::pluralize($view), $file_root . '/views/' . $view . '/tmpl', $file_root . '/views/' . F0FInflector::singularize($view) . '/tmpl', $file_root . '/views/' . F0FInflector::pluralize($view) . '/tmpl', $alt_file_root . '/views/' . $view . '/tmpl', $alt_file_root . '/views/' . F0FInflector::singularize($view) . '/tmpl', $alt_file_root . '/views/' . F0FInflector::pluralize($view) . '/tmpl', $file_root . '/models/forms', $alt_file_root . '/models/forms'); } $paths = array_unique($paths); // Set up the suffixes to look into $suffixes = array(); $temp_suffixes = F0FPlatform::getInstance()->getTemplateSuffixes(); if (!empty($temp_suffixes)) { foreach ($temp_suffixes as $suffix) { $suffixes[] = $suffix . '.xml'; } } $suffixes[] = '.xml'; // Look for all suffixes in all paths $result = false; $filesystem = F0FPlatform::getInstance()->getIntegrationObject('filesystem'); foreach ($paths as $path) { foreach ($suffixes as $suffix) { $filename = $path . '/' . $source . $suffix; if ($filesystem->fileExists($filename)) { $result = $filename; break; } } if ($result) { break; } } return $result; }
/** * Return a list of the view template paths for this component. * * @param string $component The name of the component. For Joomla! this * is something like "com_example" * @param string $view The name of the view you're looking a * template for * @param string $layout The layout name to load, e.g. 'default' * @param string $tpl The sub-template name to load (null by default) * @param boolean $strict If true, only the specified layout will be searched for. * Otherwise we'll fall back to the 'default' layout if the * specified layout is not found. * * @see F0FPlatformInterface::getViewTemplateDirs() * * @return array */ public function getViewTemplatePaths($component, $view, $layout = 'default', $tpl = null, $strict = false) { $isAdmin = $this->isBackend(); $basePath = $isAdmin ? 'admin:' : 'site:'; $basePath .= $component . '/'; $altBasePath = $basePath; $basePath .= $view . '/'; $altBasePath .= (F0FInflector::isSingular($view) ? F0FInflector::pluralize($view) : F0FInflector::singularize($view)) . '/'; if ($strict) { $paths = array($basePath . $layout . ($tpl ? "_{$tpl}" : ''), $altBasePath . $layout . ($tpl ? "_{$tpl}" : '')); } else { $paths = array($basePath . $layout . ($tpl ? "_{$tpl}" : ''), $basePath . $layout, $basePath . 'default' . ($tpl ? "_{$tpl}" : ''), $basePath . 'default', $altBasePath . $layout . ($tpl ? "_{$tpl}" : ''), $altBasePath . $layout, $altBasePath . 'default' . ($tpl ? "_{$tpl}" : ''), $altBasePath . 'default'); $paths = array_unique($paths); } return $paths; }
/** * 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); //Do we have a translation for this key? if (strtoupper(JText::_($key)) == $key) { $altview = F0FInflector::isPlural($view) ? F0FInflector::singularize($view) : F0FInflector::pluralize($view); $key2 = strtoupper($this->component) . '_TITLE_' . strtoupper($altview); // Maybe we have for the alternative view? if (strtoupper(JText::_($key2)) == $key2) { // Nope, let's use the raw name $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); } }
/** * The main code of the Dispatcher. It spawns the necessary controller and * runs it. * * @throws Exception * * @return void|Exception */ public function dispatch() { $platform = F0FPlatform::getInstance(); if (!$platform->authorizeAdmin($this->input->getCmd('option', 'com_foobar'))) { return $platform->raiseError(403, JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')); } $this->transparentAuthentication(); // Merge English and local translations $platform->loadTranslations($this->component); $canDispatch = true; if ($platform->isCli()) { $canDispatch = $canDispatch && $this->onBeforeDispatchCLI(); } $canDispatch = $canDispatch && $this->onBeforeDispatch(); if (!$canDispatch) { // We can set header only if we're not in CLI if (!$platform->isCli()) { $platform->setHeader('Status', '403 Forbidden', true); } return $platform->raiseError(403, JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')); } // Get and execute the controller $option = $this->input->getCmd('option', 'com_foobar'); $view = $this->input->getCmd('view', $this->defaultView); $task = $this->input->getCmd('task', null); if (empty($task)) { $task = $this->getTask($view); } // Pluralise/sungularise the view name for typical tasks if (in_array($task, array('edit', 'add', 'read'))) { $view = F0FInflector::singularize($view); } elseif (in_array($task, array('browse'))) { $view = F0FInflector::pluralize($view); } $this->input->set('view', $view); $this->input->set('task', $task); $config = $this->config; $config['input'] = $this->input; $controller = F0FController::getTmpInstance($option, $view, $config); $status = $controller->execute($task); if (!$this->onAfterDispatch()) { // We can set header only if we're not in CLI if (!$platform->isCli()) { $platform->setHeader('Status', '403 Forbidden', true); } return $platform->raiseError(403, JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN')); } $format = $this->input->get('format', 'html', 'cmd'); $format = empty($format) ? 'html' : $format; if ($controller->hasRedirect()) { $controller->redirect(); } }
/** * Autoload Helpers * * @param string $class_name The name of the class to load * * @return void */ public function autoload_fof_helper($class_name) { F0FPlatform::getInstance()->logDebug(__METHOD__ . "() autoloading {$class_name}"); static $isCli = null, $isAdmin = null; if (is_null($isCli) && is_null($isAdmin)) { list($isCli, $isAdmin) = F0FDispatcher::isCliAdmin(); } if (strpos($class_name, 'Helper') === false) { return; } // Change from camel cased into a lowercase array $class_modified = preg_replace('/(\\s)+/', '_', $class_name); $class_modified = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $class_modified)); $parts = explode('_', $class_modified); // We need three parts in the name if (count($parts) != 3) { return; } // We need the second part to be "model" if ($parts[1] != 'helper') { return; } // Get the information about this class $component_raw = $parts[0]; $component = 'com_' . $parts[0]; $view = $parts[2]; // Is this an F0F 2.1 or later component? if (!$this->isF0FComponent($component)) { return; } // Get the alternate view and class name (opposite singular/plural name) $alt_view = F0FInflector::isSingular($view) ? F0FInflector::pluralize($view) : F0FInflector::singularize($view); $alt_class = F0FInflector::camelize($component_raw . '_helper_' . $alt_view); // Get the proper and alternate paths and file names $componentPaths = F0FPlatform::getInstance()->getComponentBaseDirs($component); $file = "/helpers/{$view}.php"; $altFile = "/helpers/{$alt_view}.php"; $path = $componentPaths['main']; $altPath = $componentPaths['alt']; // Try to find the proper class in the proper path if (file_exists($path . $file)) { @(include_once $path . $file); } // Try to find the proper class in the alternate path if (!class_exists($class_name) && file_exists($altPath . $file)) { @(include_once $altPath . $file); } // Try to find the alternate class in the proper path if (!class_exists($alt_class) && file_exists($path . $altFile)) { @(include_once $path . $altFile); } // Try to find the alternate class in the alternate path if (!class_exists($alt_class) && file_exists($altPath . $altFile)) { @(include_once $altPath . $altFile); } // If the alternate class exists just map the class to the alternate if (!class_exists($class_name) && class_exists($alt_class)) { $this->class_alias($alt_class, $class_name); } }
/** * Normalises the format of a relation name * * @param string $itemName The raw relation name * @param boolean $pluralise Should I pluralise the name? If not, I will singularise it * * @return string The normalised relation key name */ protected function normaliseItemName($itemName, $pluralise = false) { // Explode the item name $itemNameParts = explode('_', $itemName); // If we have multiple parts the first part is considered to be the component name if (count($itemNameParts) > 1) { $prefix = array_shift($itemNameParts); } else { $prefix = null; } // If we still have multiple parts we need to pluralise/singularise the last part and join everything in // CamelCase format if (count($itemNameParts) > 1) { $name = array_pop($itemNameParts); $name = $pluralise ? F0FInflector::pluralize($name) : F0FInflector::singularize($name); $itemNameParts[] = $name; $itemName = F0FInflector::implode($itemNameParts); } else { $name = array_pop($itemNameParts); $itemName = $pluralise ? F0FInflector::pluralize($name) : F0FInflector::singularize($name); } if (!empty($prefix)) { $itemName = $prefix . '_' . $itemName; } return $itemName; }
/** * addSubmenuLink * * @param object $view Param * @param object $parent Param * * @return void */ private function addSubmenuLink($view, $parent = null) { static $activeView = null; if (empty($activeView)) { $activeView = $this->input->getCmd('view', 'cpanel'); } if ($activeView == 'cpanels') { $activeView = 'cpanel'; } $icon_key = strtoupper($this->component) . '_ICON_' . strtoupper($view); $icon = JText::_($icon_key); $key = strtoupper($this->component) . '_TITLE_' . strtoupper($view); if (strtoupper(JText::_($key)) == $key) { $altview = F0FInflector::isPlural($view) ? F0FInflector::singularize($view) : F0FInflector::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); } if ($view == 'usermanual') { $link = 'http://documentation.extly.com/'; } elseif ($view == 'options') { $component = urlencode($this->component); $uri = (string) JUri::getInstance(); $return = urlencode(base64_encode($uri)); $link = 'index.php?option=com_config&view=component&component=' . $component . '&path=&return=' . $return; } else { $link = 'index.php?option=' . $this->component . '&view=' . $view; } $active = $view == $activeView; $this->appendLink($icon . ' ' . $name, $link, $active, null, $parent); }
/** * Public constructor. Instantiates a F0FView object. * * @param array $config The configuration data array */ public function __construct($config = array()) { // Make sure $config is an array if (is_object($config)) { $config = (array) $config; } elseif (!is_array($config)) { $config = array(); } // Get the input if (array_key_exists('input', $config)) { if ($config['input'] instanceof F0FInput) { $this->input = $config['input']; } else { $this->input = new F0FInput($config['input']); } } else { $this->input = new F0FInput(); } parent::__construct($config); $component = 'com_foobar'; // Get the component name if (array_key_exists('input', $config)) { if ($config['input'] instanceof F0FInput) { $tmpInput = $config['input']; } else { $tmpInput = new F0FInput($config['input']); } $component = $tmpInput->getCmd('option', ''); } else { $tmpInput = $this->input; } if (array_key_exists('option', $config)) { if ($config['option']) { $component = $config['option']; } } $config['option'] = $component; // Get the view name $view = null; if (array_key_exists('input', $config)) { $view = $tmpInput->getCmd('view', ''); } if (array_key_exists('view', $config)) { if ($config['view']) { $view = $config['view']; } } $config['view'] = $view; // Set the component and the view to the input array if (array_key_exists('input', $config)) { $tmpInput->set('option', $config['option']); $tmpInput->set('view', $config['view']); } // Set the view name if (array_key_exists('name', $config)) { $this->_name = $config['name']; } else { $this->_name = $config['view']; } $tmpInput->set('view', $this->_name); $config['input'] = $tmpInput; $config['name'] = $this->_name; $config['view'] = $this->_name; // Get the component directories $componentPaths = F0FPlatform::getInstance()->getComponentBaseDirs($config['option']); // Set the charset (used by the variable escaping functions) if (array_key_exists('charset', $config)) { F0FPlatform::getInstance()->logDeprecated('Setting a custom charset for escaping in F0FView\'s constructor is deprecated. Override F0FView::escape() instead.'); $this->_charset = $config['charset']; } // User-defined escaping callback if (array_key_exists('escape', $config)) { $this->setEscape($config['escape']); } // Set a base path for use by the view if (array_key_exists('base_path', $config)) { $this->_basePath = $config['base_path']; } else { $this->_basePath = $componentPaths['main']; } // Set the default template search path if (array_key_exists('template_path', $config)) { // User-defined dirs $this->_setPath('template', $config['template_path']); } else { $altView = F0FInflector::isSingular($this->getName()) ? F0FInflector::pluralize($this->getName()) : F0FInflector::singularize($this->getName()); $this->_setPath('template', $this->_basePath . '/views/' . $altView . '/tmpl'); $this->_addPath('template', $this->_basePath . '/views/' . $this->getName() . '/tmpl'); } // Set the default helper search path if (array_key_exists('helper_path', $config)) { // User-defined dirs $this->_setPath('helper', $config['helper_path']); } else { $this->_setPath('helper', $this->_basePath . '/helpers'); } // Set the layout if (array_key_exists('layout', $config)) { $this->setLayout($config['layout']); } else { $this->setLayout('default'); } $this->config = $config; if (!F0FPlatform::getInstance()->isCli()) { $this->baseurl = F0FPlatform::getInstance()->URIbase(true); $fallback = F0FPlatform::getInstance()->getTemplateOverridePath($component) . '/' . $this->getName(); $this->_addPath('template', $fallback); } }
/** * ACL check before changing the publish status of a record; override to customise * * @return boolean True to allow the method to run */ protected function onBeforeUnpublish() { $privilege = $this->configProvider->get($this->component . '.views.' . F0FInflector::singularize($this->view) . '.acl.unpublish', 'core.edit.state'); return $this->checkACL($privilege); }
/** * Get the content type for ucm * * @return string The content type alias */ public function getContentType() { if ($this->contentType) { return $this->contentType; } /** * When tags was first introduced contentType variable didn't exist - so we guess one * This will fail if content history behvaiour is enabled. This code is deprecated * and will be removed in F0F 3.0 in favour of the content type class variable */ $component = $this->input->get('option'); $view = F0FInflector::singularize($this->input->get('view')); $alias = $component . '.' . $view; return $alias; }