/** * @dataProvider providerCreateWithValidIdentifier */ public function testCreateWithvalidIdentifier($identifier) { $row = array('identifier' => $identifier); $stateGroup = new eZContentObjectStateGroup($row); $trans = $stateGroup->translationByLocale('eng-GB'); $trans->setAttribute('name', $identifier); $messages = array(); $this->assertTrue($stateGroup->isValid($messages), "Valid state group identifier '{$identifier}' was refused, " . var_export($messages, true)); }
function attribute($attr) { switch ($attr) { case 'state_group': return eZContentObjectStateGroup::fetchByOffset(); default: return eZWorkflowEventType::attribute($attr); } }
function setParameters($parm_array) { // Make sure no unsupported parameters are specified $supported_parameters = array('state_group', 'state'); $parm_keys = array_keys($parm_array); $unsupported_list = array_diff($parm_keys, $supported_parameters); if (isset($unsupported_list[0])) { return "Unsupported parameter '{$unsupported_list[0]}' in operation"; } // Fetch state id's from the identifiers $state_group = eZContentObjectStateGroup::fetchByIdentifier($parm_array['state_group']); if ($state_group === false) { return 'Missing or illegal state group identifier'; } $state_group_id = $state_group->attribute('id'); $state = eZContentObjectState::fetchByIdentifier($parm_array['state'], $state_group_id); if ($state === false) { return 'Missing or illegal state identifier'; } $this->state_id = $state->attribute('id'); return true; }
<?php /** * @copyright Copyright (C) 1999-2012 eZ Systems AS. All rights reserved. * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2 * @version 2012.8 * @package kernel */ $Module = $Params['Module']; $GroupIdentifier = $Params['GroupIdentifier']; $StateIdentifier = $Params['StateIdentifier']; $LanguageCode = $Params['Language']; $group = eZContentObjectStateGroup::fetchByIdentifier($GroupIdentifier); if (!is_object($group)) { return $Module->handleError(eZError::KERNEL_NOT_FOUND, 'kernel'); } $state = $group->stateByIdentifier($StateIdentifier); if (!is_object($state)) { return $Module->handleError(eZError::KERNEL_NOT_FOUND, 'kernel'); } $currentAction = $Module->currentAction(); if ($currentAction == 'Edit') { return $Module->redirectTo("state/edit/{$GroupIdentifier}/{$StateIdentifier}"); } if ($LanguageCode) { $state->setCurrentLanguage($LanguageCode); } $tpl = eZTemplate::factory(); $tpl->setVariable('group', $group); $tpl->setVariable('state', $state); $Result = array('content' => $tpl->fetch('design:state/view.tpl'), 'path' => array(array('url' => false, 'text' => ezpI18n::tr('kernel/state', 'State')), array('url' => 'state/group/' . $group->attribute('identifier'), 'text' => $group->attribute('identifier')), array('url' => false, 'text' => $state->attribute('identifier'))));
<?php /** * @copyright Copyright (C) 1999-2013 eZ Systems AS. All rights reserved. * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2 * @version 2013.11 * @package kernel */ $Module = array('name' => 'eZContentObjectState', 'variable_params' => false); $ViewList = array(); $ViewList['assign'] = array('default_navigation_part' => 'ezsetupnavigationpart', 'script' => 'assign.php', 'params' => array('ObjectID', 'SelectedStateID'), 'functions' => array('assign'), 'single_post_actions' => array('AssignButton' => 'Assign'), 'post_action_parameters' => array('Assign' => array('ObjectID' => 'ObjectID', 'SelectedStateIDList' => 'SelectedStateIDList', 'RedirectRelativeURI' => 'RedirectRelativeURI'))); $ViewList['groups'] = array('default_navigation_part' => 'ezsetupnavigationpart', 'script' => 'groups.php', 'params' => array(), 'functions' => array('administrate'), 'unordered_params' => array('offset' => 'Offset'), 'single_post_actions' => array('CreateButton' => 'Create', 'RemoveButton' => 'Remove'), 'post_action_parameters' => array('Remove' => array('RemoveIDList' => 'RemoveIDList'))); $ViewList['group'] = array('default_navigation_part' => 'ezsetupnavigationpart', 'script' => 'group.php', 'params' => array('GroupIdentifier', 'Language'), 'functions' => array('administrate'), 'single_post_actions' => array('CreateButton' => 'Create', 'UpdateOrderButton' => 'UpdateOrder', 'EditButton' => 'Edit', 'RemoveButton' => 'Remove'), 'post_action_parameters' => array('UpdateOrder' => array('Order' => 'Order'), 'Remove' => array('RemoveIDList' => 'RemoveIDList'))); $ViewList['group_edit'] = array('default_navigation_part' => 'ezsetupnavigationpart', 'script' => 'group_edit.php', 'ui_context' => 'edit', 'params' => array('GroupIdentifier'), 'functions' => array('administrate'), 'single_post_actions' => array('StoreButton' => 'Store', 'CancelButton' => 'Cancel')); $ViewList['view'] = array('default_navigation_part' => 'ezsetupnavigationpart', 'script' => 'view.php', 'params' => array('GroupIdentifier', 'StateIdentifier', 'Language'), 'functions' => array('administrate'), 'single_post_actions' => array('EditButton' => 'Edit')); $ViewList['edit'] = array('default_navigation_part' => 'ezsetupnavigationpart', 'script' => 'edit.php', 'ui_context' => 'edit', 'params' => array('GroupIdentifier', 'StateIdentifier'), 'functions' => array('administrate'), 'single_post_actions' => array('StoreButton' => 'Store', 'CancelButton' => 'Cancel')); $ClassID = array('name' => 'Class', 'values' => array(), 'class' => 'eZContentClass', 'function' => 'fetchList', 'parameter' => array(0, false, false, array('name' => 'asc'))); $SectionID = array('name' => 'Section', 'values' => array(), 'class' => 'eZSection', 'function' => 'fetchList', 'parameter' => array(false)); $Assigned = array('name' => 'Owner', 'values' => array(array('Name' => 'Self', 'value' => '1'))); $AssignedGroup = array('name' => 'Group', 'single_select' => true, 'values' => array(array('Name' => 'Self', 'value' => '1'))); $Node = array('name' => 'Node', 'values' => array()); $Subtree = array('name' => 'Subtree', 'values' => array()); $stateLimitations = eZContentObjectStateGroup::limitations(); $NewState = array('name' => 'NewState', 'values' => array(), 'class' => 'eZContentObjectState', 'function' => 'limitationList', 'parameter' => array()); $FunctionList = array(); $FunctionList['administrate'] = array(); $FunctionList['assign'] = array('Class' => $ClassID, 'Section' => $SectionID, 'Owner' => $Assigned, 'Group' => $AssignedGroup, 'Node' => $Node, 'Subtree' => $Subtree); $FunctionList['assign'] = array_merge($FunctionList['assign'], $stateLimitations, array('NewState' => $NewState));
public function group() { return eZContentObjectStateGroup::fetchById($this->GroupID); }
<?php /** * @copyright Copyright (C) 1999-2012 eZ Systems AS. All rights reserved. * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2 * @version 2012.6 * @package kernel */ $GroupIdentifier = $Params['GroupIdentifier']; $Module = $Params['Module']; $group = $GroupIdentifier === null ? new eZContentObjectStateGroup() : eZContentObjectStateGroup::fetchByIdentifier($GroupIdentifier); if (!is_object($group)) { return $Module->handleError(eZError::KERNEL_NOT_FOUND, 'kernel'); } if ($group->isInternal()) { return $Module->handleError(eZError::KERNEL_ACCESS_DENIED, 'kernel'); } $tpl = eZTemplate::factory(); $currentAction = $Module->currentAction(); if ($currentAction == 'Cancel') { return $Module->redirectTo('state/groups'); } else { if ($currentAction == 'Store') { $group->fetchHTTPPersistentVariables(); $messages = array(); $isValid = $group->isValid($messages); if ($isValid) { $group->store(); if ($GroupIdentifier === null) { return $Module->redirectTo('state/group/' . $group->attribute('identifier')); } else {
/** * * * @param integer $id */ public static function removeByID($id) { $db = eZDB::instance(); $db->begin(); $states = eZContentObjectState::fetchByGroup($id); foreach ($states as $state) { eZContentObjectState::removeByID($state->attribute('id')); } eZPersistentObject::removeObject(eZContentObjectStateGroupLanguage::definition(), array('contentobject_state_group_id' => $id)); eZPersistentObject::removeObject(eZContentObjectStateGroup::definition(), array('id' => $id)); $db->commit(); }
/** * Creates an array with sorting SQL strings to be appended to a query * * @param array|bool $sortList * @param string $treeTableName * @param bool $allowCustomColumns * @return array */ static function createSortingSQLStrings($sortList, $treeTableName = 'ezcontentobject_tree', $allowCustomColumns = false) { $sortingInfo = array('sortCount' => 0, 'sortingFields' => " path_string ASC", 'attributeJoinCount' => 0, 'attributeFromSQL' => "", 'attributeTargetSQL' => "", 'attributeWhereSQL' => ""); if ($sortList and is_array($sortList) and count($sortList) > 0) { if (count($sortList) > 1 and !is_array($sortList[0])) { $sortList = array($sortList); } $sortingFields = ''; $sortCount = 0; $attributeJoinCount = 0; $stateJoinCount = 0; $attributeFromSQL = ""; $attributeWhereSQL = ""; $datatypeSortingTargetSQL = ""; foreach ($sortList as $sortBy) { if (is_array($sortBy) and count($sortBy) > 0) { if ($sortCount > 0) { $sortingFields .= ', '; } $sortField = $sortBy[0]; switch ($sortField) { case 'path': $sortingFields .= 'path_string'; break; case 'path_string': $sortingFields .= 'path_identification_string'; break; case 'published': $sortingFields .= 'ezcontentobject.published'; break; case 'modified': $sortingFields .= 'ezcontentobject.modified'; break; case 'modified_subnode': $sortingFields .= 'modified_subnode'; break; case 'section': $sortingFields .= 'ezcontentobject.section_id'; break; case 'node_id': $sortingFields .= $treeTableName . '.node_id'; break; case 'contentobject_id': $sortingFields .= 'ezcontentobject.id'; break; case 'depth': $sortingFields .= 'depth'; break; case 'class_identifier': $sortingFields .= 'ezcontentclass.identifier'; break; case 'class_name': $classNameFilter = eZContentClassName::sqlFilter(); $sortingFields .= 'contentclass_name'; $datatypeSortingTargetSQL .= ", {$classNameFilter['nameField']} AS contentclass_name"; $attributeFromSQL .= " INNER JOIN {$classNameFilter['from']} ON ({$classNameFilter['where']})"; break; case 'priority': $sortingFields .= $treeTableName . '.priority'; break; case 'name': $sortingFields .= 'ezcontentobject_name.name'; break; case 'attribute': $classAttributeID = $sortBy[2]; if (!is_numeric($classAttributeID)) { $classAttributeID = eZContentObjectTreeNode::classAttributeIDByIdentifier($classAttributeID); } $contentAttributeTableAlias = "a{$attributeJoinCount}"; $datatypeFromSQL = "ezcontentobject_attribute {$contentAttributeTableAlias}"; $datatypeWhereSQL = "\n {$contentAttributeTableAlias}.contentobject_id = ezcontentobject.id AND\n {$contentAttributeTableAlias}.contentclassattribute_id = {$classAttributeID} AND\n {$contentAttributeTableAlias}.version = ezcontentobject.current_version AND"; $datatypeWhereSQL .= eZContentLanguage::sqlFilter($contentAttributeTableAlias, 'ezcontentobject'); $dataType = eZDataType::create(eZContentObjectTreeNode::dataTypeByClassAttributeID($classAttributeID)); if (is_object($dataType) && $dataType->customSorting()) { $params = array(); $params['contentobject_attr_id'] = "{$contentAttributeTableAlias}.id"; $params['contentobject_attr_version'] = "{$contentAttributeTableAlias}.version"; $params['table_alias_suffix'] = "{$attributeJoinCount}"; $sql = $dataType->customSortingSQL($params); $datatypeFromSQL .= " INNER JOIN {$sql['from']} ON ({$sql['where']})"; $datatypeSortingFieldSQL = $sql['sorting_field']; $datatypeSortingTargetSQL .= ', ' . $sql['sorting_field']; } else { // Look up datatype for standard sorting $sortKeyType = eZContentObjectTreeNode::sortKeyByClassAttributeID($classAttributeID); switch ($sortKeyType) { case 'string': $sortKey = 'sort_key_string'; break; case 'int': default: $sortKey = 'sort_key_int'; break; } $datatypeSortingFieldSQL = "a{$attributeJoinCount}.{$sortKey}"; $datatypeSortingTargetSQL .= ', ' . $datatypeSortingFieldSQL; } $sortingFields .= "{$datatypeSortingFieldSQL}"; $attributeFromSQL .= " INNER JOIN {$datatypeFromSQL} ON ({$datatypeWhereSQL})"; $attributeJoinCount++; break; case 'state': $stateGroupID = $sortBy[2]; if (!is_numeric($stateGroupID)) { $stateGroup = eZContentObjectStateGroup::fetchByIdentifier($stateGroupID); if ($stateGroup) { $stateGroupID = $stateGroup->attribute('id'); } else { eZDebug::writeError("Unknown content object state group '{$stateGroupID}'"); continue 2; } } $stateAlias = "s{$stateJoinCount}"; $stateLinkAlias = "sl{$stateJoinCount}"; $sortingFields .= "{$stateAlias}.priority"; $datatypeSortingTargetSQL .= ", {$stateAlias}.priority"; $attributeFromSQL .= " INNER JOIN ezcobj_state {$stateAlias} ON ({$stateAlias}.group_id = {$stateGroupID})" . " INNER JOIN ezcobj_state_link {$stateLinkAlias}" . " ON ({$stateLinkAlias}.contentobject_id = ezcontentobject.id AND {$stateLinkAlias}.contentobject_state_id = {$stateAlias}.id)"; break; default: if ($allowCustomColumns) { $sortingFields .= $sortField; } else { eZDebug::writeWarning('Unknown sort field: ' . $sortField, __METHOD__); continue; } } $sortOrder = true; // true is ascending if (isset($sortBy[1])) { $sortOrder = $sortBy[1]; } $sortingFields .= $sortOrder ? " ASC" : " DESC"; ++$sortCount; } } $sortingInfo['sortCount'] = $sortCount; $sortingInfo['sortingFields'] = $sortingFields; $sortingInfo['attributeTargetSQL'] = $datatypeSortingTargetSQL; $sortingInfo['attributeJoinCount'] = $attributeJoinCount; $sortingInfo['attributeFromSQL'] = $attributeFromSQL; $sortingInfo['attributeWhereSQL'] = $attributeWhereSQL; } else { if ($sortList === array()) { $sortingInfo['sortingFields'] = ''; } } return $sortingInfo; }
$localeToUse = false; $localeIDToUse = false; // this script inserts English names, so preferably use an English locale $preferredLocales = array('eng-GB', 'eng-US'); foreach ($preferredLocales as $preferredLocale) { if (in_array($preferredLocale, $locales)) { $localeToUse = $preferredLocale; break; } } // when none of the preferred locales are in use, then use the top priority language if ($localeToUse === false) { $prioritizedLanguage = eZContentLanguage::topPriorityLanguage(); $localeToUse = $prioritizedLanguage->attribute('locale'); } $lockGroup = new eZContentObjectStateGroup(array('identifier' => 'ez_lock')); $trans = $lockGroup->translationByLocale($localeToUse); $trans->setAttribute('name', 'Lock'); $trans->setAttribute('description', 'Lock group'); $messages = array(); if ($lockGroup->isValid($messages)) { $cli->output('storing state group ez_lock'); $lockGroup->store(); } else { eZDebug::writeDebug($messages); $db->rollback(); $script->shutdown(2); } $notLockedState = $lockGroup->newState('not_locked'); $trans = $notLockedState->translationByLocale($localeToUse); $trans->setAttribute('name', 'Not locked');
/** * @param eZUser|null $user * @return array */ function allowedAssignStateList( eZUser $user = null ) { $allowedStateIDList = $this->allowedAssignStateIDList( $user ); // retrieve state groups, and for each state group the allowed states (including the current state) $groups = eZContentObjectStateGroup::fetchByOffset( false, false ); $allowedAssignList = array(); foreach ( $groups as $group ) { // we do not return any internal state // all internal states are prepended with the string : "ez_" if( strpos( $group->attribute( 'identifier' ), 'ez' ) === 0 ) continue; $states = array(); $groupStates = $group->attribute( 'states' ); $currentStateIDArray = $this->attribute( 'state_id_array' ); $current = false; foreach ( $groupStates as $groupState ) { $stateID = $groupState->attribute( 'id' ); if ( in_array( $stateID, $allowedStateIDList ) ) { $states[] = $groupState; } if ( in_array( $stateID, $currentStateIDArray ) ) { $current = $groupState; } } $allowedAssignList[] = array( 'group' => $group, 'states' => $states, 'current' => $current ); } return $allowedAssignList; }
); $options = $script->getOptions( '', '', array( '-q' => 'Quiet mode' ) ); $cli = eZCLI::instance(); $script->initialize(); $script->startup(); $db = eZDB::instance(); $limit = 50; $offset = 0; while ( true ) { $groups = eZContentObjectStateGroup::fetchByOffset( $limit, $offset ); if ( empty( $groups ) ) { break; } foreach ( $groups as $group ) { $cli->output( 'Fixing translations for group ' . $group->attribute( 'identifier' ), false ); $groupId = $group->attribute( 'id' ); $defaultLangId = $group->attribute( 'default_language_id' ); // for the default language id, the correct record is the one with // the always available bit, so we delete records without it // ie language_id = real_language_id = $defaultLangId $queryDefaultLang = "DELETE FROM ezcobj_state_group_language WHERE contentobject_state_group_id={$groupId}
default: $limit = 10; break; } $languages = eZContentLanguage::fetchList(); $tpl = eZTemplate::factory(); eZDebug::writeDebug($Module->currentAction()); if ($Module->isCurrentAction('Remove') && $Module->hasActionParameter('RemoveIDList')) { $removeIDList = $Module->actionParameter('RemoveIDList'); foreach ($removeIDList as $removeID) { $group = eZContentObjectStateGroup::fetchById($removeID); if ($group && !$group->isInternal()) { eZContentObjectStateGroup::removeByID($removeID); } } } else { if ($Module->isCurrentAction('Create')) { return $Module->redirectTo('state/group_edit'); } } $groups = eZContentObjectStateGroup::fetchByOffset($limit, $offset); $groupCount = eZPersistentObject::count(eZContentObjectStateGroup::definition()); $viewParameters = array('offset' => $offset); $tpl->setVariable('limit', $limit); $tpl->setVariable('list_limit_preference_name', $listLimitPreferenceName); $tpl->setVariable('list_limit_preference_value', $listLimitPreferenceValue); $tpl->setVariable('groups', $groups); $tpl->setVariable('group_count', $groupCount); $tpl->setVariable('view_parameters', $viewParameters); $tpl->setVariable('languages', $languages); $Result = array('content' => $tpl->fetch('design:state/groups.tpl'), 'path' => array(array('url' => false, 'text' => ezpI18n::tr('kernel/state', 'State')), array('url' => false, 'text' => ezpI18n::tr('kernel/state', 'Groups'))));