/** * Proceed to search and returns the array of results, null if none * found. All search options had been set yet. * * @access public * @param $return, the returned values in : * self::POLYMOD_SEARCH_RETURN_IDS for array of ids sorted * self::POLYMOD_SEARCH_RETURN_DATAS for db datas * self::POLYMOD_SEARCH_RETURN_OBJECTS for objetcs (default) * self::POLYMOD_SEARCH_RETURN_OBJECTSLIGHT for light objects (without subobjects datas) * self::POLYMOD_SEARCH_RETURN_OBJECTSLIGHT_EDITED for edited light objects. /!\ This method must not be used for objects which should be saved (used by getListOfNamesForObject only) /!\ * self::POLYMOD_SEARCH_RETURN_INDIVIDUALS_OBJECTS use this method to get individual results with method getNextResult * @param boolean $loadSubObjects : all the found objects can load theirs own sub objects (default false) * /!\ CAUTION : Pass this option to true can generate a lot of subqueries /!\ * @return mixed array(CMS_poly_object) or boolean (for POLYMOD_SEARCH_RETURN_INDIVIDUALS_OBJECTS) */ function search($return = self::POLYMOD_SEARCH_RETURN_OBJECTS, $loadSubObjects = false) { global $cms_user; if ($return == self::POLYMOD_SEARCH_RETURN_OBJECTSLIGHT && !$this->_public) { $this->raiseError('Return type can\'t be self::POLYMOD_SEARCH_RETURN_OBJECTSLIGHT in a non-public search.'); $return = self::POLYMOD_SEARCH_RETURN_OBJECTS; } //this is a hack to allow light search in edited userspace. /!\ Objects must not be saved after /!\ if ($return == self::POLYMOD_SEARCH_RETURN_OBJECTSLIGHT_EDITED) { $return = self::POLYMOD_SEARCH_RETURN_OBJECTSLIGHT; } $items = array(); if ($return == self::POLYMOD_SEARCH_RETURN_INDIVIDUALS_OBJECTS) { //reset result stack if needed reset($this->_sortedResultsIds); } $this->_searchMode = $return; // Check module rights : to get any results, user should has at least CLEARANCE_MODULE_VIEW if ((!$this->_public || $this->_public && APPLICATION_ENFORCES_ACCESS_CONTROL) && (!is_object($cms_user) || !$cms_user->hasModuleClearance($this->_object->getValue('module'), CLEARANCE_MODULE_VIEW))) { if (!is_object($cms_user)) { $this->_raiseError(__CLASS__ . ' : ' . __FUNCTION__ . ' : cms_user not loaded when trying to get objects subject to rights ...'); } return $return == self::POLYMOD_SEARCH_RETURN_INDIVIDUALS_OBJECTS ? false : $items; } //get all ids and numrows for search $this->_resultsIds = $this->_getIds(); //if results if (is_array($this->_resultsIds) && $this->_resultsIds) { //sort and limit ids to order and limit clause and to existant objects $this->_sortedResultsIds = $this->_sortIds(); //if return anything than ids if ($return != self::POLYMOD_SEARCH_RETURN_IDS && is_array($this->_sortedResultsIds) && $this->_sortedResultsIds) { //get subobjects ids if ($return != self::POLYMOD_SEARCH_RETURN_OBJECTSLIGHT) { $this->_resultsSubObjectsIds = $this->_getSubObjectsIds(); } //then load all values for objects and subobjects (if needed) $this->_values = $this->_getObjectValues(); } //clean tmp table $this->_updateTmpList(); } else { //clean tmp table $this->_updateTmpList(); return $return == self::POLYMOD_SEARCH_RETURN_INDIVIDUALS_OBJECTS ? true : array(); } //return datas if ($return == self::POLYMOD_SEARCH_RETURN_DATAS) { return $this->_values; } //return individuals objects with method getNextResult if ($return == self::POLYMOD_SEARCH_RETURN_INDIVIDUALS_OBJECTS) { return true; } //return ids if ($return == self::POLYMOD_SEARCH_RETURN_IDS) { return $this->_sortedResultsIds; } //return objects $count = 0; if ($this->_values && $this->_sortedResultsIds) { //1- create objects values : all subObjects found for searched objects $subObjectValues = array(); foreach ($this->_resultsSubObjectsIds as $subObjectId) { $subObjectValues[$subObjectId] =& $this->_values[$subObjectId]; } //load sub objects values $loadSubObjectsValues = $return != self::POLYMOD_SEARCH_RETURN_OBJECTSLIGHT; //create objects foreach ($this->_sortedResultsIds as $aResultID) { //2- add object values to objects values $objectValues = $subObjectValues; $objectValues[$aResultID] =& $this->_values[$aResultID]; //instanciate object $obj = new CMS_poly_object($this->_object->getID(), $aResultID, $objectValues, $this->_public, $loadSubObjects, $loadSubObjectsValues); if (!$obj->hasError()) { $items[$aResultID] = $obj; $count++; } } } return $items; }
} else { $item->lock($cms_user); } } //check user rights on item if (!$item->userHasClearance($cms_user, CLEARANCE_MODULE_EDIT)) { CMS_grandFather::raiseError('Error, user has no rights item ' . $itemId); $jscontent = "\n\t\t\t\tAutomne.message.popup({\n\t\t\t\t\tmsg: \t\t\t\t'{$cms_language->getJSMessage(MESSAGE_PAGE_ELEMENT_EDIT_RIGHTS_ERROR, array($itemLabel), MOD_POLYMOD_CODENAME)}',\n\t\t\t\t\tbuttons: \t\t\tExt.MessageBox.OK,\n\t\t\t\t\tclosable: \t\t\tfalse,\n\t\t\t\t\ticon: \t\t\t\tExt.MessageBox.ERROR\n\t\t\t\t});"; $view->addJavascript($jscontent); $view->setContent($content); $view->show(); } } } else { //instanciate clean object (creation) $item = new CMS_poly_object($object->getID(), ''); } } $cms_message = ''; switch ($action) { case 'save': case 'save-validate': //checks and assignments $item->setDebug(false); $fieldsObjects = $item->getFieldsObjects(); //first, check mandatory values $allOK = true; foreach ($fieldsObjects as $fieldID => $aFieldObject) { $return = $item->checkMandatory($fieldID, $fieldsValues, '', true); if ($return !== true) { $allOK = false;
$view->addJavascript($jscontent); $view->show(); } else { $item->lock($cms_user); } } //check user rights on item if (!$item->userHasClearance($cms_user, CLEARANCE_MODULE_EDIT)) { CMS_grandFather::raiseError('Error, user has no rights item ' . $itemId); $jscontent = "\n\t\tvar window = Ext.getCmp('{$winId}');\n\t\tif (window) {\n\t\t\twindow.close();\n\t\t}\n\t\tAutomne.message.popup({\n\t\t\tmsg: \t\t\t\t'{$cms_language->getJSMessage(MESSAGE_PAGE_ELEMENT_EDIT_RIGHTS_ERROR, array($itemLabel), MOD_POLYMOD_CODENAME)}',\n\t\t\tbuttons: \t\t\tExt.MessageBox.OK,\n\t\t\tclosable: \t\t\tfalse,\n\t\t\ticon: \t\t\t\tExt.MessageBox.ERROR\n\t\t});"; $view->addJavascript($jscontent); $view->show(); } } else { //instanciate clean object (creation) $item = new CMS_poly_object($object->getID(), ''); } $winLabel = sensitiveIO::sanitizeJSString($cms_language->getMessage(MESSAGE_PAGE_TITLE_MODULE, array($cms_module->getLabel($cms_language))) . " :: " . $cms_language->getMessage(MESSAGE_PAGE_TITLE, array($object->getLabel($cms_language)), MOD_POLYMOD_CODENAME)); $fieldsObjects = $item->getFieldsObjects(); $itemFields = ''; foreach ($fieldsObjects as $fieldID => $aFieldObject) { $fieldAdmin = $item->getHTMLAdmin($fieldID, $cms_language, ''); if (is_array($fieldAdmin)) { $itemFields .= sensitiveIO::jsonEncode($fieldAdmin) . ','; } } //do some search and replace to allow use of js functions in returned code $itemFields = str_replace('"scope":"this"', '"scope":this', $itemFields); function replaceCallBack($parts) { return 'function(' . str_replace(array('\\"', '\\/'), array('"', '/'), $parts[1]) . '}';
/** * get an object instance of the field type * * @param boolean $returnDefinition, return object CMS_poly_object_definition or CMS_poly_object otherwise * @return mixed, the object instance * @access public */ function getTypeObject($returnDefinition = false, $public = false) { if (!$this->_objectFieldValues['type']) { return false; } if (sensitiveIO::isPositiveInteger($this->_objectFieldValues['type'])) { if ($returnDefinition) { return CMS_poly_object_catalog::getObjectDefinition($this->_objectFieldValues['type']); } else { $item = new CMS_poly_object($this->_objectFieldValues['type'], 0, array(), $public); //object is used as field as another object so set it $item->setField($this); return $item; } } elseif (io::strpos($this->_objectFieldValues['type'], 'multi|') !== false) { return new CMS_multi_poly_object(io::substr($this->_objectFieldValues['type'], 6), array(), $this, $public); } elseif (class_exists($this->_objectFieldValues['type'])) { return new $this->_objectFieldValues['type'](array(), $this, $public); } }
/** * get labels for object structure and functions * * @return array : the labels of object structure and functions * @access public */ function getLabelsStructure(&$language, $objectName) { $labels = array(); $object = new CMS_poly_object($this->_objectID); $labels['structure']['label'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_LABEL_DESCRIPTION, false, MOD_POLYMOD_CODENAME); $labels['structure']['fieldname'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_FIELDNAME_DESCRIPTION, array($this->getFieldLabel($language)), MOD_POLYMOD_CODENAME); $labels['structure']['fieldID'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_FIELDID_DESCRIPTION, array($this->_field->getID()), MOD_POLYMOD_CODENAME); $labels['structure']['required'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_REQUIRED_DESCRIPTION, false, MOD_POLYMOD_CODENAME); $labels['structure']['objectname'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_OBJECTNAME_DESCRIPTION, array($object->getFieldLabel($language)), MOD_POLYMOD_CODENAME); $labels['structure']['objectdescription'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_OBJECTDESC_DESCRIPTION, array($object->getFieldDesc($language)), MOD_POLYMOD_CODENAME); $labels['structure']['objecttype'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_OBJECTTYPE_DESCRIPTION, array($this->_objectID), MOD_POLYMOD_CODENAME); $labels['structure']['ids'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_IDS_DESCRIPTION, array($object->getFieldLabel($language)), MOD_POLYMOD_CODENAME); $labels['structure']['fields'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_FIELDS_DESCRIPTION, array($object->getFieldLabel($language)), MOD_POLYMOD_CODENAME); $labels['structure']['count'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_COUNT_DESCRIPTION, array($object->getFieldLabel($language)), MOD_POLYMOD_CODENAME); $labels['structure']['description'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_FIELD_DESC_DESCRIPTION, array(io::htmlspecialchars($this->getFieldDescription($language))), MOD_POLYMOD_CODENAME); $labels['function']['selectOptions'] = $language->getMessage(self::MESSAGE_MULTI_OBJECT_FUNCTION_SELECTOPTIONS_DESCRIPTION, array('{' . $objectName . '}'), MOD_POLYMOD_CODENAME); return $labels; }
/** * Sets subObjectsDefinitions * * @return boolean true on success, false on failure * @access private */ protected function _populateSubObjectsDefinitions() { if (!$this->_objectFieldsDefinition) { $this->raiseError("No fields for objectID : " . $this->_objectID . " in catalog"); return false; } //get all subDefinitions for fields foreach (array_keys($this->_objectFieldsDefinition) as $fieldID) { if (is_object($this->_objectFieldsDefinition[$fieldID])) { $type = $this->_objectFieldsDefinition[$fieldID]->getValue('type'); if (sensitiveIO::isPositiveInteger($type)) { //poly object $typeObject = new CMS_poly_object($type); $this->_subObjectsDefinitions[$fieldID] = $typeObject->getSubFieldsDefinition($this->_ID); } elseif (io::strpos($type, "multi|") !== false) { //multi objects $this->_subObjectsDefinitions[$fieldID] = CMS_multi_poly_object::getSubFieldsDefinition(io::substr($type, 6), $this->_ID, $this->_objectFieldsDefinition[$fieldID]); } elseif (class_exists($type)) { //object $typeObject = new $type(array(), $this->_objectFieldsDefinition[$fieldID]); $this->_subObjectsDefinitions[$fieldID] = $typeObject->getSubFieldsDefinition($this->_ID); } else { $this->raiseError("Unknown field type : " . $type); return false; } } } return true; }