/**
  * Gets a validation for a given item
  *
  * @param integer $itemID The item we want the validations for
  * @param CMS_user $user The user we want the validations for
  * @param integer $getEditionType The validation type we want.
  *  by default function return RESOURCE_EDITION_LOCATION then RESOURCE_EDITION_CONTENT then RESOURCE_EDITION_SIBLINGSORDER
  * @return array(CMS_resourceValidation) The resourceValidations objects, false if none found for the given user.
  * @access public
  */
 function getValidationByID($itemID, &$user, $getEditionType = false)
 {
     if (!$user instanceof CMS_profile_user) {
         $this->raiseError("User is not a valid CMS_profile_user object");
         return false;
     }
     if (!$user->hasValidationClearance($this->_codename)) {
         return false;
     }
     if (CMS_poly_object_catalog::hasPrimaryResource($this->getCodename())) {
         //get object type ID
         $objectID = CMS_poly_object_catalog::getPrimaryResourceObjectType($this->getCodename());
         //get viewvable objects list for current user
         if (CMS_poly_object_catalog::objectHasCategories($objectID)) {
             $objects = CMS_poly_object_catalog::getAllObjects($objectID, false, array(), false);
             //$where = (is_array($objects) && $objects) ? ' and objectID in ('.implode(',',$objects).')' : '';
             if (is_array($objects) && $objects) {
                 $where = ' and objectID in (' . implode(',', $objects) . ')';
             } else {
                 return false;
             }
         } else {
             $where = '';
         }
         $this->getPrimaryResourceDefinition();
         if (!$getEditionType) {
             $getEditionType = RESOURCE_EDITION_LOCATION + RESOURCE_EDITION_CONTENT;
         }
         $sql = "\n\t\t\t\t\tselect\n\t\t\t\t\t\tobjectID as id,\n\t\t\t\t\t\tlocation_rs as location,\n\t\t\t\t\t\tproposedFor_rs as proposedFor,\n\t\t\t\t\t\tvalidationsRefused_rs as validationsRefused,\n\t\t\t\t\t\teditions_rs as editions,\n\t\t\t\t\t\tmod_subobject_integer_edited.id as fieldID\n\t\t\t\t\tfrom\n\t\t\t\t\t\tmod_subobject_integer_edited,\n\t\t\t\t\t\tmod_object_polyobjects,\n\t\t\t\t\t\tresources,\n\t\t\t\t\t\tresourceStatuses\n\t\t\t\t\twhere\n\t\t\t\t\t\tobjectID = '" . $itemID . "'\n\t\t\t\t\t\tand value = id_res\n\t\t\t\t\t\tand object_type_id_moo = '" . $objectID . "'\n\t\t\t\t\t\tand id_moo = objectID\n\t\t\t\t\t\tand objectFieldID = 0\n\t\t\t\t\t\tand objectSubFieldID = 0\n\t\t\t\t\t\tand status_res = id_rs\n\t\t\t\t\t\t{$where}\n\t\t\t\t";
         $q = new CMS_query($sql);
         if ($q->getNumRows() >= 1) {
             $r = $q->getArray();
             $id = $r["id"];
             //here, this is an ugly hack to resolve a strange bug (multiple resources for an unique object).
             //not time to found the real cause for now ...
             if ($q->getNumRows() > 1) {
                 while ($exceptionFiledID = $q->getValue('fieldID')) {
                     $sql_delete = "delete from mod_subobject_integer_edited where id = '" . $exceptionFiledID . "'";
                     $q_delete = new CMS_query($sql_delete);
                 }
             }
             //search the type of edition
             //RESOURCE_EDITION_LOCATION
             if ($r["location"] == RESOURCE_LOCATION_USERSPACE && $r["proposedFor"] != 0 && !($r["validationsRefused"] & RESOURCE_EDITION_LOCATION) && $getEditionType & RESOURCE_EDITION_LOCATION) {
                 $language = $user->getLanguage();
                 $item = $this->getResourceByID($id);
                 $validation = new CMS_resourceValidation($this->_codename, RESOURCE_EDITION_LOCATION, $item);
                 if (!$validation->hasError()) {
                     $validation->setValidationTypeLabel($language->getMessage(self::MESSAGE_MOD_POLYMOD_VALIDATION_LOCATIONCHANGE, array($this->_primaryResourceObjectDefinition->getLabel($language)), MOD_POLYMOD_CODENAME));
                     $validation->setValidationLabel($language->getMessage(self::MESSAGE_MOD_POLYMOD_VALIDATION_LOCATIONCHANGE_OFRESOURCE, array($this->_primaryResourceObjectDefinition->getLabel($language)), MOD_POLYMOD_CODENAME) . " " . io::decodeEntities($item->{$this->_resourceNameMethod}()));
                     $validation->setValidationShortLabel(io::decodeEntities($item->{$this->_resourceNameMethod}()));
                     $previzURL = $item->getPrevizPageURL();
                     if ($previzURL) {
                         $validation->addHelpUrl($language->getMessage(self::MESSAGE_PAGE_ACTION_PREVIZ), $previzURL);
                     }
                     $validation->setEditorsStack($item->getEditorsStack());
                     return $validation;
                 } else {
                     return false;
                 }
                 //RESOURCE_EDITION_CONTENT
             } elseif ($r["location"] == RESOURCE_LOCATION_USERSPACE && $r["proposedFor"] == 0 && ($r["editions"] & RESOURCE_EDITION_CONTENT && !($r["validationsRefused"] & RESOURCE_EDITION_CONTENT)) && $getEditionType & RESOURCE_EDITION_CONTENT) {
                 $language = $user->getLanguage();
                 $editions = $r["editions"];
                 //RESOURCE_EDITION_CONTENT
                 $item = $this->getResourceByID($id);
                 $validation = new CMS_resourceValidation($this->_codename, $editions, $item);
                 if (!$validation->hasError()) {
                     $validation->setValidationTypeLabel($language->getMessage(self::MESSAGE_MOD_POLYMOD_VALIDATION_EDITION, array($this->_primaryResourceObjectDefinition->getLabel($language)), MOD_POLYMOD_CODENAME));
                     $validation->setValidationLabel($language->getMessage(self::MESSAGE_MOD_POLYMOD_VALIDATION_EDITION_OFRESOURCE, array($this->_primaryResourceObjectDefinition->getLabel($language)), MOD_POLYMOD_CODENAME) . " " . io::decodeEntities($item->{$this->_resourceNameMethod}()));
                     $validation->setValidationShortLabel(io::decodeEntities($item->{$this->_resourceNameMethod}()));
                     $previzURL = $item->getPrevizPageURL();
                     if ($previzURL) {
                         $validation->addHelpUrl($language->getMessage(self::MESSAGE_PAGE_ACTION_PREVIZ), $previzURL);
                     }
                     $validation->setEditorsStack($item->getEditorsStack());
                     return $validation;
                 } else {
                     return false;
                 }
             }
         } elseif ($q->getNumRows() == 0) {
             return false;
         } else {
             $this->raiseError("Can't have more than one item for a given ID");
             return false;
         }
     } else {
         return false;
     }
 }
Exemplo n.º 2
0
 /**
  * Gets a validation for a given page
  *
  * @param integer $pageID The page we want the validations for
  * @param CMS_user $user The user we want the validations for
  * @param integer $getEditionType The validation type we want.
  *  by default function return RESOURCE_EDITION_LOCATION then RESOURCE_EDITION_CONTENT then RESOURCE_EDITION_SIBLINGSORDER
  * @return array(CMS_resourceValidation) The resourceValidations objects, false if none found for the given user.
  * @access public
  */
 function getValidationByID($pageID, &$user, $getEditionType = false)
 {
     if (!$user instanceof CMS_profile_user) {
         $this->raiseError("User is not a valid CMS_profile_user object");
         return false;
     }
     if (!$user->hasValidationClearance($this->_codename)) {
         return false;
     }
     if (!$getEditionType) {
         $getEditionType = RESOURCE_EDITION_LOCATION + RESOURCE_EDITION_CONTENT + RESOURCE_EDITION_SIBLINGSORDER + RESOURCE_EDITION_MOVE;
     }
     $sql = "\n\t\t\t\tselect\n\t\t\t\t\tid_pag as id,\n\t\t\t\t\tlocation_rs as location,\n\t\t\t\t\tproposedFor_rs as proposedFor,\n\t\t\t\t\tvalidationsRefused_rs as validationsRefused,\n\t\t\t\t\teditions_rs as editions\n\t\t\t\tfrom\n\t\t\t\t\tpages,\n\t\t\t\t\tresources,\n\t\t\t\t\tresourceStatuses\n\t\t\t\twhere\n\t\t\t\t\tid_pag = '" . $pageID . "'\n\t\t\t\t\tand resource_pag = id_res\n\t\t\t\t\tand status_res = id_rs\n\t\t\t";
     $q = new CMS_query($sql);
     if ($q->getNumRows() == 1) {
         $r = $q->getArray();
         $id = $r["id"];
         //search the type of edition
         //RESOURCE_EDITION_LOCATION
         if ($r["location"] == RESOURCE_LOCATION_USERSPACE && $r["proposedFor"] != 0 && !($r["validationsRefused"] & RESOURCE_EDITION_LOCATION) && $getEditionType & RESOURCE_EDITION_LOCATION) {
             //check if the page is editable by the user. If not, can't validate it
             if (!$user->hasPageClearance($id, CLEARANCE_PAGE_EDIT)) {
                 return false;
             }
             $language = $user->getLanguage();
             $page = $this->getResourceByID($id);
             $validation = new CMS_resourceValidation($this->_codename, RESOURCE_EDITION_LOCATION, $page);
             if (!$validation->hasError()) {
                 $validation->setValidationTypeLabel($language->getMessage(self::MESSAGE_MOD_STANDARD_VALIDATION_LOCATIONCHANGE));
                 $validation->setValidationLabel($language->getMessage(self::MESSAGE_MOD_STANDARD_VALIDATION_LOCATIONCHANGE_OFPAGE) . " " . $page->getTitle());
                 $validation->setValidationShortLabel($page->getTitle());
                 $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_PREVIZ), PATH_ADMIN_WR . '/page-previsualization.php?currentPage=' . $id);
                 if ($page->getPublication() == RESOURCE_PUBLICATION_PUBLIC) {
                     $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_ONLINE), $page->getURL());
                 }
                 //Back to edition location
                 $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_EDIT), PATH_ADMIN_WR . '/page-content.php?page=' . $id, "_self", 'Automne.tabPanels.setActiveTab(\'edit\');Automne.utils.getPageById(' . $id . ');');
                 $validation->setEditorsStack($page->getEditorsStack());
                 return $validation;
             } else {
                 return false;
             }
             //RESOURCE_EDITION_CONTENT || RESOURCE_EDITION_BASEDATA
         } elseif ($r["location"] == RESOURCE_LOCATION_USERSPACE && $r["proposedFor"] == 0 && ($r["editions"] & RESOURCE_EDITION_CONTENT && !($r["validationsRefused"] & RESOURCE_EDITION_CONTENT) || $r["editions"] & RESOURCE_EDITION_BASEDATA && !($r["validationsRefused"] & RESOURCE_EDITION_BASEDATA)) && ($getEditionType & RESOURCE_EDITION_CONTENT || $getEditionType & RESOURCE_EDITION_BASEDATA)) {
             //check if the page is editable by the user. If not, can't validate it
             if (!$user->hasPageClearance($id, CLEARANCE_PAGE_EDIT)) {
                 return false;
             }
             $language = $user->getLanguage();
             $editions = $r["editions"];
             //RESOURCE_EDITION_CONTENT + RESOURCE_EDITION_BASEDATA;
             $page = $this->getResourceByID($id);
             $validation = new CMS_resourceValidation($this->_codename, $editions, $page);
             if (!$validation->hasError()) {
                 $validation->setValidationTypeLabel($language->getMessage(self::MESSAGE_MOD_STANDARD_VALIDATION_EDITION));
                 $validation->setValidationLabel($language->getMessage(self::MESSAGE_MOD_STANDARD_VALIDATION_EDITION_OFPAGE) . " " . $page->getTitle());
                 $validation->setValidationShortLabel($page->getTitle());
                 $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_PREVIZ), PATH_ADMIN_WR . '/page-previsualization.php?currentPage=' . $id);
                 if ($page->getPublication() == RESOURCE_PUBLICATION_PUBLIC) {
                     $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_ONLINE), $page->getURL());
                 }
                 //Back to edition location
                 $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_EDIT), PATH_ADMIN_WR . '/page-content.php?page=' . $id, "_self", 'Automne.tabPanels.setActiveTab(\'edit\');Automne.utils.getPageById(' . $id . ');');
                 $validation->setEditorsStack($page->getEditorsStack());
                 return $validation;
             } else {
                 return false;
             }
             //RESOURCE_EDITION_SIBLINGSORDER
         } elseif ($r["location"] == RESOURCE_LOCATION_USERSPACE && $r["proposedFor"] == 0 && $r["editions"] & RESOURCE_EDITION_SIBLINGSORDER && !($r["validationsRefused"] & RESOURCE_EDITION_SIBLINGSORDER) && $getEditionType & RESOURCE_EDITION_SIBLINGSORDER) {
             //check if the page is editable by the user. If not, can't validate it
             if (!$user->hasPageClearance($id, CLEARANCE_PAGE_EDIT)) {
                 return false;
             }
             $language = $user->getLanguage();
             $editions = RESOURCE_EDITION_SIBLINGSORDER;
             $page = $this->getResourceByID($id);
             $validation = new CMS_resourceValidation($this->_codename, $editions, $page);
             if (!$validation->hasError()) {
                 $validation->setValidationTypeLabel($language->getMessage(self::MESSAGE_MOD_STANDARD_VALIDATION_SIBLINGSORDER));
                 $validation->setValidationLabel($language->getMessage(self::MESSAGE_MOD_STANDARD_VALIDATION_SIBLINGSORDER_OFPAGE) . " " . $page->getTitle());
                 $validation->setValidationShortLabel($page->getTitle());
                 $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_PREVIZ), PATH_ADMIN_WR . '/page-previsualization.php?currentPage=' . $id);
                 if ($page->getPublication() == RESOURCE_PUBLICATION_PUBLIC) {
                     $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_ONLINE), $page->getURL());
                 }
                 //Back to edition location
                 $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_EDIT), PATH_ADMIN_WR . '/page-content.php?page=' . $id, "_self", 'Automne.tabPanels.setActiveTab(\'edit\');Automne.utils.getPageById(' . $id . ');');
                 $validation->setEditorsStack($page->getEditorsStack());
                 return $validation;
             } else {
                 return false;
             }
             //RESOURCE_EDITION_MOVE
         } elseif ($r["location"] == RESOURCE_LOCATION_USERSPACE && $r["proposedFor"] == 0 && $r["editions"] & RESOURCE_EDITION_MOVE && !($r["validationsRefused"] & RESOURCE_EDITION_MOVE) && $getEditionType & RESOURCE_EDITION_MOVE) {
             //check if the page is editable by the user. If not, can't validate it
             if (!$user->hasPageClearance($id, CLEARANCE_PAGE_EDIT)) {
                 return false;
             }
             $language = $user->getLanguage();
             $editions = RESOURCE_EDITION_MOVE;
             $page = $this->getResourceByID($id);
             $validation = new CMS_resourceValidation($this->_codename, $editions, $page);
             if (!$validation->hasError()) {
                 $validation->setValidationTypeLabel($language->getMessage(self::MESSAGE_MOD_STANDARD_VALIDATION_MOVE));
                 $validation->setValidationLabel($language->getMessage(self::MESSAGE_MOD_STANDARD_VALIDATION_MOVE_OFPAGE) . " " . $page->getTitle());
                 $validation->setValidationShortLabel($page->getTitle());
                 $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_PREVIZ), PATH_ADMIN_WR . '/page-previsualization.php?currentPage=' . $id);
                 if ($page->getPublication() == RESOURCE_PUBLICATION_PUBLIC) {
                     $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_ONLINE), $page->getURL());
                 }
                 //Back to edition location
                 $validation->addHelpUrl($language->getMessage(self::MESSAGE_MOD_STANDARD_URL_EDIT), PATH_ADMIN_WR . '/page-content.php?page=' . $id, "_self", 'Automne.tabPanels.setActiveTab(\'edit\');Automne.utils.getPageById(' . $id . ');');
                 $validation->setEditorsStack($page->getEditorsStack());
                 return $validation;
             } else {
                 return false;
             }
         }
     } elseif ($q->getNumRows() == 0) {
         return false;
     } else {
         $this->raiseError("Can't have more than one page for a given ID");
         return false;
     }
 }