/** * Constructor. * initializes the linxCondition. * * @param string $property The page property we're gonna test. Only a set of these are available here. * @param string $operator The comparison operator serving to test the condition. * @param string $tagContent The tag content. * @return void * @access public */ function __construct($tag) { $authorized_properties = array("rank", "title", "id", "lvl", "father", "website", "codename"); $property = $tag->getAttribute('property'); $operator = $tag->getAttribute('operator'); if (SensitiveIO::isInSet($property, $authorized_properties)) { $this->_pageProperty = $property; $this->_operator = io::decodeEntities(io::decodeEntities(io::decodeEntities($operator))); $values = $tag->getElementsByTagName('value'); if ($values->length > 0) { $value = $values->item(0); //if value type is "nodeproperty", we must parse the inner content to find a nodespec tag if ($value->hasAttribute("type") && $value->getAttribute("type") == "nodeproperty") { $this->_valueIsScalar = false; $this->_valueNodespecProperty = $value->getAttribute("property"); $nodespecs = $value->getElementsByTagName('nodespec'); if ($nodespecs->length > 0) { $nodespec = $nodespecs->item(0); $this->_valueNodespec = CMS_linxNodespec::createNodespec($nodespec); } } else { $this->_valueScalar = $value->nodeValue; } } else { $this->raiseError("Malformed innerContent"); return; } } else { $this->raiseError("Unknown property : " . $property); } }
/** * Compute the tag * * @return string the PHP / HTML content computed * @access private */ protected function _compute() { //decode ampersand $this->_attributes['what'] = io::decodeEntities($this->_attributes['what']); $return = ' $ifcondition_' . $this->_uniqueID . ' = CMS_polymod_definition_parsing::replaceVars("' . $this->replaceVars($this->_attributes['what'], false, false, array($this, 'encloseWithPrepareVar')) . '", @$replace); '; //if attribute name is set, store if result if (isset($this->_attributes['name']) && $this->_attributes['name']) { $return .= '$atmIfResults[\'' . $this->_attributes['name'] . '\'][\'if\'] = false;'; } $return .= ' if ($ifcondition_' . $this->_uniqueID . '): $func_' . $this->_uniqueID . ' = @create_function("","return (".$ifcondition_' . $this->_uniqueID . '.");"); if ($func_' . $this->_uniqueID . ' === false) { CMS_grandFather::raiseError(\'Error in atm-if [' . $this->_uniqueID . '] syntax : \'.$ifcondition_' . $this->_uniqueID . '); } if ($func_' . $this->_uniqueID . ' && $func_' . $this->_uniqueID . '()): '; //if attribute name is set, store if result if (isset($this->_attributes['name']) && $this->_attributes['name']) { $return .= '$atmIfResults[\'' . $this->_attributes['name'] . '\'][\'if\'] = true;'; } $return .= ' ' . $this->_computeChilds() . ' endif; unset($func_' . $this->_uniqueID . '); endif; unset($ifcondition_' . $this->_uniqueID . '); '; return $return; }
/** * 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; } }
/** * Builds where statement with a key and its value * The key can be a known string, this class will create statements in consequence * or it can be a field id * * @access public * @param string $key name of statement to set * @param string $value , the value to give * @param string $operator, additional optional search operator * @return void or false if an error occured */ function addWhereCondition($type, $value, $operator = false) { if (!$type || !$value && !$operator) { return; } //clean value if (!is_object($value) && !is_array($value)) { $value = sensitiveIO::sanitizeSQLString($value); } elseif (is_array($value)) { $value = array_map(array('sensitiveIO', 'sanitizeSQLString'), $value); } $operator = $operator ? io::decodeEntities($operator) : false; $statusSuffix = $this->_public ? "_public" : "_edited"; switch ($type) { case "object": if ($value && !is_a($value, 'CMS_poly_object_definition')) { $this->raiseError('Value must be a valid CMS_poly_object_definition.'); return false; } $this->_object = $value; $this->_whereConditions['object'][] = array('value' => $value, 'operator' => $operator); break; case "item": if (!sensitiveIO::isPositiveInteger($value)) { $this->raiseError("Value must be a positive Integer."); return false; } $this->_whereConditions['item'][] = array('value' => $value, 'operator' => $operator); break; case "items": if (!$value) { $this->raiseError('Value must be a populated array.'); return false; } $this->_whereConditions['items'][] = array('value' => $value, 'operator' => $operator); break; case 'archives': if ($this->_public && $this->_object->isPrimaryResource() && ($value == 1 || $value == 'true' || $value == true)) { unset($this->_whereConditions['publication date before']); unset($this->_whereConditions['publication date end']); } break; case "itemsOrdered": if (!$value) { $this->raiseError('Value must be a populated array.'); return false; } $this->_whereConditions['items'][] = array('value' => $value, 'operator' => $operator); $this->_orderConditions['itemsOrdered']['order'] = $value; break; case "profile": if (!is_a($value, 'CMS_profile_user')) { $this->raiseError('Value must be a valid CMS_profile_user.'); return false; } $this->_whereConditions['profile'][] = array('value' => $value, 'operator' => $operator); break; case "category": //this search type is deprecated, keep it for compatibility but now it is replaced by direct field id access //get field of categories for searched object type (assume it uses categories) $categoriesFields = CMS_poly_object_catalog::objectHasCategories($this->_object->getId()); $this->_whereConditions[$categoriesFields[0]][] = array('value' => $value, 'operator' => $operator); break; case "keywords": if ($value) { $this->_whereConditions['keywords'][] = array('value' => $value, 'operator' => $operator); } break; case "publication date after": // Date start if ($this->_object->isPrimaryResource()) { if (!is_a($value, 'CMS_date')) { $this->raiseError('Value must be a valid CMS_date.'); return false; } $this->_whereConditions['publication date after'][] = array('value' => $value, 'operator' => $operator); } break; case "publication date before": // Date End if ($this->_object->isPrimaryResource()) { if (!is_a($value, 'CMS_date')) { $this->raiseError('Value must be a valid CMS_date.'); return false; } $this->_whereConditions['publication date before'][] = array('value' => $value, 'operator' => $operator); } break; case "publication date end": // End Date of publication if ($this->_object->isPrimaryResource()) { if (!is_a($value, 'CMS_date')) { $this->raiseError('Value must be a valid CMS_date.'); return false; } $this->_whereConditions['publication date end'][] = array('value' => $value, 'operator' => $operator); } break; case "status": // Publication status if ($this->_object->isPrimaryResource()) { if (!in_array($value, array('online', 'offline', 'validated', 'awaiting'))) { $this->raiseError('Status value must be one of them : online, offline, public, awaiting'); return false; } $this->_whereConditions['status'][] = array('value' => $value, 'operator' => $operator); } break; default: if (sensitiveIO::IsPositiveInteger($type)) { $this->_whereConditions[$type][] = array('value' => $value, 'operator' => $operator); break; } $this->raiseError('Unknown type : ' . $type . ' or value ' . $value); return false; break; } }
$view->setDisplayMode(CMS_view::SHOW_RAW); $selectedContent = sensitiveIO::request('content'); $pluginId = sensitiveIO::request('plugin'); $selectedPlugin = new CMS_poly_plugin_definitions($pluginId); //then create the code to paste for the current selected object if any if (sensitiveIO::isPositiveInteger($itemId) && !$selectedPlugin->needSelection()) { //$item = CMS_poly_object_catalog::getObjectByID($selectedItem); $definition = $selectedPlugin->getValue('definition'); $parameters = array(); $parameters['itemID'] = $itemId; $parameters['module'] = $codename; $cms_page = CMS_session::getPage(); if (is_object($cms_page) && !$cms_page->hasError()) { $parameters['pageID'] = $cms_page->getID(); } $parameters['selection'] = io::decodeEntities($selectedContent); $parameters['public'] = false; $parameters['plugin-view'] = true; $definitionParsing = new CMS_polymod_definition_parsing($definition, true, CMS_polymod_definition_parsing::PARSE_MODE); $codeTopaste = $definitionParsing->getContent(CMS_polymod_definition_parsing::OUTPUT_RESULT, $parameters); //add some attributes to images to prevent resizing into editor $codeTopaste = str_replace('<img ', '<img contenteditable="false" unselectable="on" ', $codeTopaste); //encode all ampersand without reencode already encoded ampersand $codeTopaste = sensitiveIO::reencodeAmpersand($codeTopaste); if ($codeTopaste) { //add identification span tag arround code to paste $codeTopaste = '<span id="polymod-' . $pluginId . '-' . $itemId . '" class="polymod" title="' . io::htmlspecialchars($selectedPlugin->getLabel($cms_language) . ' : ' . trim($item->getLabel($cms_language))) . '">' . $codeTopaste . '</span>'; } $content = $codeTopaste; } elseif (sensitiveIO::isPositiveInteger($itemId) && $selectedPlugin->needSelection()) { $codeTopaste = '<span id="polymod-' . $pluginId . '-' . $itemId . '" class="polymod">' . $selectedContent . '</span>';
<th width="130"><span fckLang="DlgCMSFormsLabel">Libellé</span></th> <th width="130"><span fckLang="DlgCMSFormsType">Type</span></th> <th width="60"><span fckLang="DlgCMSFormsOptions">Options</span></th> <th width="50"><span fckLang="DlgCMSFormsActions">Actions</span></th> </tr> </table> <ul id="sortField" class="sortable">'; } $content .= ' <li id="f_' . $aFormField->getID() . '"> <table border="0" cellspacing="1" cellpadding="0" width="100%"> <tr>'; $required = $aFormField->getAttribute("required") ? ' checked="checked"' : ''; $content .= ' <td align="right"><input type="checkbox" name="required_' . $aFormField->getID() . '" value="1"' . $required . ' /></td> <td align="center" width="130"><input type="text" name="label_' . $aFormField->getID() . '" value="' . htmlspecialchars(io::decodeEntities($aFormField->getAttribute("label"))) . '" /><input type="hidden" name="name_' . $aFormField->getID() . '" value="' . $aFormField->getAttribute("name") . '" /></td> <td align="center" width="130"> <select name="type_' . $aFormField->getID() . '" onchange="viewHideOptionsButton(this,\'options_' . $aFormField->getID() . '\');">'; foreach ($fieldTypes as $aFieldType => $aFieldTypeLabel) { $selected = $aFormField->getAttribute("type") == $aFieldType ? ' selected="selected"' : ''; $content .= '<option value="' . $aFieldType . '"' . $selected . '>' . $aFieldTypeLabel . '</option>'; } $content .= ' </select> </td> <td align="center" width="60">'; $selectValues = ''; $selectLabels = ''; $countOptions = 0; if (sizeof($aFormField->getAttribute("options"))) { foreach ($aFormField->getAttribute("options") as $aSelectValue => $aSelectValueLabel) {
$field = $objectFields[$paramType]; if (is_object($field)) { //check if field has a method to provide a list of names $objectType = $field->getTypeObject(); if (method_exists($objectType, 'getListOfNamesForObject')) { //check if we can associate unused objects $params = $objectType->getParamsValues(); if (method_exists($objectType, 'getParamsValues') && isset($params['associateUnused']) && $params['associateUnused']) { $objectsNames = $objectType->getListOfNamesForObject(true, array(), false); } else { $objectsNames = $objectType->getListOfNamesForObject(true); } $availableItems = array(); if (is_array($objectsNames) && $objectsNames) { foreach ($objectsNames as $id => $label) { $availableItems[] = array($id, io::decodeEntities($label)); } } else { $availableItems[] = array('', $cms_language(MESSAGE_EMPTY_OBJECTS_SET)); } $mandatory = $paramValue == true ? '<span class="atm-red">*</span> ' : ''; $value = isset($data["value"]['search'][$searchName][$paramType]) ? $data["value"]['search'][$searchName][$paramType] : ''; $searchParamContent[] = array('fieldLabel' => $mandatory . $field->getLabel($cms_language), 'name' => 'value[search][' . $searchName . '][' . $paramType . ']', 'hiddenName' => 'value[search][' . $searchName . '][' . $paramType . ']', 'anchor' => '99%', 'xtype' => 'atmCombo', 'forceSelection' => true, 'mode' => 'local', 'valueField' => 'id', 'displayField' => 'label', 'triggerAction' => 'all', 'allowBlank' => !$mandatory, 'selectOnFocus' => true, 'editable' => false, 'value' => $value, 'store' => array('xtype' => 'arraystore', 'fields' => array('id', 'label'), 'data' => $availableItems)); } else { $cms_message .= $cms_language->getMessage(MESSAGE_PAGE_SEARCH_FIELD_ERROR, array($searchName, $row->getLabel()), MOD_POLYMOD_CODENAME) . "\n"; } } else { $cms_message .= $cms_language->getMessage(MESSAGE_PAGE_SEARCH_FIELD_ERROR, array($searchName, $row->getLabel()), MOD_POLYMOD_CODENAME) . "\n"; } } else { $cms_message .= $cms_language->getMessage(MESSAGE_PAGE_SEARCH_FIELDTYPE_ERROR, array($searchName, $row->getLabel(), $paramType), MOD_POLYMOD_CODENAME) . "\n";
/** * get HTML admin (used to enter object values in admin) * * @param integer $fieldID, the current field id (only for poly object compatibility) * @param CMS_language $language, the current admin language * @param string prefixname : the prefix to use for post names * @return string : the html admin * @access public */ function getHTMLAdmin($fieldID, $language, $prefixName) { $return = parent::getHTMLAdmin($fieldID, $language, $prefixName); global $cms_user; $params = $this->getParamsValues(); $return['name'] = 'polymodFieldsValue[list' . $prefixName . $this->_field->getID() . '_0]'; if ($params['multiUserGroup']) { // Get all users or groups $a_all_users = $this->getListOfNamesForObject(); $associatedItems = $availableItems = array(); if (is_array($a_all_users) && $a_all_users) { foreach (array_keys($this->_subfieldValues) as $subFieldID) { if (is_object($this->_subfieldValues[$subFieldID])) { $associatedItems[$this->_subfieldValues[$subFieldID]->getValue()] = $this->_subfieldValues[$subFieldID]->getValue(); } } foreach ($a_all_users as $id => $user) { $availableItems[] = array($id, $user); } } else { $availableItems[] = array('', $language->getMessage(self::MESSAGE_EMPTY_OBJECTS_SET)); $return['disabled'] = true; $return['value'] = ''; } /*$return['xtype'] = 'multiselect'; $return['dataFields'] = array('id', 'label'); $return['data'] = $availableItems; $return['value'] = implode(',',$associatedItems); $return['valueField'] = "id"; $return['displayField'] = "label"; $return['width'] = '97%';*/ $return['xtype'] = 'superboxselect'; $return['dataFields'] = array('id', 'label'); $return['store'] = $availableItems; $return['mode'] = 'local'; $return['value'] = implode(',', $associatedItems); $return['valueField'] = "id"; $return['displayField'] = "label"; $return['width'] = '100%'; $return['stackItems'] = true; } else { $usersDatas = array(); if ($params['isCurrentUser']) { $usersDatas[] = array($cms_user->getUserId(), $cms_user->getFullName()); $return['disabled'] = true; $return['value'] = $cms_user->getUserId(); } elseif ($params['creationUser']) { if (sensitiveIO::isPositiveInteger($this->_subfieldValues[0]->getValue())) { $user = CMS_profile_usersCatalog::getByID($this->_subfieldValues[0]->getValue()); } else { $user = $cms_user; } $usersDatas[] = array($user->getUserId(), $user->getFullName()); $return['disabled'] = true; $return['value'] = $user->getUserId(); } else { // Get all users or groups $a_all_users = $this->getListOfNamesForObject(); if (is_array($a_all_users) && $a_all_users) { $usersDatas[] = array('', $language->getMessage(self::MESSAGE_CHOOSE_OBJECT)); foreach ($a_all_users as $userGroupID => $aUserGroupLabel) { $usersDatas[] = array($userGroupID, io::decodeEntities($aUserGroupLabel)); } $return['value'] = $this->_subfieldValues[0]->getValue(); } else { $usersDatas[] = array('', $language->getMessage(self::MESSAGE_EMPTY_OBJECTS_SET)); $return['disabled'] = true; $return['value'] = ''; } } $return['hiddenName'] = $return['name']; /*unset($return['id']);*/ $return['xtype'] = 'atmCombo'; $return['forceSelection'] = true; $return['mode'] = 'local'; $return['valueField'] = 'id'; $return['displayField'] = 'name'; $return['triggerAction'] = 'all'; $return['store'] = array('xtype' => 'arraystore', 'fields' => array('id', 'name'), 'data' => $usersDatas); $return['selectOnFocus'] = true; $return['editable'] = true; } return $return; }
$view->setContent($objectsDatas); $view->show(); } //CHECKS objectId if (!$objectId && !$fieldId) { CMS_grandFather::raiseError('Missing objectId to list in module ' . $codename); $view->setContent($objectsDatas); $view->show(); } elseif (!$objectId && $fieldId) { $objectId = CMS_poly_object_catalog::getObjectIDForField($fieldId); } //load current object definition $object = CMS_poly_object_catalog::getObjectDefinition($objectId); if (!$object->hasError()) { $conditions = $query ? array('keywords' => $query) : array(); $objectsNames = CMS_poly_object_catalog::getListOfNamesForObject($objectId, false, $conditions); if (is_array($objectsNames) && $objectsNames) { $objectsDatas['objects'][] = array('id' => '0', 'label' => ' '); foreach ($objectsNames as $id => $label) { if (!$removeIds || !in_array($id, $removeIds)) { $objectsDatas['objects'][] = array('id' => $id, 'label' => io::decodeEntities($label)); } } } else { $objectsDatas['objects'][] = array('id' => '0', 'label' => $cms_language->getMessage(MESSAGE_PAGE_NO_ITEM, false, MOD_POLYMOD_CODENAME)); } } else { $objectsDatas['objects'][] = array('id' => '0', 'label' => $cms_language->getMessage(MESSAGE_PAGE_ITEM_NON_EXISTENT, false, MOD_POLYMOD_CODENAME)); } $view->setContent($objectsDatas); $view->show();
/** * Return the needed form field tag for current object field * * @param array $values : parameters values array(parameterName => parameterValue) in : * id : the form field id to set * @param multidimentionnal array $tags : xml2Array content of atm-function tag * @return string : the form field HTML tag * @access public */ function getInput($fieldID, $language, $inputParams) { if (isset($this->_objectValues[$fieldID])) { if (is_a($this->_objectValues[$fieldID], 'CMS_poly_object')) { if (isset($inputParams['prefix'])) { $prefixName = $inputParams['prefix']; unset($inputParams['prefix']); } else { $prefixName = ''; } //serialize all htmlparameters $htmlParameters = CMS_object_common::serializeHTMLParameters($inputParams); $html = ''; //get searched objects conditions $searchedObjects = is_array($this->_objectFieldsDefinition[$fieldID]->getParameter('searchedObjects')) ? $this->_objectFieldsDefinition[$fieldID]->getParameter('searchedObjects') : array(); $objectsNames = CMS_poly_object_catalog::getListOfNamesForObject($this->_objectValues[$fieldID]->getObjectID(), false, $searchedObjects); if (is_array($objectsNames) && $objectsNames) { //append field id to html field parameters (if not already exists) $htmlParameters .= !isset($inputParams['id']) ? ' id="' . $prefixName . $this->_objectFieldsDefinition[$fieldID]->getID() . '_0"' : ''; if (isset($inputParams['hidden']) && ($inputParams['hidden'] == 'true' || $inputParams['hidden'] == 1)) { //create field value $value = isset($inputParams['value']) ? $inputParams['value'] : $this->_polyObjectValues[$fieldID]->getValue(); $html .= '<input type="hidden"' . $htmlParameters . ' name="' . $prefixName . $this->_objectFieldsDefinition[$fieldID]->getID() . '_0" value="' . $value . '" />' . "\n"; } else { $html .= '<select name="' . $prefixName . $this->_objectFieldsDefinition[$fieldID]->getID() . '_0"' . $htmlParameters . '> <option value="0">' . $language->getMessage(self::MESSAGE_POLYMOD_CHOOSE_OBJECT) . '</option>'; foreach ($objectsNames as $objectID => $objectName) { $selected = is_object($this->_polyObjectValues[$fieldID]) && $this->_polyObjectValues[$fieldID]->getValue() == $objectID || $inputParams['defaultvalue'] == $objectID && (!is_object($this->_polyObjectValues[$fieldID]) || !$this->_polyObjectValues[$fieldID]->getValue()) ? ' selected="selected"' : ''; $html .= '<option value="' . $objectID . '"' . $selected . '>' . io::htmlspecialchars(io::decodeEntities($objectName)) . '</option>' . "\n"; } $html .= '</select>'; } if (POLYMOD_DEBUG) { $html .= '<span class="admin_text_alert"> (Field : ' . $fieldID . ' - Value : ' . $this->_polyObjectValues[$fieldID]->getValue() . ' - objectID : ' . $this->_objectValues[$fieldID]->getObjectID() . ')</span>'; } } else { $html .= $language->getMessage(self::MESSAGE_POLYMOD_EMPTY_OBJECTS_SET); } //append html hidden field which store field name if ($html) { $html .= '<input type="hidden" name="polymodFields[' . $this->_objectFieldsDefinition[$fieldID]->getID() . ']" value="' . $this->_objectFieldsDefinition[$fieldID]->getID() . '" />'; } return $html; } elseif (is_object($this->_objectValues[$fieldID])) { //return html for other type of objects fields return $this->_objectValues[$fieldID]->getInput($fieldID, $language, $inputParams); } } return ''; }
foreach ($modulesValidations as $codename => $moduleValidations) { //if module is not standard, echo its name, the number of validations to do and a link to its admin frontend if ($codename == MOD_STANDARD_CODENAME) { $modLabel = $cms_language->getMessage(MESSAGE_PAGE_STANDARD_MODULE_LABEL); } else { $mod = CMS_modulesCatalog::getByCodename($codename); $modLabel = $mod->getLabel($cms_language); } //sort the validations by type label $validationsSorted = array(); foreach ($moduleValidations as $validation) { $validationsSorted[$validation->getValidationTypeLabel()][] = $validation; } ksort($validationsSorted); foreach ($validationsSorted as $label => $validations) { $label = io::decodeEntities($label); $validation = $validations[0]; $validationsType['validationsType'][] = array('id' => $count, 'module' => $codename, 'editions' => $validation->getEditions(), 'label' => $modLabel . ' : ' . $label . ' : ' . sizeof($validations) . ' ' . $cms_language->getMessage(MESSAGE_PAGE_VALIDATIONS_PENDING_COUNT)); if ($codename == $module && $validation->getEditions() & $editions) { $selectedValidations = $count; } $count++; } } } //json encode validations types $validationsType = sensitiveIO::jsonEncode($validationsType); //get records / pages $recordsPerPage = CMS_session::getRecordsPerPage(); $jscontent = <<<END \tvar validationsWindow = Ext.getCmp('{$winId}');
/** * Treat given content tag by this module for the specified treatment mode, visualization mode and object. * * @param string $tag The CMS_XMLTag. * @param string $tagContent previous tag content. * @param integer $treatmentMode The current treatment mode (see constants on top of CMS_modulesTags class for accepted values). * @param integer $visualizationMode The current visualization mode (see constants on top of cms_page class for accepted values). * @param object $treatedObject The reference object to treat. * @param array $treatmentParameters : optionnal parameters used for the treatment. Usually an array of objects. * @return string the tag content treated. * @access public */ function treatWantedTag(&$tag, $tagContent, $treatmentMode, $visualizationMode, &$treatedObject, $treatmentParameters) { switch ($treatmentMode) { case MODULE_TREATMENT_BLOCK_TAGS: return parent::treatWantedTag($tag, $tagContent, $treatmentMode, $visualizationMode, $treatedObject, $treatmentParameters); break; case MODULE_TREATMENT_CLIENTSPACE_TAGS: return parent::treatWantedTag($tag, $tagContent, $treatmentMode, $visualizationMode, $treatedObject, $treatmentParameters); break; case MODULE_TREATMENT_PAGECONTENT_TAGS: if (!$treatedObject instanceof CMS_page) { $this->raiseError('$treatedObject must be a CMS_page object'); return false; } switch ($tag->getName()) { case "span": $ids = explode('-', $tag->getAttribute('id')); $selectedPluginID = (int) $ids[1]; $selectedItem = (int) $ids[2]; //then create the code to paste for the current selected object if any if (sensitiveIO::isPositiveInteger($selectedItem) && sensitiveIO::isPositiveInteger($selectedPluginID)) { //get plugin $selectedPlugin = new CMS_poly_plugin_definitions($selectedPluginID); //get plugin definition $definition = $selectedPlugin->getValue('compiledDefinition'); //set parsing parameters $parameters = array(); $parameters['itemID'] = $selectedItem; $parameters['pageID'] = $treatedObject->getID(); $parameters['public'] = $visualizationMode == PAGE_VISUALMODE_HTML_PUBLIC || $visualizationMode == PAGE_VISUALMODE_PRINT || $visualizationMode == PAGE_VISUALMODE_HTML_PUBLIC_INDEXABLE ? true : false; //get originaly selected text if (!$selectedPlugin->needSelection()) { $parameters['selection'] = ''; } else { $hasSelection = preg_match('#<!--(.*)-->#s', $tag->getInnerContent(), $matches); $parameters['selection'] = io::decodeEntities($hasSelection ? $matches[1] : $tag->getInnerContent()); //$parameters['selection'] = io::decodeEntities($tag->getInnerContent()); } $tagContent = '<?php $parameters = ' . var_export($parameters, true) . ';' . "\n" . io::substr($definition, 5); //save in global var the page ID who need this module so we can add the header code later. CMS_module::moduleUsage($treatedObject->getID(), $this->_codename, array('block' => true)); //Cache management if ($parameters['public']) { //create definition hash $cacheHash = md5(serialize(array('definition' => $tagContent, 'parameters' => $parameters))); $tagContent = CMS_cache::wrapCode($cacheHash, $tagContent); } } return $tagContent; break; } break; case MODULE_TREATMENT_PAGEHEADER_TAGS: $content = parent::treatWantedTag($tag, $tagContent, $treatmentMode, $visualizationMode, $treatedObject, $treatmentParameters); if ($treatedObject instanceof CMS_page && $tag->getName() === "atm-meta-tags") { $oembed = CMS_polymod_oembed_definition_catalog::getByCodename($treatedObject->getCodename()); if ($oembed && CMS_poly_object_catalog::getModuleCodenameForObjectType($oembed->getObjectdefinition()) === $this->_codename) { $content .= '<?php ' . "\n" . 'echo CMS_polymod_oembed_definition::getDiscoveryEndpoint(); ?>'; } } return $content; break; case MODULE_TREATMENT_WYSIWYG_INNER_TAGS: switch ($tag->getName()) { case "span": global $cms_language; $ids = explode('-', $tag->getAttribute('id')); $selectedPluginID = (int) $ids[1]; $selectedItem = (int) $ids[2]; //then create the code to paste for the current selected object if any if (sensitiveIO::isPositiveInteger($selectedItem) && sensitiveIO::isPositiveInteger($selectedPluginID)) { //get plugin $selectedPlugin = new CMS_poly_plugin_definitions($selectedPluginID); //get selected item $item = CMS_poly_object_catalog::getObjectByID($selectedItem, false, $visualizationMode == PAGE_VISUALMODE_HTML_PUBLIC || $visualizationMode == PAGE_VISUALMODE_PRINT || $visualizationMode == PAGE_VISUALMODE_HTML_PUBLIC_INDEXABLE ? true : false); if ($item && !$item->hasError()) { //get originaly selected text if any $selectedText = ''; if ($selectedPlugin->needSelection()) { $hasSelection = preg_match('#<!--(.*)-->#s', $tag->getInnerContent(), $matches); $selectedText = $hasSelection ? $matches[1] : $tag->getInnerContent(); $tagContent = '<span id="polymod-' . $selectedPluginID . '-' . $selectedItem . '" class="polymod" title="' . io::htmlspecialchars($selectedPlugin->getLabel($cms_language) . ' : ' . trim($item->getLabel($cms_language))) . '">' . $selectedText . '</span>'; } else { $tagContent = '<span id="polymod-' . $selectedPluginID . '-' . $selectedItem . '" class="polymod" title="' . io::htmlspecialchars($selectedPlugin->getLabel($cms_language) . ' : ' . trim($item->getLabel($cms_language))) . '">' . CMS_poly_definition_functions::pluginCode($selectedPluginID, $selectedItem, '', $visualizationMode == PAGE_VISUALMODE_HTML_PUBLIC || $visualizationMode == PAGE_VISUALMODE_PRINT || $visualizationMode == PAGE_VISUALMODE_HTML_PUBLIC_INDEXABLE ? true : false, true) . '</span>'; } } else { $tagContent = ''; } } //strip cache comment $tagContent = preg_replace('#<!--{cache:(.*)}-->#Us', '', $tagContent); //encode all ampersand without reencode already encoded ampersand $tagContent = sensitiveIO::reencodeAmpersand($tagContent); return $tagContent; break; } return $tagContent; break; case MODULE_TREATMENT_WYSIWYG_OUTER_TAGS: switch ($tag->getName()) { case "span": $ids = explode('-', $tag->getAttribute('id')); $selectedPluginID = (int) $ids[1]; $selectedItem = (int) $ids[2]; //then create the code to paste for the current selected object if any if (sensitiveIO::isPositiveInteger($selectedItem) && sensitiveIO::isPositiveInteger($selectedPluginID)) { //get plugin $selectedPlugin = new CMS_poly_plugin_definitions($selectedPluginID); //get originaly selected text if any $selectedText = $commentSelectedText = ''; if ($selectedPlugin->needSelection()) { $hasSelection = preg_match('#<!--(.*)-->#s', $tag->getInnerContent(), $matches); $selectedText = $hasSelection ? $matches[1] : $tag->getInnerContent(); $commentSelectedText = '<!--' . ($hasSelection ? $matches[1] : $tag->getInnerContent()) . '-->'; } $tagContent = '<span id="polymod-' . $selectedPluginID . '-' . $selectedItem . '" class="polymod">' . "\n" . '<?php echo CMS_poly_definition_functions::pluginCode(\'' . $selectedPluginID . '\', \'' . $selectedItem . '\', ' . var_export($selectedText, true) . ', true); ?>' . "\n" . $commentSelectedText . '</span>'; } return $tagContent; break; } return $tagContent; break; } return $tag->getContent(); }
/** * Sets Email footer * * @param String $footer * @return void * @access public * */ function setFooter($footer) { $this->_footer = io::decodeEntities($footer); }
/** * Return a wysiwyg plugin output for given parameters * * @param integer $pluginID : the plugin id to use * @param integer $itemID : the item id to use * @param string $selection : the selected wysiwyg text if any * @param boolean $public : the data status * @param boolean $pluginView : is this plugin is intended to be shown in wysiwyg view ? (default false) * @return string : the plugin output * @access public * @static */ static function pluginCode($pluginID, $itemID, $selection, $public = false, $pluginView = false) { global $cms_user; //then create the code to paste for the current selected object if any if (sensitiveIO::isPositiveInteger($itemID) && sensitiveIO::isPositiveInteger($pluginID)) { //get plugin $plugin = new CMS_poly_plugin_definitions($pluginID); //set execution parameters $parameters = array(); $parameters['itemID'] = $itemID; $parameters['public'] = $public; if ($pluginView) { $parameters['plugin-view'] = true; } //get originaly selected text if (!$plugin->needSelection()) { $parameters['selection'] = ''; } else { $parameters['selection'] = io::decodeEntities($selection); } //this line is used to optimise text fields (see CMS_object_text) which use a lot of plugin codes. //in this case, items are searched before then put in this global var so it is not necessary to do one search for each of them if (isset($GLOBALS['polymod']['preparedItems'][$plugin->getValue('objectID')][$itemID])) { $parameters['item'] = $GLOBALS['polymod']['preparedItems'][$plugin->getValue('objectID')][$itemID]; } //eval item content ob_start(); eval(sensitiveIO::sanitizeExecCommand(sensitiveIO::stripPHPTags($plugin->getValue('compiledDefinition')))); $data = ob_get_contents(); ob_end_clean(); return $data; } }