public function replace(Node $node)
 {
     if (!$node->getNodeRef()->isFullyQualified()) {
         return $this->add($node);
     }
     if ($this->refExists($node->getNodeRef())) {
         return $this->edit($node);
     } else {
         return $this->add($node);
     }
 }
 public function loadAudioTagsCms($nothing, $nothing, Node $node)
 {
     if ($node->getNodePartials()->getOutPartials() != "") {
         $tagDefs = $node->getNodeRef()->getElement()->Schema->getTagDefs();
         foreach ($tagDefs as $k => $tagDef) {
             if ($tagDef->Partial->TagAspect == 'audio') {
                 $node->getNodePartials()->increaseOutPartials('#' . $tagDef->Partial->TagRole . '.#original.#url');
             }
         }
     }
 }
 public function loadImageTagsThumbnailsCms($nothing, $nothing, Node $node)
 {
     return;
     if ($node->getNodePartials()->getOutPartials() != "") {
         $tagDefs = $node->getNodeRef()->getElement()->Schema->getTagDefs();
         foreach ($tagDefs as $k => $tagDef) {
             if ($tagDef->Partial->TagAspect == 'images') {
                 $node->getNodePartials()->increaseOutPartials('#' . $tagDef->Partial->TagRole . '.#thumbnails.#url,#' . $tagDef->Partial->TagRole . '.#thumbnails.#width,#' . $tagDef->Partial->TagRole . '.#thumbnails.#height');
             }
         }
     }
 }
 public function edit(Node $node)
 {
     $existingNode = $this->getByNodeRef($node->getNodeRef());
     $this->NodePermissions->checkThrow(__FUNCTION__, $node->getNodeRef(), $node, false);
     if ($node->getNodeRef()->getSlug() != $node->getSlug()) {
         $newNodeRef = new NodeRef($node->getNodeRef()->getElement(), $node->getSlug());
         $this->NodePermissions->checkThrow('rename', $node->getNodeRef(), $newNodeRef, false);
     }
     if ($existingNode->Status == 'deleted' && $node->Status != 'deleted') {
         return $this->undelete($node->getNodeRef());
     }
     if ($existingNode->Status != 'deleted' && $node->Status == 'deleted') {
         return $this->delete($node->getNodeRef());
     }
     if ($existingNode->Status != 'published' && $node->Status == 'published') {
         $this->NodePermissions->checkThrow('publish', $node->getNodeRef(), $node, false);
     }
     if ($existingNode->Status == 'published' && $node->Status != 'published') {
         $this->NodePermissions->checkThrow('unpublish', $node->getNodeRef(), $node, false);
     }
     return parent::edit($node);
 }
 protected function editInternal(Node $node)
 {
     $existingNode = $this->NodeLookupDAO->getByNodeRef($node->getNodeRef());
     $this->Logger->debug('Editing node [' . $node->getNodeRef() . '] with partials [' . $node->getNodePartials() . ']');
     // update the record
     $primaryKey = $this->NodeDBMeta->getPrimaryKey($node->getNodeRef());
     $id = $existingNode->getID();
     $node->{$primaryKey} = $id;
     $node->ID = $id;
     $db = $this->getConnectionForWrite($node->getNodeRef());
     $oldArray = $this->NodeMapper->nodeToPersistentArray($existingNode);
     $newArray = $this->NodeMapper->nodeToPersistentArray($node);
     // save meta
     $changedMeta = $this->NodeMetaDAO->saveMeta($db, $node->getNodeRef(), $id, $node->getNodePartials()->getMetaPartials(), $node->getMetas(), $node->getNodePartials()->getRestrictedMetaPartials());
     // save the tags
     $changedOut = $this->NodeTagsDAO->saveOutTags($db, $node->getNodeRef(), $id, $node->getNodePartials()->getOutPartials(), $node->getOutTags(), $node->getNodePartials()->getRestrictedOutPartials());
     $changedIn = $this->NodeTagsDAO->saveInTags($db, $node->getNodeRef(), $id, $node->getNodePartials()->getInPartials(), $node->getInTags(), $node->getNodePartials()->getRestrictedInPartials());
     if (array_intersect_key($oldArray, $newArray) != $newArray) {
         $newArray['ModifiedDate'] = $this->DateFactory->newStorageDate();
         $node->ModifiedDate = $newArray['ModifiedDate'];
         $db->updateRecord($db->quoteIdentifier($this->NodeDBMeta->getTableName($node->getNodeRef())), $newArray, "{$primaryKey} = {$db->quote($id)}");
     }
 }
 protected function validateMetas(Node $node, Node $obj, NodeSchema $schema, $mode)
 {
     $processed_metas = array();
     $metas = $obj->getMetas();
     // Check all metas passed against the meta defs.
     foreach ($metas as $meta) {
         // Ensure the meta has a meta_def
         $meta_def = $schema->getMetaDef($meta->getMetaName());
         $this->getErrors()->rejectIfInvalid($this->resolveField($node->getNodeRef(), $meta->getMetaName(), $obj instanceof Section ? $obj : null), 'meta', $meta_def->Title, $meta->getValue(), $meta_def->Validation);
         $processed_metas[] = $meta->getMetaName();
     }
     $meta_defs = $schema->getMetaDefs();
     // Check all meta defs that haven't been processed
     // These meta defs must only match partials that we have.
     $meta_partials = PartialUtils::unserializeMetaPartials($node->getNodePartials()->getMetaPartials());
     $re_meta_partials = PartialUtils::unserializeMetaPartials($node->getNodePartials()->getRestrictedMetaPartials());
     foreach ($meta_defs as $meta_def) {
         if (in_array($meta_def->Id, $processed_metas)) {
             continue;
         }
         if ($mode == 'edit' && !$this->metaInScope($schema, new Meta($meta_def->Id, ''), $meta_partials, $re_meta_partials)) {
             continue;
         }
         // Validate the meta def with a null value
         $this->getErrors()->rejectIfInvalid($this->resolveField($node->getNodeRef(), $meta_def->Id, $obj instanceof Section ? $obj : null), 'meta', $meta_def->Title, null, $meta_def->Validation);
         $processed_metas[] = $meta_def->Id;
     }
 }
 public function defaultsOnNode(Node &$node)
 {
     foreach ($this->NodeDBMeta->getPersistentFields() as $key) {
         $default = $this->NodeDBMeta->getDefault($key);
         if ($default != null && !isset($node->{$key})) {
             $node->{$key} = $this->TypeConverter->convertFromString($this->NodeDBMeta->getValidationExpression($key), $default);
         }
     }
     $metaDefs = $node->getNodeRef()->getElement()->getSchema()->getMetaDefs();
     foreach ($metaDefs as $metaDef) {
         $default = $metaDef->Default;
         if ($default != null && !$node->hasMeta($metaDef->Id)) {
             $node->setMeta($metaDef->Id, $this->TypeConverter->convertFromString($metaDef->Validation, $default));
         }
     }
 }
 protected function convertMeta(Node $node, NodeSchema &$schema, Errors &$errors, $name, $value, $rawValue)
 {
     $meta_def = $schema->getMetaDef($name);
     $validation = $meta_def->Validation->getValidationArray();
     $key = $meta_def->Id;
     $fieldTitle = $meta_def->Title;
     try {
         $value = $this->TypeConverter->convertFromString($meta_def->Validation, $value, $rawValue);
     } catch (TypeConversionException $tce) {
         $errors->addFieldError('invalid', $this->NodeValidator->resolveField($node->getNodeRef(), $key), 'field', $fieldTitle, $value, $tce->getMessage());
     }
     return $value;
 }
 public function loadNonFieldLike($nothing, $nothing, Node &$node)
 {
     $tagDefs = $node->getNodeRef()->getElement()->Schema->getTagDefs();
     foreach ($tagDefs as $k => $tagDef) {
         if (!$tagDef->isFieldlike()) {
             $params = $this->Request->getParameters();
             $direction = ucfirst($tagDef->Direction);
             $tagsArray = array();
             $hashed = '#' . ltrim($tagDef->Id, '#');
             if (array_key_exists($direction . 'Tags', $params) && is_array($params[$direction . 'Tags']) && array_key_exists($hashed, $params[$direction . 'Tags']) && is_array($params[$direction . 'Tags'][$hashed])) {
                 $tags = $params[$direction . 'Tags'][$hashed];
                 foreach ((array) $tags as $key => $tag) {
                     $tagsArray[] = new Tag($tag);
                 }
             }
             if ($direction == 'In') {
                 foreach ($tagsArray as $tag) {
                     $node->addInTag($tag);
                 }
             } else {
                 foreach ($tagsArray as $tag) {
                     $node->addOutTag($tag);
                 }
             }
         }
     }
 }
 /**
  * Build Node JSON structure with thumbnail information.
  */
 protected function _buildNodeJSON(Node $node, $includeOriginal = false, $includeThumbnails = false)
 {
     $data = new stdClass();
     $data->slug = $node->Slug;
     $data->element = $node->Element->Slug;
     $data->title = $node->Title;
     $data->status = $node->Status;
     $data->activeDate = $node->ActiveDate;
     $data->recordLink = $node->RecordLink;
     $data->sortOrder = $node->SortOrder;
     if ($includeOriginal) {
         $nodeRef = $node->getNodeRef();
         if ($nodeRef->getElement()->hasAspect('images') || $nodeRef->getElement()->hasAspect('temporary-zipped-media')) {
             // Build the original and thumbnail info as well
             foreach (array('url', 'size', 'width', 'height') as $f) {
                 $data->{$f} = $node->jump("#original.#{$f}");
                 if (is_numeric($data->{$f})) {
                     $data->{$f} = intval($data->{$f});
                 }
             }
         } else {
             // Include the URL for non image media
             $data->url = $node->jump("#original.#url");
         }
     }
     $json = $node->getMetaValue('#thumbnails-json');
     if ($json != null) {
         $thumbnails = JSONUtils::decode($json);
         if ($includeThumbnails) {
             $data->thumbnails = $thumbnails;
             $data->thumbnailsPending = (array) $this->_getPendingThumbnails($node->getElement()->getSlug(), $thumbnails);
         }
         foreach ($thumbnails as $thmb) {
             if ($thmb->value == $this->imagesThumbnailCmsSize) {
                 $data->thumbnailUrl = $thmb->url;
                 break;
             }
         }
     }
     return $data;
 }
 /**
  * Replaces the file associated with the file node then updates the node.
  *
  * @param Node $fileNode
  * @param Element $parentElement
  * @param string $newFile Full path to the new file
  * @param string $newFileName the new desired filename
  * @return Node
  */
 protected function replaceNodeFile(Node $fileNode, Element $parentElement, $newFile, $newFileName)
 {
     // get storage facility
     $fileElement = $fileNode->getNodeRef()->getElement();
     list($storageFacility, $sfParams) = $this->deriveStorageFacility($fileElement);
     $oldId = $fileNode->Title;
     // add the new file
     $newId = $storageFacility->findUniqueFileID($sfParams, $this->buildFilename($newFileName));
     $file = new StorageFacilityFile($newId, $newFile);
     $file = $storageFacility->putFile($sfParams, $file);
     // set the new id as title
     $fileNode->Title = $file->getID();
     // get metrics
     list($width, $height) = ImageUtils::getImageDimensions($newFile);
     // and mime-type
     $mimetype = FileSystemUtils::getMimetype($file->getExtension());
     // update the meta fields
     $fileNode->setMeta('#url', $file->getURL());
     $fileNode->setMeta('#mimetype', $mimetype);
     $fileNode->setMeta('#size', filesize($newFile));
     $fileNode->setMeta('#width', $width);
     $fileNode->setMeta('#height', $height);
     $fileNode->setMeta('#parent-element', $parentElement->Slug);
     // do the update
     $this->RegulatedNodeService->edit($fileNode);
     // if different ID, we need to remove old file,
     // but first make sure new record is committed
     if ($oldId != $newId) {
         // force commit changes
         $this->TransactionManager->commit()->begin();
         // delete existing file
         $storageFacility->deleteFile($sfParams, $oldId);
     }
     return $fileNode;
 }
 public function resolveLinkedNodes(Node $node, NodePartials $nodePartials = null, $forceReadWrite = true, $checkJumpPermissions = false)
 {
     $node->OutTags = $this->NodeTagsDAO->findOutTags(null, $node->getNodeRef(), null, $nodePartials->getOutPartials(), $forceReadWrite, $checkJumpPermissions, $nodePartials->getRestrictedOutPartials(), true, $node->OutTags);
     $node->InTags = $this->NodeTagsDAO->findInTags(null, $node->getNodeRef(), null, $nodePartials->getInPartials(), $forceReadWrite, $checkJumpPermissions, $nodePartials->getRestrictedInPartials(), true, $node->InTags);
     return $node;
 }