Beispiel #1
0
 public function save_editable_region()
 {
     // fix for 2.7.4 eip
     if (cmsController::getInstance()->getCurrentMode() != 'admin') {
         return self::old_eip_save_editable_region();
     }
     $iEntityId = getRequest('param0');
     $sPropName = getRequest('param1');
     $content = getRequest('data');
     $bIsObject = (bool) getRequest('is_object');
     if (is_array($content) && count($content) == 1) {
         $content = $content[0];
     } else {
         if (is_array($content) && isset($content[0])) {
             $temp = array();
             foreach ($content as $item) {
                 $temp[] = is_array($item) ? $item[0] : $item;
             }
             $content = $temp;
         }
     }
     $oEntity = $bIsObject ? umiObjectsCollection::getInstance()->getObject($iEntityId) : umiHierarchy::getInstance()->getElement($iEntityId);
     // Checking rights
     $bDisallowed = false;
     $permissions = permissionsCollection::getInstance();
     $userId = $permissions->getUserId();
     if (!$permissions->isSv($userId)) {
         if ($bIsObject) {
             $bDisallowed = !($oEntity->getOwnerId() == $userId);
             if ($bDisallowed) {
                 //Check module permissions
                 $object = selector::get('object')->id($iEntityId);
                 $module = $object->getModule();
                 $method = $object->getMethod();
                 if ($module && $method) {
                     $bDisallowed = !$permissions->isAllowedMethod($userId, $module, $method);
                 }
             }
         } else {
             list($r, $w) = $permissions->isAllowedObject($userId, $iEntityId);
             if (!$w) {
                 $bDisallowed = true;
             }
         }
     }
     if ($bDisallowed) {
         throw new publicAdminException(getLabel('error-no-permissions'));
     }
     $event = new umiEventPoint("systemModifyPropertyValue");
     $event->addRef("entity", $oEntity);
     $event->setParam("property", $sPropName);
     $event->addRef("newValue", $content);
     $event->setMode("before");
     try {
         $event->call();
     } catch (wrongValueException $e) {
         throw new publicAdminException($e->getMessage());
     }
     if ($oEntity instanceof iUmiHierarchyElement) {
         $backupModel = backupModel::getInstance();
         $backupModel->addLogMessage($oEntity->getId());
     }
     if ($bIsObject && !$this->checkAllowedColumn($oEntity, $sPropName)) {
         throw new publicAdminException(getLabel('error-no-permissions'));
     }
     if ($bIsObject && $sPropName == 'is_activated') {
         $guestId = $permissions->getGuestId();
         if ($iEntityId == SV_USER_ID) {
             throw new publicAdminException(getLabel('error-users-swtich-activity-sv'));
         }
         if ($iEntityId == $guestId) {
             throw new publicAdminException(getLabel('error-users-swtich-activity-guest'));
         }
         if ($iEntityId == $userId) {
             throw new publicAdminException(getLabel('error-users-swtich-activity-self'));
         }
     }
     $sPropValue = "";
     if ($oEntity) {
         $bOldVal = umiObjectProperty::$IGNORE_FILTER_INPUT_STRING;
         umiObjectProperty::$IGNORE_FILTER_INPUT_STRING = true;
         $oObject = !$bIsObject ? $oEntity->getObject() : $oEntity;
         $oldValue = null;
         try {
             if ($sPropName == 'name') {
                 if (is_string($content) && strlen($content)) {
                     $oldValue = $oEntity->name;
                     $oEntity->name = $content;
                     if ($oEntity instanceof iUmiHierarchyElement) {
                         $oEntity->h1 = $content;
                     }
                 }
                 $result = array('name' => $content);
             } else {
                 $property = $oObject->getPropByName($sPropName);
                 if ($property->getDataType() == 'date') {
                     $date = new umiDate();
                     $date->setDateByString($content);
                     $content = $date;
                 }
                 $oldValue = $oEntity->getValue($sPropName);
                 $oEntity->setValue($sPropName, $content);
                 if ($oEntity instanceof iUmiHierarchyElement && $sPropName == 'h1') {
                     $oEntity->name = $content;
                 }
                 $result = array('property' => $property);
                 translatorWrapper::get($property);
                 umiObjectPropertyWrapper::$showEmptyFields = true;
             }
         } catch (fieldRestrictionException $e) {
             throw new publicAdminException($e->getMessage());
         }
         $oEntity->commit();
         umiObjectProperty::$IGNORE_FILTER_INPUT_STRING = $bOldVal;
         $oObject->update();
         $oEntity->update();
         if ($oEntity instanceof umiEntinty) {
             $oEntity->commit();
         }
         $event->setParam("oldValue", $oldValue);
         $event->setParam("newValue", $content);
         $event->setMode("after");
         $event->call();
         $this->setData($result);
         return $this->doData();
     }
 }
 protected static function saveFieldValue($name, $value, $target, $save = false)
 {
     $hierarchy = umiHierarchy::getInstance();
     if ($i = strpos($name, '[')) {
         if (preg_match_all("/\\[([^\\[^\\]]+)\\]/", substr($name, $i), $out)) {
             $optionParams = array('filter' => array(), 'field-type' => null);
             foreach ($out[1] as $param) {
                 if (strpos($param, ':')) {
                     list($seekType, $seekValue) = explode(':', $param);
                     $optionParams['filter'][$seekType] = $seekValue;
                 } else {
                     $optionParams['field-type'] = $param;
                 }
             }
         }
         $name = substr($name, 0, $i);
     } else {
         $optionParams = null;
     }
     if ($name != 'name' && $name != 'alt_name') {
         $object = $target instanceof iUmiHierarchyElement ? $target->getObject() : $target;
         $property = $object->getPropByName($name);
         if ($property instanceof iUmiObjectProperty == false) {
             throw new publicException(getLabel('eip-no-field') . ": \"{$name}\"");
         }
         $field = $property->getField();
     }
     if ($name == 'name' || $name == 'alt_name') {
         $type = 'string';
     } else {
         $type = $field->getDataType();
     }
     if (is_string($value)) {
         $value = __editor_content::filterStringValue($value);
     }
     $oldLink = null;
     $newLink = null;
     if ($save) {
         umiObjectProperty::$IGNORE_FILTER_INPUT_STRING = true;
         if ($name == 'h1' || $name == 'name') {
             $value = strip_tags($value);
             $value = str_replace(array(' ', '&'), array(' ', '&'), $value);
             if ($name === 'name') {
                 // При изменении name: если name==h1, name=h1=new_value
                 // При изменении name: если name!=h1, name=new_value.
                 if ($target->getName() === (string) $target->getValue('h1')) {
                     $target->setValue('h1', $value);
                 }
                 $target->setName($value);
             } else {
                 // При изменении h1: если h1 == name && name=='', name=h1=new_value
                 // При изменении h1: если h1 == name и name != '', h1=new_value
                 // При изменении h1: если h1 != name, h1=new_value
                 if ($target->getName() === (string) $target->getValue('h1') && $target->getName() === '') {
                     $target->setName($value);
                 }
                 $target->setValue('h1', $value);
             }
             if ($target instanceof iUmiHierarchyElement) {
                 $oldLink = $hierarchy->getPathById($target->id);
                 $altName = $target->getAltName();
                 if (!$altName || substr($altName, 0, 1) == '_') {
                     $target->setAltName($value);
                     $target->commit();
                 }
                 $newLink = $hierarchy->getPathById($target->id, false, false, true);
             }
         } elseif ($name == 'alt_name') {
             if ($target instanceof iUmiHierarchyElement) {
                 $target->setAltName($value);
                 $target->commit();
                 $newLink = $hierarchy->getPathById($target->id, false, false, true);
             }
         } else {
             if ($type == 'date') {
                 $date = new umiDate();
                 $date->setDateByString($value);
                 $value = $date;
                 unset($date);
                 $value = $value->getFormattedDate('U');
             }
             if ($type == 'optioned') {
                 $seekType = getArrayKey($optionParams, 'field-type');
                 $filter = getArrayKey($optionParams, 'filter');
                 $oldValue = $target->getValue($name);
                 foreach ($oldValue as $i => $v) {
                     foreach ($filter as $t => $s) {
                         if (getArrayKey($v, $t) != $s) {
                             continue 2;
                         }
                         $oldValue[$i][$seekType] = $value;
                     }
                 }
                 $value = $oldValue;
                 unset($oldValue);
             }
             if ($type == 'symlink') {
                 $value = $value;
             }
             if ($type == 'wysiwyg') {
                 $out = array();
                 if (preg_match_all("/href=[\"']?([^ ^\"^']+)[\"']?/i", $value, $out)) {
                     foreach ($out[1] as $link) {
                         $id = $hierarchy->getIdByPath($link);
                         if ($id) {
                             $link = str_replace("/", "\\/", $link);
                             $value = preg_replace("/(href=[\"']?)" . $link . "([\"']?)/i", "\\1%content get_page_url({$id})%\\2", $value);
                         }
                     }
                 }
             } else {
                 $value = str_replace(array(' ', '&'), array(' ', '&'), $value);
             }
             if (in_array($type, array('text', 'string', 'int', 'float', 'price', 'date', 'tags', 'counter'))) {
                 $value = preg_replace("/<br ?\\/?>/i", "\n", $value);
                 $value = strip_tags($value);
             }
             if (in_array($type, array('img_file', 'swf_file', 'file', 'video_file')) && $value) {
                 if (substr($value, 0, 1) != '.') {
                     $value = '.' . $value;
                 }
             }
             $target->setValue($name, $value);
         }
         $target->commit();
         umiObjectProperty::$IGNORE_FILTER_INPUT_STRING = false;
         if ($target instanceof iUmiHierarchyElement) {
             $backup = backupModel::getInstance();
             $backup->fakeBackup($target->id);
         }
         $oEventPoint = new umiEventPoint("eipSave");
         $oEventPoint->setMode("after");
         $oEventPoint->setParam("field_name", $name);
         $oEventPoint->setParam("obj", $target);
         def_module::setEventPoint($oEventPoint);
     }
     if ($name == 'name') {
         $value = $target->getName();
     } else {
         $value = $target->getValue($name, $optionParams);
     }
     if ($save) {
         $value = xmlTranslator::executeMacroses($value);
     }
     if ($type == 'date') {
         if ($value) {
             $date = new umiDate();
             $date->setDateByString($value);
             $value = $date->getFormattedDate('Y-m-d H:i');
         } else {
             $value = '';
         }
     }
     if ($type == 'tags' && is_array($value)) {
         $value = implode(', ', $value);
     }
     if ($type == 'optioned' && !is_null($optionParams)) {
         $value = isset($value[0]) ? $value[0] : '';
         $type = getArrayKey($optionParams, 'field-type');
     }
     $result = array('attribute:name' => $name, 'attribute:type' => $type);
     if ($type == 'relation') {
         $items_arr = array();
         if ($value) {
             if (!is_array($value)) {
                 $value = array($value);
             }
             $objects = umiObjectsCollection::getInstance();
             foreach ($value as $objectId) {
                 $object = $objects->getObject($objectId);
                 $items_arr[] = $object;
             }
         }
         $result['attribute:guide-id'] = $field->getGuideId();
         if ($field->getFieldType()->getIsMultiple()) {
             $result['attribute:multiple'] = 'multiple';
         }
         $type = selector::get('object-type')->id($field->getGuideId());
         if ($type && $type->getIsPublic()) {
             $result['attribute:public'] = 'public';
         }
         $result['nodes:item'] = $items_arr;
     } else {
         if ($type == 'symlink') {
             $result['nodes:page'] = is_array($value) ? $value : array();
         } else {
             $result['node:value'] = $value;
         }
     }
     if ($oldLink != $newLink) {
         $result['attribute:old-link'] = $oldLink;
         $result['attribute:new-link'] = $newLink;
     }
     return $result;
 }
 /**
  * TODO PHPDoc
  * TODO Корректные типы входных параметров
  * Вызов создания точки восстановления для страницы $cparam
  * @param Integer $cparam
  * @param String $cmodule
  * @param String $cmethod
  */
 public function backup_save($cparam = "", $cmodule = "", $cmethod = "")
 {
     return backupModel::getInstance()->save($cparam, $cmodule, $cmethod);
 }
 public function saveAddedElementData($ve62e4d22f2d8630f6e44e2b7c3f70ddc)
 {
     $v8b1dc169bf460ee884fceef66c6607d6 = cmsController::getInstance();
     $v6942e8fa62b3cc9d93881a58210e2fd7 = umiHierarchyTypesCollection::getInstance();
     $v0e8133eb006c0f85ed9444ae07a60842 = umiObjectTypesCollection::getInstance();
     $vb81ca7c0ccaa77e7aa91936ab0070695 = umiHierarchy::getInstance();
     $vfed36e93a0509e20f2dc96cbbd85b678 = templatesCollection::getInstance();
     $v22884db148f0ffb0d830ba431102b0b5 = get_class($this);
     if (isset($ve62e4d22f2d8630f6e44e2b7c3f70ddc['module'])) {
         $v22884db148f0ffb0d830ba431102b0b5 = $ve62e4d22f2d8630f6e44e2b7c3f70ddc['module'];
     }
     $vea9f6aca279138c58f705c8d4cb4b8ce = $ve62e4d22f2d8630f6e44e2b7c3f70ddc['type'];
     $vd0e45878043844ffc41aac437e86b602 = $ve62e4d22f2d8630f6e44e2b7c3f70ddc['parent'];
     if ($this->checkAllowedElementType($ve62e4d22f2d8630f6e44e2b7c3f70ddc) == false) {
         throw new wrongElementTypeAdminException(getLabel("error-unexpected-element-type"));
     }
     if ($v22884db148f0ffb0d830ba431102b0b5 == "content" && $vea9f6aca279138c58f705c8d4cb4b8ce == "page") {
         $vea9f6aca279138c58f705c8d4cb4b8ce = "";
     }
     if ($vd0e45878043844ffc41aac437e86b602) {
         $this->checkElementPermissions($vd0e45878043844ffc41aac437e86b602->getId(), permissionsCollection::E_CREATE_ALLOWED);
     }
     $v4119639092e62c55ea8be348e4d9260d = new umiEventPoint("systemCreateElement");
     $v4119639092e62c55ea8be348e4d9260d->addRef("inputData", $ve62e4d22f2d8630f6e44e2b7c3f70ddc);
     $v4119639092e62c55ea8be348e4d9260d->setMode("before");
     $v4119639092e62c55ea8be348e4d9260d->call();
     $vcfb14cbbb0da97c5d6fc00de2231984b = $vfed36e93a0509e20f2dc96cbbd85b678->getHierarchyTypeTemplate($v22884db148f0ffb0d830ba431102b0b5, $vea9f6aca279138c58f705c8d4cb4b8ce);
     if ($vd0e45878043844ffc41aac437e86b602 instanceof iUmiHierarchyElement) {
         $v6be379826b20cc58475f636e33f4606b = $vd0e45878043844ffc41aac437e86b602->getId();
         $v78e6dd7a49f5b0cb2106a3a434dd5c86 = $vd0e45878043844ffc41aac437e86b602->getLangId();
         $v662cbf1253ac7d8750ed9190c52163e5 = $vd0e45878043844ffc41aac437e86b602->getDomainId();
         if ($vcfb14cbbb0da97c5d6fc00de2231984b !== false) {
             $vd02e12eb6d6c3f6ebd763197df01e211 = $vcfb14cbbb0da97c5d6fc00de2231984b;
         } else {
             $vb6aaa85825f7ae803766f43e00873d06 = umiHierarchy::getInstance()->getDominantTplId($v6be379826b20cc58475f636e33f4606b);
             if ($vb6aaa85825f7ae803766f43e00873d06) {
                 $vd02e12eb6d6c3f6ebd763197df01e211 = $vb6aaa85825f7ae803766f43e00873d06;
             } else {
                 throw new coreException(getLabel('error-dominant-template-not-found'));
             }
         }
     } else {
         $v6be379826b20cc58475f636e33f4606b = 0;
         $v78e6dd7a49f5b0cb2106a3a434dd5c86 = $v8b1dc169bf460ee884fceef66c6607d6->getCurrentLang()->getId();
         $v662cbf1253ac7d8750ed9190c52163e5 = $v8b1dc169bf460ee884fceef66c6607d6->getCurrentDomain()->getId();
         if ($v84ad1b49a83349491077e094ad5c5d1b = $this->getFloatedDomain()) {
             $v662cbf1253ac7d8750ed9190c52163e5 = $v84ad1b49a83349491077e094ad5c5d1b;
         }
         if ($vcfb14cbbb0da97c5d6fc00de2231984b !== false) {
             $vd02e12eb6d6c3f6ebd763197df01e211 = $vcfb14cbbb0da97c5d6fc00de2231984b;
         } else {
             $vd02e12eb6d6c3f6ebd763197df01e211 = $vfed36e93a0509e20f2dc96cbbd85b678->getDefaultTemplate()->getId();
         }
     }
     $this->checkDomainPermissions($v662cbf1253ac7d8750ed9190c52163e5);
     if (getRequest('template-id')) {
         $vd02e12eb6d6c3f6ebd763197df01e211 = getRequest('template-id');
     }
     $vb946c44d711ade3b061653732977d043 = $v6942e8fa62b3cc9d93881a58210e2fd7->getTypeByName($v22884db148f0ffb0d830ba431102b0b5, $vea9f6aca279138c58f705c8d4cb4b8ce);
     if ($vb946c44d711ade3b061653732977d043 instanceof iUmiHierarchyType) {
         $v0715f6d9497f93911417c9c324265771 = $vb946c44d711ade3b061653732977d043->getId();
     } else {
         throw new coreException(getLabel('error-element-type-detect-failed'));
     }
     if (is_null($vb068931cc450442b63f5b3d276ea4297 = getRequest('name'))) {
         throw new coreException(getLabel('error-require-name-param'));
     }
     if (is_null($vd84ff935144e00c3e1d395c2379aca47 = getRequest('alt-name'))) {
         $vd84ff935144e00c3e1d395c2379aca47 = $vb068931cc450442b63f5b3d276ea4297;
     }
     $v94757cae63fd3e398c0811a976dd6bbe = getArrayKey($ve62e4d22f2d8630f6e44e2b7c3f70ddc, 'type-id');
     if (!$v94757cae63fd3e398c0811a976dd6bbe && !($v94757cae63fd3e398c0811a976dd6bbe = getRequest("type-id"))) {
         $v94757cae63fd3e398c0811a976dd6bbe = $v0e8133eb006c0f85ed9444ae07a60842->getBaseType($v22884db148f0ffb0d830ba431102b0b5, $vea9f6aca279138c58f705c8d4cb4b8ce);
         if ($vd0e45878043844ffc41aac437e86b602 instanceof iUmiHierarchyElement) {
             $v5a509ca3ce95bc71bf833077b7d5a178 = $vb81ca7c0ccaa77e7aa91936ab0070695->getDominantTypeId($vd0e45878043844ffc41aac437e86b602->getId(), 1, $v0715f6d9497f93911417c9c324265771);
             if ($v5a509ca3ce95bc71bf833077b7d5a178) {
                 $v94757cae63fd3e398c0811a976dd6bbe = $v5a509ca3ce95bc71bf833077b7d5a178;
             }
         }
     }
     if (!$v94757cae63fd3e398c0811a976dd6bbe) {
         throw new coreException("Base type for {$v22884db148f0ffb0d830ba431102b0b5}::{$vea9f6aca279138c58f705c8d4cb4b8ce} doesn't exists");
     }
     $v7057e8409c7c531a1a6e9ac3df4ed549 = $vb81ca7c0ccaa77e7aa91936ab0070695->addElement($v6be379826b20cc58475f636e33f4606b, $v0715f6d9497f93911417c9c324265771, $vb068931cc450442b63f5b3d276ea4297, $vd84ff935144e00c3e1d395c2379aca47, $v94757cae63fd3e398c0811a976dd6bbe, $v662cbf1253ac7d8750ed9190c52163e5, $v78e6dd7a49f5b0cb2106a3a434dd5c86, $vd02e12eb6d6c3f6ebd763197df01e211);
     $v9bc65c2abec141778ffaa729489f3e87 = $v8b1dc169bf460ee884fceef66c6607d6->getModule('users');
     if ($v9bc65c2abec141778ffaa729489f3e87 instanceof users) {
         backupModel::getInstance()->save($v7057e8409c7c531a1a6e9ac3df4ed549);
         $v9bc65c2abec141778ffaa729489f3e87->setPerms($v7057e8409c7c531a1a6e9ac3df4ed549);
     }
     $v8e2dcfd7e7e24b1ca76c1193f645902b = $vb81ca7c0ccaa77e7aa91936ab0070695->getElement($v7057e8409c7c531a1a6e9ac3df4ed549);
     if ($v8e2dcfd7e7e24b1ca76c1193f645902b instanceof iUmiHierarchyElement) {
         $v854203cccade0bbe21be239a208aea49 = $v8e2dcfd7e7e24b1ca76c1193f645902b->getModule();
         $v2fa70149e2a7e75da2b0303d0a36a944 = $v8e2dcfd7e7e24b1ca76c1193f645902b->getMethod();
         if (!is_null($v4264c638e0098acb172519b0436db099 = getRequest('active'))) {
             $v41275a535677f79ff347e01bc530c176 = permissionsCollection::getInstance();
             $ve8701ad48ba05a91604e480dd60899a3 = $v41275a535677f79ff347e01bc530c176->getUserId();
             if ($v41275a535677f79ff347e01bc530c176->isAllowedMethod($ve8701ad48ba05a91604e480dd60899a3, $v8b1dc169bf460ee884fceef66c6607d6->getCurrentModule(), "publish") == false) {
                 $v4264c638e0098acb172519b0436db099 = false;
             }
             $v8e2dcfd7e7e24b1ca76c1193f645902b->setIsActive($v4264c638e0098acb172519b0436db099);
         }
         if (!is_null($ve1c6c9ef2fcbe75f26f815c4ef2e60b4 = getRequest('is-visible'))) {
             $v8e2dcfd7e7e24b1ca76c1193f645902b->setIsVisible($ve1c6c9ef2fcbe75f26f815c4ef2e60b4);
         }
         if (!is_null($vd02e12eb6d6c3f6ebd763197df01e211 = getRequest('template-id'))) {
             $v8e2dcfd7e7e24b1ca76c1193f645902b->setTplId($vd02e12eb6d6c3f6ebd763197df01e211);
         }
         if (!is_null($vf62baf4c4ead98d50d516eca0ac5a746 = getRequest('is-default'))) {
             $v8e2dcfd7e7e24b1ca76c1193f645902b->setIsDefault($vf62baf4c4ead98d50d516eca0ac5a746);
         }
         if (!is_null($vb068931cc450442b63f5b3d276ea4297 = getRequest('name'))) {
             $v8e2dcfd7e7e24b1ca76c1193f645902b->setValue('h1', $vb068931cc450442b63f5b3d276ea4297);
         }
         $va8cfde6331bd59eb2ac96f8911c4b666 = $v8e2dcfd7e7e24b1ca76c1193f645902b->getObject();
         $this->saveAddedObject($va8cfde6331bd59eb2ac96f8911c4b666);
         $v8e2dcfd7e7e24b1ca76c1193f645902b->commit();
         $v0c7f28926c50104e917a6cd58527573e = $v8e2dcfd7e7e24b1ca76c1193f645902b->getObject();
         if (!$v0c7f28926c50104e917a6cd58527573e->getValue("publish_status")) {
             $v0c7f28926c50104e917a6cd58527573e->setValue("publish_status", $this->getPageStatusIdByStatusSid());
             $v0c7f28926c50104e917a6cd58527573e->commit();
         }
         $vad255fe3eb36ab4782f3e471966df353 = new umiEventPoint("systemCreateElement");
         $vad255fe3eb36ab4782f3e471966df353->addRef("element", $v8e2dcfd7e7e24b1ca76c1193f645902b);
         $vad255fe3eb36ab4782f3e471966df353->setMode("after");
         $vad255fe3eb36ab4782f3e471966df353->call();
         $this->currentEditedElementId = $v7057e8409c7c531a1a6e9ac3df4ed549;
         return $v7057e8409c7c531a1a6e9ac3df4ed549;
     } else {
         throw new coreException("Can't get created element instance");
     }
 }