public static function instance(eZContentClass $class) { if (!$class instanceof eZContentClass) { throw new Exception("Class not found (" . __METHOD__ . ")"); } if (!isset(self::$instances[$class->attribute('identifier')])) { self::$instances[$class->attribute('identifier')] = new OCClassExtraParametersManager($class); } return self::$instances[$class->attribute('identifier')]; }
/** * Store the modification made to an eZContentClass. * * @param eZContentClass Content class to be stored. * @param array[eZContentClassAttribute] Attributes of the new content class. * @param array Unordered view parameters */ public function store(eZContentClass $class, array $attributes, array &$unorderedParameters) { $oldClassAttributes = $class->fetchAttributes($class->attribute('id'), true, eZContentClass::VERSION_STATUS_DEFINED); // Delete object attributes which have been removed. foreach ($oldClassAttributes as $oldClassAttribute) { $attributeExists = false; $oldClassAttributeID = $oldClassAttribute->attribute('id'); foreach ($class->fetchAttributes() as $newClassAttribute) { if ($oldClassAttributeID == $newClassAttribute->attribute('id')) { $attributeExists = true; break; } } if (!$attributeExists) { foreach (eZContentObjectAttribute::fetchSameClassAttributeIDList($oldClassAttributeID) as $objectAttribute) { $objectAttribute->removeThis($objectAttribute->attribute('id')); } } } $class->storeDefined($attributes); // Add object attributes which have been added. foreach ($attributes as $newClassAttribute) { $attributeExists = false; $newClassAttributeID = $newClassAttribute->attribute('id'); foreach ($oldClassAttributes as $oldClassAttribute) { if ($newClassAttributeID == $oldClassAttribute->attribute('id')) { $attributeExists = true; break; } } if (!$attributeExists) { $newClassAttribute->initializeObjectAttributes($objects); } } }
/** * Create a scheduled script that will store the modification made to an eZContentClass. * * @param eZContentClass Content class to be stored. * @param array[eZContentClassAttribute] Attributes of the new content class. * @param array Unordered view parameters */ public function store(eZContentClass $class, array $attributes, array &$unorderedParameters) { $script = eZScheduledScript::create('syncobjectattributes.php', eZINI::instance('ezscriptmonitor.ini')->variable('GeneralSettings', 'PhpCliCommand') . ' extension/ezscriptmonitor/bin/' . eZScheduledScript::SCRIPT_NAME_STRING . ' -s ' . eZScheduledScript::SITE_ACCESS_STRING . ' --classid=' . $class->attribute('id')); $script->store(); $unorderedParameters['ScheduledScriptID'] = $script->attribute('id'); $class->storeVersioned($attributes, eZContentClass::VERSION_STATUS_MODIFIED); }
protected function syncGroups() { $remote = $this->getRemote(); if ($remote === null) { throw new Exception("Classe remota non trovata"); } $this->syncAllGroups($remote); $locale = $this->currentClass; /** @var eZContentClassClassGroup[] $localGroups */ $localGroups = $locale->fetchGroupList(); //$localGroupsNames = array(); //$remoteGroupsNames = array(); foreach ($localGroups as $group) { /** @var eZContentClassGroup $classGroup */ $classGroup = eZContentClassGroup::fetchByName($group->attribute('group_name')); if ($classGroup) { eZContentClassClassGroup::removeGroup($this->currentClass->attribute('id'), $this->currentClass->attribute('version'), $classGroup->attribute('id')); } } foreach ($remote->InGroups as $group) { /** @var eZContentClassGroup $classGroup */ $classGroup = eZContentClassGroup::fetchByName($group->GroupName); if ($classGroup) { $ingroup = eZContentClassClassGroup::create($this->currentClass->attribute('id'), $this->currentClass->attribute('version'), $classGroup->attribute('id'), $classGroup->attribute('name')); $ingroup->store(); } } //$groups = $this->currentClass->attribute( 'ingroup_list' ); //if ( count( $groups ) == 0 ) //{ // //@todo //} }
/** * @return string */ protected function getForm() { $classKeyArray = array(array('class_identifier', $this->contentClass->attribute('identifier'))); $tpl = eZTemplate::factory(); $tpl->setVariable('class', $this->contentClass); $tpl->setVariable('remote_class_id', $this->remoteContentClassDefinition->ID); $tpl->setVariable('client', $this); $attributeFields = array(); $dataMap = $this->contentClass->attribute('data_map'); $disabled = array(); if (eZINI::instance('ocsearchtools.ini')->hasVariable('RemoteClassSearchFormSettings', 'DisabledAttributes')) { $disabled = eZINI::instance('ocsearchtools.ini')->variable('RemoteClassSearchFormSettings', 'DisabledAttributes'); } /** @var $dataMap eZContentClassAttribute[] */ foreach ($dataMap as $attribute) { if (!in_array($this->contentClass->attribute('identifier') . '/' . $attribute->attribute('identifier'), $disabled) && $attribute->attribute('is_searchable')) { if (isset($this->remoteContentClassDefinition->DataMap[0]->{$attribute->attribute('identifier')})) { $attribute->setAttribute('data_type_string', $this->remoteContentClassDefinition->DataMap[0]->{$attribute->attribute('identifier')}->DataTypeString); $inputField = OCRemoteClassSearchFormAttributeField::instance($attribute, $this->remoteContentClassDefinition->DataMap[0]->{$attribute->attribute('identifier')}, $this); $keyArray = array(array('class_identifier', $this->contentClass->attribute('identifier')), array('attribute_identifier', $inputField->contentClassAttribute->attribute('identifier'))); $tpl = eZTemplate::factory(); $tpl->setVariable('class', $this->contentClass); $tpl->setVariable('attribute', $inputField->contentClassAttribute); $tpl->setVariable('input', $inputField); $res = eZTemplateDesignResource::instance(); $res->setKeys($keyArray); $templateName = $inputField->contentClassAttribute->attribute('data_type_string'); $attributeFields[$inputField->attribute('id')] = $tpl->fetch('design:class_search_form/datatypes/' . $templateName . '.tpl'); } } } $tpl->setVariable('attribute_fields', $attributeFields); $parameters = array('action' => 'search'); $tpl->setVariable('parameters', $parameters); $formAction = $this->attributes['definition']['ClientBasePath']; eZURI::transformURI($formAction); $tpl->setVariable('form_action', $formAction); $res = eZTemplateDesignResource::instance(); $res->setKeys($classKeyArray); return $tpl->fetch('design:repository/contentclass_client/remote_class_search_form.tpl'); }
public static function getObjectsWithCollectedInformation($offset = 0, $limit = 10) { $db = eZDB::instance(); $objects = $db->arrayQuery('SELECT DISTINCT ezinfocollection.contentobject_id, ezcontentobject.name, ezcontentobject_tree.main_node_id, ezcontentclass.*, ezcontentclass.identifier AS class_identifier FROM ezinfocollection, ezcontentobject, ezcontentobject_tree, ezcontentclass WHERE ezinfocollection.contentobject_id=ezcontentobject.id AND ezcontentobject.contentclass_id=ezcontentclass.id AND ezinfocollection.contentobject_id=ezcontentobject_tree.contentobject_id', array('limit' => (int) $limit, 'offset' => (int) $offset)); foreach (array_keys($objects) as $i) { $collections = eZInformationCollection::fetchCollectionsList((int) $objects[$i]['contentobject_id'], false, false, false, false, false); $class = new eZContentClass($objects[$i]); $objects[$i]['class_name'] = $class->attribute('name'); $first = $collections[0]['created']; $last = $first; for ($j = 0; $j < count($collections); $j++) { $current = $collections[$j]['created']; if ($current < $first) { $first = $current; } if ($current > $last) { $last = $current; } } $objects[$i]['first_collection'] = $first; $objects[$i]['last_collection'] = $last; $objects[$i]['collections'] = count($collections); } return $objects; }
/** * Returns a struct containing the following values: * - limit the number of element by page * - offset the current offset * - items array, each element contains * - has_child boolean * - can_create boolean * - node eZContentObjectTreeNode * - has_prev boolean, true if there's a previous page * - has_next boolean, true if there's a next page * * @param eZContentObjectTreeNode $start the node where the browse will start * @param eZContentClass $class class of the object to be created * @param int $offset * @return array */ private static function getBrowseItems( eZContentObjectTreeNode $start, eZContentClass $class, $offset = 0 ) { $result = array( 'limit' => 10, 'offset' => $offset, 'items' => array(), 'has_prev' => ( $offset != 0 ), 'has_next' => false ); $containerClasses = eZPersistentObject::fetchObjectList( eZContentClass::definition(), null, array( 'version' => eZContentClass::VERSION_STATUS_DEFINED, 'is_container' => 1 ) ); $classFilterArray = array(); foreach ( $containerClasses as $c ) { $classFilterArray[] = $c->attribute( 'identifier' ); } $children = $start->subTree( array( 'ClassFilterArray' => $classFilterArray, 'ClassFilterType' => 'include', 'Depth' => 1, 'Limit' => $result['limit'], 'Offset' => $offset ) ); $count = $start->subTreeCount( array( 'ClassFilterArray' => $classFilterArray, 'ClassFilterType' => 'include', 'Depth' => 1 ) ); if ( $count > ( $offset + $result['limit'] ) ) { $result['has_next'] = true; } foreach( $children as $node ) { $elt = array(); $elt['node'] = $node; $canCreateClassist = $node->canCreateClassList(); foreach( $canCreateClassist as $c ) { if ( $c['id'] == $class->attribute( 'id' ) ) { $elt['can_create'] = true; break; } } if ( !isset( $elt['can_create'] ) ) { $elt['can_create'] = false; } $childrenContainerCount = $node->subTreeCount( array( 'ClassFilterArray' => $classFilterArray, 'ClassFilterType' => 'include', 'Depth' => 1 ) ); $elt['has_child'] = ( $childrenContainerCount > 0 ); $result['items'][] = $elt; } return $result; }
/** * Create Class element. * * @param DOMDocument Owner DOMDocument * @param eZContentClass eZContentClass object. * * @return DOMElement Class DOMDocument, example: * * <Class ID="12" identifier="comment" primaryLanguage="eng-GB"> * <NameList> * <Name locale="eng-GB">eZ Publish rocks</Name> * </NameList> * </Class> */ protected function createClassDOMElement(DOMDocument $domDocument, eZContentClass $class) { $classElement = $domDocument->createElement('Class'); // Set attributes $classElement->setAttribute('ID', $class->attribute('id')); $classElement->setAttribute('primaryLanguage', $class->attribute('top_priority_language_locale')); $classElement->setAttribute('identifier', $class->attribute('identifier')); // Add Language list. $classElement->appendChild($this->createNameListDOMElement($domDocument, $class->NameList)); return $classElement; }
protected function checkAccess() { $user = eZUser::currentUser(); $userID = $user->attribute('contentobject_id'); $accessResult = $user->hasAccessTo('exportas', $this->functionName); $accessWord = $accessResult['accessWord']; if ($accessWord == 'yes') { return true; } else { if ($accessWord == 'no') { return false; } else { $policies =& $accessResult['policies']; $access = 'denied'; foreach (array_keys($policies) as $pkey) { $limitationArray =& $policies[$pkey]; if ($access == 'allowed') { break; } $limitationList = array(); if (isset($limitationArray['Subtree'])) { $checkedSubtree = false; } else { $checkedSubtree = true; $accessSubtree = false; } if (isset($limitationArray['Node'])) { $checkedNode = false; } else { $checkedNode = true; $accessNode = false; } foreach (array_keys($limitationArray) as $key) { $access = 'denied'; switch ($key) { case 'Class': if (!$this->mainClass) { $access = 'denied'; $limitationList = array('Limitation' => $key, 'Required' => $limitationArray[$key]); } elseif (in_array($this->mainClass->attribute('id'), $limitationArray[$key])) { $access = 'allowed'; } else { $access = 'denied'; $limitationList = array('Limitation' => $key, 'Required' => $limitationArray[$key]); } break; case 'Section': case 'User_Section': if (in_array($this->mainObject->attribute('section_id'), $limitationArray[$key])) { $access = 'allowed'; } else { $access = 'denied'; $limitationList = array('Limitation' => $key, 'Required' => $limitationArray[$key]); } break; case 'Node': $accessNode = false; $mainNodeID = $this->mainObject->attribute('main_node_id'); foreach ($limitationArray[$key] as $nodeID) { $node = eZContentObjectTreeNode::fetch($nodeID, false, false); $limitationNodeID = $node['main_node_id']; if ($mainNodeID == $limitationNodeID) { $access = 'allowed'; $accessNode = true; break; } } $checkedNode = true; break; default: if (strncmp($key, 'StateGroup_', 11) === 0) { if (count(array_intersect($limitationArray[$key], $this->mainObject->attribute('state_id_array'))) == 0) { $access = 'denied'; $limitationList = array('Limitation' => $key, 'Required' => $limitationArray[$key]); } else { $access = 'allowed'; } } } if ($access == 'denied') { break; } } $policyList[] = array('PolicyID' => $pkey, 'LimitationList' => $limitationList); } if ($access == 'denied') { return array('FunctionRequired' => array('Module' => 'exportas', 'Function' => $this->functionName), 'PolicyList' => $policyList); } else { return true; } } } }