function checkRecurrenceCondition($newsletter) { if (!$newsletter->attribute('recurrence_condition')) { return true; } if (0 < count($this->conditionExtensions)) { foreach ($this->conditionExtensions as $conditionExtension) { // TODO: Extend to ask multiple condition extensions to allow more complex checks $siteINI = eZINI::instance(); $siteINI->loadCache(); $extensionDirectory = $siteINI->variable('ExtensionSettings', 'ExtensionDirectory'); $extensionDirectories = eZDir::findSubItems($extensionDirectory); $directoryList = eZExtension::expandedPathList($extensionDirectories, 'condition_handler'); foreach ($directoryList as $directory) { $handlerFile = $directory . '/' . strtolower($conditionExtension) . 'handler.php'; // we only check one extension for now if ($conditionExtension === $newsletter->attribute('recurrence_condition') && file_exists($handlerFile)) { include_once $handlerFile; $className = $conditionExtension . 'Handler'; if (class_exists($className)) { $impl = new $className(); // Ask if condition is fullfilled return $impl->checkCondition($newsletter); } else { eZDebug::writeError("Class {$className} not found. Unable to verify recurrence condition. Blocked recurrence."); return false; } } } } } // If we have a condition but no match we prevent the sendout eZDebug::writeError("Newsletter recurrence condition '" . $newsletter->attribute('recurrence_condition') . "' extension not found "); return false; }
/** * Returns a new instance of the eZUser class pr $protocol. * * @param string $protocol If not set to 'standard' (default), then the code will look * for handler first in kernel/classes/datatypes/ezuser/, then according to * site.ini[UserSettings]ExtensionDirectory settings * @return eZUser */ static function instance($protocol = "standard") { $triedFiles = array(); if ($protocol == "standard") { $impl = new eZUser(0); return $impl; } else { $ezuserFile = 'kernel/classes/datatypes/ezuser/ez' . strtolower($protocol) . 'user.php'; $triedFiles[] = $ezuserFile; if (file_exists($ezuserFile)) { include_once $ezuserFile; $className = 'eZ' . $protocol . 'User'; $impl = new $className(); return $impl; } else { $ini = eZINI::instance(); $extensionDirectories = $ini->variable('UserSettings', 'ExtensionDirectory'); $directoryList = eZExtension::expandedPathList($extensionDirectories, 'login_handler'); foreach ($directoryList as $directory) { $userFile = $directory . '/ez' . strtolower($protocol) . 'user.php'; $triedFiles[] = $userFile; if (file_exists($userFile)) { include_once $userFile; $className = 'eZ' . $protocol . 'User'; $impl = new $className(); return $impl; } } } } // if no one appropriate instance was found eZDebug::writeWarning("Unable to find user login handler '{$protocol}', searched for these files: " . implode(', ', $triedFiles), __METHOD__); $impl = null; return $impl; }
function initializeIncludes() { // If we have this global variable we shouldn't do any processing if (!empty($GLOBALS['eZSimpleTagsInit'])) { return; } $GLOBALS['eZSimpleTagsInit'] = true; $ini = eZINI::instance('template.ini'); $extensions = $ini->variable('SimpleTagsOperator', 'Extensions'); $pathList = eZExtension::expandedPathList($extensions, 'simpletags'); $includeList = $ini->variable('SimpleTagsOperator', 'IncludeList'); foreach ($includeList as $includeFile) { foreach ($pathList as $path) { $file = $path . '/' . $includeFile; if (file_exists($file)) { include_once $file; } } } }
static function getEngine() { // Get instance if already created. $instanceName = "eZSearchPlugin_" . $GLOBALS["eZCurrentAccess"]["name"]; if ( isset( $GLOBALS[$instanceName] ) ) { return $GLOBALS[$instanceName]; } $ini = eZINI::instance(); $searchEngineString = 'ezsearch'; if ( $ini->hasVariable( 'SearchSettings', 'SearchEngine' ) == true ) { $searchEngineString = $ini->variable( 'SearchSettings', 'SearchEngine' ); } $directoryList = array(); if ( $ini->hasVariable( 'SearchSettings', 'ExtensionDirectories' ) ) { $extensionDirectories = $ini->variable( 'SearchSettings', 'ExtensionDirectories' ); if ( is_array( $extensionDirectories ) ) { $directoryList = eZExtension::expandedPathList( $extensionDirectories, 'search/plugins' ); } } $kernelDir = array( 'kernel/search/plugins' ); $directoryList = array_merge( $kernelDir, $directoryList ); foreach( $directoryList as $directory ) { $searchEngineFile = implode( '/', array( $directory, strtolower( $searchEngineString ), strtolower( $searchEngineString ) ) ) . '.php'; if ( file_exists( $searchEngineFile ) ) { eZDebugSetting::writeDebug( 'kernel-search-ezsearch', 'Loading search engine from ' . $searchEngineFile, 'eZSearch::getEngine' ); include_once( $searchEngineFile ); $GLOBALS[$instanceName] = new $searchEngineString(); return $GLOBALS[$instanceName]; } } eZDebug::writeDebug( 'Unable to find the search engine:' . $searchEngineString, 'eZSearch' ); eZDebug::writeDebug( 'Tried paths: ' . implode( ', ', $directoryList ), 'eZSearch' ); return false; }
} if ($siteAccessChangeMessage) { $cli->output($siteAccessChangeMessage); } else { $cli->output("Using siteaccess {$siteaccess} for cronjob"); } if ($cronPart) { $cli->output("Running cronjob part '{$cronPart}'"); } $db = eZDB::instance(); $db->setIsSQLOutputEnabled($showSQL); $ini = eZINI::instance('cronjob.ini'); $scriptDirectories = $ini->variable('CronjobSettings', 'ScriptDirectories'); /* Include extension directories */ $extensionDirectories = $ini->variable('CronjobSettings', 'ExtensionDirectories'); $scriptDirectories = array_merge($scriptDirectories, eZExtension::expandedPathList($extensionDirectories, 'cronjobs')); if ($listCronjobs) { foreach ($ini->groups() as $block => $blockValues) { if (strpos($block, 'Cronjob') !== false) { $cli->output($cli->endLineString()); $cli->output("{$block}:"); foreach ($blockValues['Scripts'] as $fileName) { $fileExists = false; foreach ($scriptDirectories as $scriptDirectory) { $filePath = $scriptDirectory . "/" . $fileName; if (file_exists($filePath)) { $fileExists = true; $cli->output("{$cli->goToColumn(4)} {$filePath}"); } } if (!$fileExists) {
function loadTransformationFiles($currentCharset, $transformationGroup) { $ini = eZINI::instance('transform.ini'); $repositoryList = array($ini->variable('Transformation', 'Repository')); $files = $ini->variable('Transformation', 'Files'); $extensions = $ini->variable('Transformation', 'Extensions'); $repositoryList = array_merge($repositoryList, eZExtension::expandedPathList($extensions, 'transformations')); // Check if the current charset maps to a unicode group // If it does it can trigger loading of additional files $unicodeGroups = array(); $charsets = $ini->variable('Transformation', 'Charsets'); foreach ($charsets as $entry) { list($charset, $group) = explode(';', $entry, 2); $charset = eZCharsetInfo::realCharsetCode($charset); if ($charset == $currentCharset) { if (!in_array($group, $unicodeGroups)) { $unicodeGroups[] = $group; } } } // If we are using transformation groups then add that as // a unicode group. This causes it load transformation files // specific to that group. if ($transformationGroup !== false) { $unicodeGroups[] = $transformationGroup; } // Add any extra files from the unicode groups foreach ($unicodeGroups as $unicodeGroup) { if ($ini->hasGroup($unicodeGroup)) { $files = array_merge($files, $ini->variable($unicodeGroup, 'Files')); $extensions = $ini->variable($unicodeGroup, 'Extensions'); $repositoryList = array_merge($repositoryList, eZExtension::expandedPathList($extensions, 'transformations')); } } foreach ($files as $file) { // Only load files that are not currently loaded if ($this->isTranformationLoaded($file)) { continue; } foreach ($repositoryList as $repository) { $trFile = $repository . '/' . $file; if (file_exists($trFile)) { $this->parseTransformationFile($trFile, $file); } } } }
/** * Returns a shared instance of the eZTemplate class with * default settings applied, like: * - Autoload operators loaded * - Debug mode set * - eZTemplateDesignResource::instance registered * * @since 4.3 * @return eZTemplate */ public static function factory() { if (self::$factory === false) { $instance = self::instance(); $ini = eZINI::instance(); if (!isset($GLOBALS['eZTemplateDebugInternalsEnabled']) && $ini->variable('TemplateSettings', 'Debug') == 'enabled') { eZTemplate::setIsDebugEnabled(true); } $compatAutoLoadPath = $ini->variableArray('TemplateSettings', 'AutoloadPath'); $autoLoadPathList = $ini->variable('TemplateSettings', 'AutoloadPathList'); $extensionAutoloadPath = $ini->variable('TemplateSettings', 'ExtensionAutoloadPath'); $extensionPathList = eZExtension::expandedPathList($extensionAutoloadPath, 'autoloads/'); $autoLoadPathList = array_unique(array_merge($compatAutoLoadPath, $autoLoadPathList, $extensionPathList)); $instance->setAutoloadPathList($autoLoadPathList); $instance->autoload(); $instance->registerResource(eZTemplateDesignResource::instance()); self::$factory = true; } return self::instance(); }
/** * Returns a shared instance of the eZUser class pr $id value. * If user can not be fetched, then anonymous user is returned and * a warning trown, if anonymous user can not be fetched, then NoUser * is returned and another warning is thrown. * * @param int|false $id On false: Gets current user id from session * or from {@link eZUser::anonymousId()} if not set. * @return eZUser */ static function instance($id = false) { if (!empty($GLOBALS["eZUserGlobalInstance_{$id}"])) { return $GLOBALS["eZUserGlobalInstance_{$id}"]; } $userId = $id; $currentUser = null; $http = eZHTTPTool::instance(); $anonymousUserID = self::anonymousId(); $sessionHasStarted = eZSession::hasStarted(); // If not specified get the current user if ($userId === false) { if ($sessionHasStarted) { $userId = $http->sessionVariable('eZUserLoggedInID'); if (!is_numeric($userId)) { $userId = $anonymousUserID; eZSession::setUserID($userId); $http->setSessionVariable('eZUserLoggedInID', $userId); } } else { $userId = $anonymousUserID; eZSession::setUserID($userId); } } // Check user cache (this effectivly fetches user from cache) // user not found if !isset( isset( $userCache['info'][$userId] ) ) $userCache = self::getUserCacheByUserId($userId); if (isset($userCache['info'][$userId])) { $userArray = $userCache['info'][$userId]; if (is_numeric($userArray['contentobject_id'])) { $currentUser = new eZUser($userArray); $currentUser->setUserCache($userCache); } } $ini = eZINI::instance(); // Check if: // - the user has not logged out, // - the user is not logged in, // - and if a automatic single sign on plugin is enabled. if (!self::$userHasLoggedOut and is_object($currentUser) and !$currentUser->isLoggedIn()) { $ssoHandlerArray = $ini->variable('UserSettings', 'SingleSignOnHandlerArray'); if (!empty($ssoHandlerArray)) { $ssoUser = false; foreach ($ssoHandlerArray as $ssoHandler) { // Load handler $handlerFile = 'kernel/classes/ssohandlers/ez' . strtolower($ssoHandler) . 'ssohandler.php'; if (file_exists($handlerFile)) { include_once $handlerFile; $className = 'eZ' . $ssoHandler . 'SSOHandler'; $impl = new $className(); $ssoUser = $impl->handleSSOLogin(); } else { $extensionDirectories = $ini->variable('UserSettings', 'ExtensionDirectory'); $directoryList = eZExtension::expandedPathList($extensionDirectories, 'sso_handler'); foreach ($directoryList as $directory) { $handlerFile = $directory . '/ez' . strtolower($ssoHandler) . 'ssohandler.php'; if (file_exists($handlerFile)) { include_once $handlerFile; $className = 'eZ' . $ssoHandler . 'SSOHandler'; $impl = new $className(); $ssoUser = $impl->handleSSOLogin(); } } } } // If a user was found via SSO, then use it if ($ssoUser !== false) { $currentUser = $ssoUser; $userId = $currentUser->attribute('contentobject_id'); $userInfo = array(); $userInfo[$userId] = array('contentobject_id' => $userId, 'login' => $currentUser->attribute('login'), 'email' => $currentUser->attribute('email'), 'password_hash' => $currentUser->attribute('password_hash'), 'password_hash_type' => $currentUser->attribute('password_hash_type')); eZSession::setUserID($userId); $http->setSessionVariable('eZUserLoggedInID', $userId); eZUser::updateLastVisit($userId); eZUser::setCurrentlyLoggedInUser($currentUser, $userId); eZHTTPTool::redirect(eZSys::wwwDir() . eZSys::indexFile(false) . eZSys::requestURI(), array(), 302); eZExecution::cleanExit(); } } } if ($userId != $anonymousUserID) { $sessionInactivityTimeout = $ini->variable('Session', 'ActivityTimeout'); if (!isset($GLOBALS['eZSessionIdleTime'])) { eZUser::updateLastVisit($userId); } else { $sessionIdle = $GLOBALS['eZSessionIdleTime']; if ($sessionIdle > $sessionInactivityTimeout) { eZUser::updateLastVisit($userId); } } } if (!$currentUser) { $currentUser = eZUser::fetch(self::anonymousId()); eZDebug::writeWarning('User not found, returning anonymous'); } if (!$currentUser) { $currentUser = new eZUser(array('id' => -1, 'login' => 'NoUser')); eZDebug::writeWarning('Anonymous user not found, returning NoUser'); } $GLOBALS["eZUserGlobalInstance_{$id}"] = $currentUser; return $currentUser; }
/** * @param $tpl eZTemplate * @param $operatorName array * @param $operatorParameters array * @param $rootNamespace string * @param $currentNamespace string * @param $operatorValue mixed * @param $namedParameters array * * @return mixed */ function modify(&$tpl, &$operatorName, &$operatorParameters, &$rootNamespace, &$currentNamespace, &$operatorValue, &$namedParameters) { $ini = eZINI::instance('ocoperatorscollection.ini'); $appini = eZINI::instance('app.ini'); switch ($operatorName) { case 'related_attribute_objects': $object = $operatorValue; $identifier = $namedParameters['identifier']; $dataMap = $object instanceof eZContentObject || $object instanceof eZContentObjectTreeNode ? $object->attribute('data_map') : array(); $data = array(); if (isset($dataMap[$identifier])) { $ids = $dataMap[$identifier] instanceof eZContentObjectAttribute ? explode('-', $dataMap[$identifier]->toString()) : array(); if (!empty($ids)) { $data = eZContentObject::fetchList(true, array("id" => array($ids))); } } $operatorValue = $data; break; case 'smart_override': $identifier = $namedParameters['identifier']; $view = $namedParameters['view']; $node = $operatorValue; $operatorValue = $this->findSmartTemplate($identifier, $view, $node); break; case 'parse_link_href': $href = $operatorValue; $hrefParts = explode(':', $href); $hrefFirst = array_shift($hrefParts); if (!in_array($hrefFirst, array('http', 'https', 'file', 'mailto', 'ftp'))) { if (!empty($hrefFirst)) { $nodeID = eZURLAliasML::fetchNodeIDByPath('/' . $hrefFirst); if ($nodeID) { $contentNode = eZContentObjectTreeNode::fetch($nodeID); if ($contentNode instanceof eZContentObjectTreeNode) { $keyArray = array(array('node', $contentNode->attribute('node_id')), array('object', $contentNode->attribute('contentobject_id')), array('class_identifier', $contentNode->attribute('class_identifier')), array('class_group', $contentNode->attribute('object')->attribute('content_class')->attribute('match_ingroup_id_list'))); $tpl = new eZTemplate(); $ini = eZINI::instance(); $autoLoadPathList = $ini->variable('TemplateSettings', 'AutoloadPathList'); $extensionAutoloadPath = $ini->variable('TemplateSettings', 'ExtensionAutoloadPath'); $extensionPathList = eZExtension::expandedPathList($extensionAutoloadPath, 'autoloads/'); $autoLoadPathList = array_unique(array_merge($autoLoadPathList, $extensionPathList)); $tpl->setAutoloadPathList($autoLoadPathList); $tpl->autoload(); $tpl->setVariable('node', $contentNode); $tpl->setVariable('object', $contentNode->attribute('object')); $tpl->setVariable('original_href', $href); $res = new eZTemplateDesignResource(); $res->setKeys($keyArray); $tpl->registerResource($res); $result = trim($tpl->fetch('design:link/href.tpl')); if (!empty($result)) { $href = $result; } } } } } return $operatorValue = $href; break; case 'gmap_static_image': try { $cacheFileNames = array(); //@todo $operatorValue = OCOperatorsCollectionsTools::gmapStaticImage($namedParameters['parameters'], $namedParameters['attribute'], $cacheFileNames); } catch (Exception $e) { eZDebug::writeError($e->getMessage(), 'gmap_static_image'); } break; case 'fa_class_icon': $faIconIni = eZINI::instance('fa_icons.ini'); $node = $operatorValue; $data = $namedParameters['fallback'] != '' ? $namedParameters['fallback'] : $faIconIni->variable('ClassIcons', '_fallback'); if ($node instanceof eZContentObjectTreeNode) { if ($faIconIni->hasVariable('ClassIcons', $node->attribute('class_identifier'))) { $data = $faIconIni->variable('ClassIcons', $node->attribute('class_identifier')); } } $operatorValue = $data; break; case 'fa_object_icon': $faIconIni = eZINI::instance('fa_icons.ini'); $object = $operatorValue; $data = $namedParameters['fallback'] != '' ? $namedParameters['fallback'] : ''; if ($object instanceof eZContentObject) { if ($faIconIni->hasVariable('ObjectIcons', $object->attribute('id'))) { $data = $faIconIni->variable('ObjectIcons', $object->attribute('id')); } } else { if ($faIconIni->hasVariable('ObjectIcons', $node)) { $data = $faIconIni->variable('ObjectIcons', $node); } } $operatorValue = $data; break; case 'fa_node_icon': $faIconIni = eZINI::instance('fa_icons.ini'); $node = $operatorValue; $data = $namedParameters['fallback'] != '' ? $namedParameters['fallback'] : ''; if ($node instanceof eZContentObjectTreeNode) { if ($faIconIni->hasVariable('NodeIcons', $node->attribute('node_id'))) { $data = $faIconIni->variable('NodeIcons', $node->attribute('node_id')); } } else { if ($faIconIni->hasVariable('NodeIcons', $node)) { $data = $faIconIni->variable('NodeIcons', $node); } } $operatorValue = $data; break; case 'children_class_identifiers': $node = $operatorValue; $data = array(); if ($node instanceof eZContentObjectTreeNode) { $search = eZFunctionHandler::execute('ezfind', 'search', array('subtree_array' => array($node->attribute('node_id')), 'limit' => 1, 'as_objects' => false, 'filter' => array('-meta_id_si:' . $node->attribute('contentobject_id')), 'facet' => array(array('field' => 'meta_class_identifier_ms', 'name' => 'class_identifier', 'limit' => 200)))); if (isset($search['SearchExtras'])) { $facets = $search['SearchExtras']->attribute('facet_fields'); $data = array_diff(array_values($facets[0]['nameList']), $namedParameters['exclude']); } } //eZDebug::writeNotice( $data, 'children_class_identifiers' ); $operatorValue = $data; break; case 'json_encode': $operatorValue = json_encode($operatorValue); break; case 'browse_template': $identifiers = array('image', 'image2', 'galleria', 'gallery', 'immagini'); if ($ini->hasVariable('ObjectRelationsMultiupload', 'ClassAttributeIdentifiers')) { $identifiers = $ini->variable('ObjectRelationsMultiupload', 'ClassAttributeIdentifiers'); } if ($operatorValue instanceof eZContentBrowse && $operatorValue->hasAttribute('type') && $operatorValue->attribute('type') == 'AddRelatedObjectListToDataType' && $operatorValue->hasAttribute('action_name')) { $currentAttributeId = str_replace('AddRelatedObject_', '', $operatorValue->attribute('action_name')); $currentAttribute = eZPersistentObject::fetchObject(eZContentObjectAttribute::definition(), null, array("id" => $currentAttributeId), false); if (isset($currentAttribute['contentclassattribute_id'])) { $contentClassAttribute = eZContentClassAttribute::fetch($currentAttribute['contentclassattribute_id']); if ($contentClassAttribute instanceof eZContentClassAttribute && ($contentClassAttribute->attribute('data_type_string') == 'mugoobjectrelationlist' || $contentClassAttribute->attribute('data_type_string') == 'ezobjectrelationlist') && in_array($contentClassAttribute->attribute('identifier'), $identifiers)) { return $operatorValue = 'multiupload.tpl'; } } } elseif ($operatorValue instanceof eZContentBrowse && $operatorValue->hasAttribute('action_name') && $operatorValue->attribute('action_name') == 'MultiUploadBrowse') { return $operatorValue = 'multiupload.tpl'; } $operatorValue = 'default.tpl'; break; case 'multiupload_file_types_string': $availableFileTypes = array(); $availableFileTypesString = ''; if (eZINI::instance('ezmultiupload.ini')->hasGroup('FileTypeSettings_' . $operatorValue)) { $availableFileTypes = eZINI::instance('ezmultiupload.ini')->variable('FileTypeSettings_' . $operatorValue, 'FileType'); } if (!empty($availableFileTypes)) { $availableFileTypesString = implode(';', $availableFileTypes); } $operatorValue = $availableFileTypesString; break; case 'multiupload_file_types_string_from_attribute': $availableFileTypesString = ''; $attribute = $operatorValue; if ($attribute instanceof eZContentObjectAttribute) { $identifiers = array(); if ($ini->hasVariable('ObjectRelationsMultiupload', 'ClassAttributeIdentifiers')) { $identifier = $attribute->attribute('contentclass_attribute_identifier'); $identifiers = $ini->variable('ObjectRelationsMultiupload', 'ClassAttributeIdentifiers'); if (in_array($identifier, $identifiers)) { $availableFileTypes = array(); $groups = $ini->group('ObjectRelationsMultiuploadFileTypesGroups'); foreach ($groups as $groupName => $fileType) { $groupIdentifiers = $ini->variable('ObjectRelationsMultiuploadFileTypes_' . $groupName, 'Identifiers'); if (in_array($identifier, $groupIdentifiers)) { $availableFileTypesString = $fileType; } } } } } $operatorValue = $availableFileTypesString; break; case 'session_id': $operatorValue = session_id(); break; case 'session_name': $operatorValue = session_name(); break; case 'user_session_hash': $operatorValue = ''; break; case 'developer_warning': $res = false; $user = eZUser::currentUser(); if ($user->attribute('login') == 'admin') { $templates = $tpl->templateFetchList(); $data = array_pop($templates); $res = '<div class="developer-warning alert alert-danger"><strong>Avviso per lo sviluppatore</strong>:<br /><code>' . $data . '</code><br />' . $namedParameters['text'] . '</div>'; } $operatorValue = $res; break; case 'editor_warning': $res = false; $user = eZUser::currentUser(); if ($user->hasAccessTo('content', 'dashboard')) { $res = '<div class="editor-warning alert alert-warning"><strong>Avviso per l\'editor</strong>: ' . $namedParameters['text'] . '</div>'; } $operatorValue = $res; break; case 'appini': if ($appini->hasVariable($namedParameters['block'], $namedParameters['setting'])) { $rs = $appini->variable($namedParameters['block'], $namedParameters['setting']); } else { $rs = $namedParameters['default']; } $operatorValue = $rs; break; case 'has_attribute': case 'attribute': if ($operatorName == 'attribute' && $namedParameters['show_values'] == 'show') { $legacy = new eZTemplateAttributeOperator(); $parameters = $legacy->namedParameterList(); if (isset($parameters['attribute'])) { $parameters = $parameters['attribute']; } $legacyParameters = array(); foreach (array_keys($parameters) as $key) { switch ($key) { case "as_html": $legacyParameters[$key] = true; break; default: $legacyParameters[$key] = isset($namedParameters[$key]) ? $namedParameters[$key] : false; } } $legacy->modify($tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, $operatorValue, $legacyParameters, null); return $operatorValue; } return $operatorValue = $this->hasContentObjectAttribute($operatorValue, $namedParameters['show_values']); break; case 'set_defaults': if (is_array($namedParameters['variables'])) { foreach ($namedParameters['variables'] as $key => $value) { if (!$tpl->hasVariable($key, $currentNamespace)) { $tpl->setLocalVariable($key, $value, $currentNamespace); } } } break; case 'unset_defaults': foreach ($namedParameters['variables'] as $key) { $tpl->unsetLocalVariable($key, $currentNamespace); // if ( isset( $tpl->Variables[$rootNamespace] ) && // array_key_exists( $key, $tpl->Variables[$rootNamespace] ) ) // { // $tpl->unsetVariable( $key, $rootNamespace ); // } } break; //@todo add cache! //@todo add cache! case 'include_cache': $tpl = eZTemplate::factory(); foreach ($namedParameters['variables'] as $key => $value) { $tpl->setVariable($key, $value); } $operatorValue = $tpl->fetch('design:' . $namedParameters['template']); break; case 'find_global_layout': $result = false; $node = $operatorValue; if (is_numeric($node)) { $node = eZContentObjectTreeNode::fetch($node); } if (!$node) { return $operatorValue = $result; } $pathArray = $node->attribute('path_array'); $nodesParams = array(); foreach ($pathArray as $pathNodeID) { if ($pathNodeID < eZINI::instance('content.ini')->variable('NodeSettings', 'RootNode') || $pathNodeID == $node->attribute('node_id')) { continue; } else { $nodesParams[] = array('ParentNodeID' => $pathNodeID, 'ResultID' => 'ezcontentobject_tree.node_id', 'ClassFilterType' => 'include', 'ClassFilterArray' => $ini->variable('GlobalLayout', 'Classes'), 'Depth' => 1, 'DepthOperator' => 'eq', 'AsObject' => false); } } //eZDebug::writeWarning( var_export($nodesParams,1), __METHOD__); $findNodes = eZContentObjectTreeNode::subTreeMultiPaths($nodesParams, array('SortBy' => array('node_id', false))); $sortByParentNodeID = array(); if (!empty($findNodes)) { foreach ($findNodes as $findNode) { $sortByParentNodeID[$findNode['parent_node_id']] = $findNode; } krsort($sortByParentNodeID); $result = array_shift($sortByParentNodeID); $result = eZContentObjectTreeNode::makeObjectsArray(array($result)); if (!empty($result)) { $result = $result[0]; } } return $operatorValue = $result; case 'redirect': $url = $namedParameters['url']; header('Location: ' . $url); break; case 'sort_nodes': $sortNodes = array(); if (!empty($operatorValue) && is_array($operatorValue)) { $nodes = $operatorValue; foreach ($nodes as $node) { if (!$node instanceof eZContentObjectTreeNode) { continue; } $object = $node->object(); switch ($namedParameters['by']) { case 'published': default: $sortby = $object->attribute('published'); break; } $sortNodes[$sortby] = $node; } ksort($sortNodes); if ($namedParameters['order'] == 'desc') { $sortNodes = array_reverse($sortNodes); } } return $operatorValue = $sortNodes; break; case 'to_query_string': if (!empty($namedParameters['param'])) { $value = $namedParameters['param']; } else { $value = $operatorValue; } $string = http_build_query($value); return $operatorValue = $string; break; case 'has_abstract': case 'abstract': $node = $operatorValue; if (!$node instanceof eZContentObjectTreeNode && isset($namedParameters['node'])) { $node = $namedParameters['node']; if (is_numeric($node)) { $node = eZContentObjectTreeNode::fetch($node); } } return $operatorValue = $this->getAbstract($node, $operatorName == 'has_abstract'); break; case 'subsite': $path = $this->getPath($tpl); $result = false; $identifiers = $ini->hasVariable('Subsite', 'Classes') ? $ini->variable('Subsite', 'Classes') : array(); $root = eZContentObjectTreeNode::fetch(eZINI::instance('content.ini')->variable('NodeSettings', 'RootNode')); if (in_array($root->attribute('class_identifier'), $identifiers)) { $result = $root; } foreach ($path as $item) { if (isset($item['node_id'])) { $node = eZContentObjectTreeNode::fetch($item['node_id']); if (in_array($node->attribute('class_identifier'), $identifiers)) { $result = $node; } } } return $operatorValue = $result; break; case 'in_subsite': $result = false; $identifiers = $ini->hasVariable('Subsite', 'Classes') ? $ini->variable('Subsite', 'Classes') : array(); $root = eZContentObjectTreeNode::fetch(eZINI::instance('content.ini')->variable('NodeSettings', 'RootNode')); if (in_array($root->attribute('class_identifier'), $identifiers)) { $result = $root; } $node = $operatorValue; if (is_numeric($node)) { $node = eZContentObjectTreeNode::fetch($node); } if (!$node) { return $operatorValue = $result; } foreach ($node->attribute('path') as $item) { if (in_array($item->attribute('class_identifier'), $identifiers)) { $result = $item; break; } } return $operatorValue = $result; break; case 'is_subsite': $identifiers = $ini->hasVariable('Subsite', 'Classes') ? $ini->variable('Subsite', 'Classes') : array(); $inSubsite = false; $node = $operatorValue; if (is_numeric($node)) { $node = eZContentObjectTreeNode::fetch($node); } if (!$node instanceof eZContentObjectTreeNode) { $inSubsite = false; } elseif (in_array($node->attribute('class_identifier'), $identifiers)) { $inSubsite = true; } return $operatorValue = $inSubsite; break; case 'is_in_subsite': if ($operatorValue instanceof eZContentObject) { $nodes = $operatorValue->attribute('assigned_nodes'); foreach ($nodes as $node) { if ($this->isNodeInCurrentSiteaccess($node)) { return $operatorValue; } } } elseif ($operatorValue instanceof eZContentObjectTreeNode) { if ($this->isNodeInCurrentSiteaccess($operatorValue)) { return $operatorValue; } } return $operatorValue = false; case 'section_color': $path = $this->getPath($tpl); $color = false; $attributesIdentifiers = $ini->hasVariable('Color', 'Attributes') ? $ini->variable('Color', 'Attributes') : array(); foreach ($path as $item) { if (isset($item['node_id'])) { $node = eZContentObjectTreeNode::fetch($item['node_id']); /** @var eZContentObjectAttribute[] $attributes */ $attributes = $node->attribute('object')->fetchAttributesByIdentifier($attributesIdentifiers); if (is_array($attributes)) { foreach ($attributes as $attribute) { if ($attribute->hasContent()) { $color = $attribute->content(); } } } } } return $operatorValue = $color; break; case 'oc_shorten': $search = array('@<script[^>]*?>.*?</script>@si', '@<style[^>]*?>.*?</style>@siU'); $operatorValue = preg_replace($search, '', $operatorValue); $operatorValue = strip_tags($operatorValue, $namedParameters['allowable_tags']); $operatorValue = preg_replace('!\\s+!', ' ', $operatorValue); $operatorValue = str_replace(' ', ' ', $operatorValue); $strlenFunc = function_exists('mb_strlen') ? 'mb_strlen' : 'strlen'; $operatorLength = $strlenFunc($operatorValue); if ($operatorLength > $namedParameters['chars_to_keep']) { if ($namedParameters['trim_type'] === 'middle') { $appendedStrLen = $strlenFunc($namedParameters['str_to_append']); if ($namedParameters['chars_to_keep'] > $appendedStrLen) { $chop = $namedParameters['chars_to_keep'] - $appendedStrLen; $middlePos = (int) ($chop / 2); $leftPartLength = $middlePos; $rightPartLength = $chop - $middlePos; $operatorValue = trim($this->custom_substr($operatorValue, 0, $leftPartLength) . $namedParameters['str_to_append'] . $this->custom_substr($operatorValue, $operatorLength - $rightPartLength, $rightPartLength)); } else { $operatorValue = $namedParameters['str_to_append']; } } else { $chop = $namedParameters['chars_to_keep'] - $strlenFunc($namedParameters['str_to_append']); $operatorValue = $this->custom_substr($operatorValue, 0, $chop); $operatorValue = trim($operatorValue); if ($operatorLength > $chop) { $operatorValue = $operatorValue . $namedParameters['str_to_append']; } } } if ($namedParameters['allowable_tags'] !== '') { $operatorValue = $this->force_balance_tags($operatorValue); } break; case 'cookieset': $key = isset($namedParameters['cookie_name']) ? $namedParameters['cookie_name'] : false; $prefix = $ini->variable('CookiesSettings', 'CookieKeyPrefix'); $key = "{$prefix}{$key}"; // Get our parameters: $value = $namedParameters['cookie_val']; $expire = $namedParameters['expiry_time']; // Check and calculate the expiry time: if ($expire > 0) { // It is a number of days: $expire = time() + 60 * 60 * 24 * $expire; } setcookie($key, $value, $expire, '/'); eZDebug::writeDebug('setcookie(' . $key . ', ' . $value . ', ' . $expire . ', "/")', __METHOD__); return $operatorValue = false; break; case 'cookieget': $key = isset($namedParameters['cookie_name']) ? $namedParameters['cookie_name'] : false; $prefix = $ini->variable('CookiesSettings', 'CookieKeyPrefix'); $key = "{$prefix}{$key}"; $operatorValue = false; if (isset($_COOKIE[$key])) { $operatorValue = $_COOKIE[$key]; } return $operatorValue; break; case 'check_and_set_cookies': $prefix = $ini->variable('CookiesSettings', 'CookieKeyPrefix'); $http = eZHTTPTool::instance(); $return = array(); if ($ini->hasVariable('Cookies', 'Cookies')) { $cookies = $ini->variable('Cookies', 'Cookies'); foreach ($cookies as $key) { $_key = "{$prefix}{$key}"; $default = isset($_COOKIE[$_key]) ? $_COOKIE[$_key] : $ini->variable($key, 'Default'); $value = $http->variable($key, $default); setcookie($_key, $value, time() + 60 * 60 * 24 * 365, '/'); $return[$key] = $value; } } $operatorValue = $return; break; case 'checkbrowser': @(require 'extension/ocoperatorscollection/lib/browser_detection.php'); if (function_exists('browser_detection')) { $full = browser_detection('full_assoc', 2); $operatorValue = $full; } else { eZDebug::writeError("function browser_detection not found", __METHOD__); } break; case 'is_deprecated_browser': $browser = $namedParameters['browser_array']; if ($browser['browser_working'] == 'ie' && $browser['browser_number'] > '7.0') { $operatorValue = true; } $operatorValue = false; break; case 'slugize': $operatorValue = $this->sanitize_title_with_dashes($operatorValue); break; } return false; }