getLanguagePermissions() public static method

public static getLanguagePermissions ( $object, $user, $type ) : array | null
$object
$user
$type
return array | null
コード例 #1
0
 public function saveAction()
 {
     $object = Object::getById($this->getParam("id"));
     // set the latest available version for editmode
     $object = $this->getLatestVersion($object);
     $object->setUserModification($this->getUser()->getId());
     // data
     if ($this->getParam("data")) {
         $data = \Zend_Json::decode($this->getParam("data"));
         foreach ($data as $key => $value) {
             $fd = $object->getClass()->getFieldDefinition($key);
             if ($fd) {
                 if ($fd instanceof Object\ClassDefinition\Data\Localizedfields) {
                     $user = Tool\Admin::getCurrentUser();
                     if (!$user->getAdmin()) {
                         $allowedLanguages = Object\Service::getLanguagePermissions($object, $user, "lEdit");
                         if (!is_null($allowedLanguages)) {
                             $allowedLanguages = array_keys($allowedLanguages);
                             $submittedLanguages = array_keys($data[$key]);
                             foreach ($submittedLanguages as $submittedLanguage) {
                                 if (!in_array($submittedLanguage, $allowedLanguages)) {
                                     unset($value[$submittedLanguage]);
                                 }
                             }
                         }
                     }
                 }
                 if (method_exists($fd, "isRemoteOwner") and $fd->isRemoteOwner()) {
                     $remoteClass = Object\ClassDefinition::getByName($fd->getOwnerClassName());
                     $relations = $object->getRelationData($fd->getOwnerFieldName(), false, $remoteClass->getId());
                     $toAdd = $this->detectAddedRemoteOwnerRelations($relations, $value);
                     $toDelete = $this->detectDeletedRemoteOwnerRelations($relations, $value);
                     if (count($toAdd) > 0 or count($toDelete) > 0) {
                         $this->processRemoteOwnerRelations($object, $toDelete, $toAdd, $fd->getOwnerFieldName());
                     }
                 } else {
                     $object->setValue($key, $fd->getDataFromEditmode($value, $object));
                 }
             }
         }
     }
     // general settings
     // @TODO: IS THIS STILL NECESSARY?
     if ($this->getParam("general")) {
         $general = \Zend_Json::decode($this->getParam("general"));
         // do not allow all values to be set, will cause problems (eg. icon)
         if (is_array($general) && count($general) > 0) {
             foreach ($general as $key => $value) {
                 if (!in_array($key, array("o_id", "o_classId", "o_className", "o_type", "icon", "o_userOwner", "o_userModification"))) {
                     $object->setValue($key, $value);
                 }
             }
         }
     }
     $object = $this->assignPropertiesFromEditmode($object);
     // scheduled tasks
     if ($this->getParam("scheduler")) {
         $tasks = array();
         $tasksData = \Zend_Json::decode($this->getParam("scheduler"));
         if (!empty($tasksData)) {
             foreach ($tasksData as $taskData) {
                 $taskData["date"] = strtotime($taskData["date"] . " " . $taskData["time"]);
                 $task = new Model\Schedule\Task($taskData);
                 $tasks[] = $task;
             }
         }
         $object->setScheduledTasks($tasks);
     }
     if ($this->getParam("task") == "unpublish") {
         $object->setPublished(false);
     }
     if ($this->getParam("task") == "publish") {
         $object->setPublished(true);
     }
     // unpublish and save version is possible without checking mandatory fields
     if ($this->getParam("task") == "unpublish" || $this->getParam("task") == "version") {
         $object->setOmitMandatoryCheck(true);
     }
     if ($this->getParam("task") == "publish" && $object->isAllowed("publish") or $this->getParam("task") == "unpublish" && $object->isAllowed("unpublish")) {
         try {
             $object->save();
             $treeData = array();
             $treeData["qtipCfg"] = $object->getElementAdminStyle()->getElementQtipConfig();
             $this->_helper->json(array("success" => true, "treeData" => $treeData));
         } catch (\Exception $e) {
             \Logger::log($e);
             $this->_helper->json(array("success" => false, "message" => $e->getMessage()));
         }
     } elseif ($this->getParam("task") == "session") {
         //$object->_fulldump = true; // not working yet, donno why
         Tool\Session::useSession(function ($session) use($object) {
             $key = "object_" . $object->getId();
             $session->{$key} = $object;
         }, "pimcore_objects");
         $this->_helper->json(array("success" => true));
     } else {
         if ($object->isAllowed("save")) {
             try {
                 $object->saveVersion();
                 $this->_helper->json(array("success" => true));
             } catch (\Exception $e) {
                 \Logger::log($e);
                 $this->_helper->json(array("success" => false, "message" => $e->getMessage()));
             }
         }
     }
 }
コード例 #2
0
 /**
  * @param mixed $value
  * @param null $object
  * @param null $idMapper
  * @return mixed|null|Object\Localizedfield
  * @throws \Exception
  */
 public function getFromWebserviceImport($value, $object = null, $idMapper = null)
 {
     if (is_array($value)) {
         $validLanguages = Tool::getValidLanguages();
         if (!$idMapper || !$idMapper->ignoreMappingFailures()) {
             foreach ($value as $v) {
                 if (!in_array($v->language, $validLanguages)) {
                     throw new \Exception("Invalid language in localized fields");
                 }
             }
         }
         $localizedFields = $object->getLocalizedFields();
         if (!$localizedFields) {
             $localizedFields = new Object\Localizedfield();
         }
         if ($object instanceof Object\Concrete) {
             $localizedFields->setObject($object);
         }
         $user = Tool\Admin::getCurrentUser();
         $languagesAllowed = null;
         if ($user && !$user->isAdmin()) {
             $languagesAllowed = Object\Service::getLanguagePermissions($object, $user, "lEdit");
             if ($languagesAllowed) {
                 $languagesAllowed = array_keys($languagesAllowed);
             }
         }
         foreach ($value as $field) {
             if ($field instanceof \stdClass) {
                 $field = Tool\Cast::castToClass("\\Pimcore\\Model\\Webservice\\Data\\Object\\Element", $field);
             }
             if ($idMapper && $idMapper->ignoreMappingFailures()) {
                 if (!in_array($field->language, $validLanguages)) {
                     continue;
                 }
             }
             if ($languagesAllowed && !in_array($field->language, $languagesAllowed)) {
                 //TODO needs to be discussed. Maybe it is better to throw an exception instead of ignoring
                 //the language
                 continue;
             }
             if (!$field instanceof Model\Webservice\Data\Object\Element) {
                 throw new \Exception("Invalid import data in field [ {$field->name} ] for language [ {$field->language} ] in localized fields [ " . $this->getName() . " ]");
             }
             $fd = $this->getFielddefinition($field->name);
             if (!$fd instanceof Object\ClassDefinition\Data) {
                 if ($idMapper && $idMapper->ignoreMappingFailures()) {
                     continue;
                 }
                 throw new \Exception("Unknown field [ {$field->name} ] for language [ {$field->language} ] in localized fields [ " . $this->getName() . " ] ");
             } else {
                 if ($fd->getFieldtype() != $field->type) {
                     throw new \Exception("Type mismatch for field [ {$field->name} ] for language [ {$field->language} ] in localized fields [ " . $this->getName() . " ]. Should be [ " . $fd->getFieldtype() . " ], but is [ " . $field->type . " ] ");
                 }
             }
             $localizedFields->setLocalizedValue($field->name, $this->getFielddefinition($field->name)->getFromWebserviceImport($field->value, $object, $idMapper), $field->language);
         }
         return $localizedFields;
     } else {
         if (!empty($value)) {
             throw new \Exception("Invalid data in localized fields");
         } else {
             return null;
         }
     }
 }