public function delete() { $this->checkNonce(); $data = array(); $noderef = $this->getNodeRef(); $mergenoderef = null; $mergenodeslug = $this->Request->getParameter('MergeNodeSlug'); if (!empty($mergenodeslug)) { $mergenoderef = new NodeRef($noderef->getElement(), $mergenodeslug); } $this->RegulatedNodeService->delete($noderef, $mergenoderef); $data[] = array('SiteSlug' => $noderef->getSite()->getSlug(), 'ElementSlug' => $noderef->getElement()->getSlug(), 'NodeSlug' => $noderef->getSlug(), 'Success' => true); if ($mergenoderef != null) { $data[0]['MergeNodeSlug'] = $mergenodeslug; } $this->bindToActionDatasource($data); return new View($this->successView()); }
/** * Store the temporary-zipped-media nodes as proper media nodes. * * @throws MediaServiceException * @param $params * @return */ protected function _storeTemporary($params) { if (empty($params['NodeRef'])) { throw new MediaServiceException('NodeRef must be specified'); } list($element, $slug) = explode(':', $params['NodeRef']); $tmpParams = array('ElementSlug' => $element, 'NodeSlug' => $slug); // get node with all tags $node = $this->getNode($tmpParams, 'all'); // will spit error if not found $nodeTitle = $node->Title; $nodeSlug = $node->Slug; // if a custom title is specified, override existing title & slug if (!empty($params['Title']) && $params['Title'] !== $node->Title) { $nodeTitle = $params['Title']; $nodeSlug = SlugUtils::createSlug($nodeTitle); } $nodeRef = new NodeRef($this->ElementService->getBySlug($params['ElementSlug']), $nodeSlug); $nodeRef = $this->NodeService->generateUniqueNodeRef($nodeRef, $nodeTitle); $params['Slug'] = $nodeRef->getSlug(); $rawParams = $this->Request->getRawParameters(); // Clean the param keys removing uid foreach ($params as $key => $value) { if (preg_match('/^#/', $key)) { $nkey = preg_replace('/-uid\\d+$/', '', $key); if (strcmp($nkey, $key) == 0) { continue; } $params[$nkey] = $params[$key]; $rawParams[$nkey] = $rawParams[$key]; unset($params[$key]); unset($rawParams[$key]); } } foreach (array('In', 'Out') as $dir) { // Clean the _partials if (!empty($params[$dir . 'Tags_partials'])) { $newPartials = array(); $partials = StringUtils::smartSplit($params[$dir . 'Tags_partials'], ',', '"', '\\"'); foreach ($partials as $p) { $newPartials[] = preg_replace('/-uid\\d+$/', '', $p); } $params[$dir . 'Tags_partials'] = implode(',', $newPartials); $rawParams[$dir . 'Tags_partials'] = implode(',', $newPartials); } // Clean the tags if (isset($params[$dir . 'Tags']) && is_array($params[$dir . 'Tags'])) { foreach ($params[$dir . 'Tags'] as $key => $value) { $nkey = preg_replace('/-uid\\d+$/', '', $key); if (strcmp($nkey, $key) == 0) { continue; } $params[$dir . 'Tags'][$nkey] = $params[$dir . 'Tags'][$key]; $rawParams[$dir . 'Tags'][$nkey] = $rawParams[$dir . 'Tags'][$key]; unset($params[$dir . 'Tags'][$key]); unset($rawParams[$dir . 'Tags'][$key]); } } } // create node $newNode = $nodeRef->generateNode(); $this->NodeMapper->defaultsOnNode($newNode); //bind posted params to form backing object $this->NodeBinder->bindPersistentFields($newNode, $this->getErrors(), $params, $rawParams); $this->NodeBinder->fireAddBindEvents($newNode, $this->getErrors(), $params, $rawParams); $this->getErrors()->throwOnError(); $newNode->Title = $nodeTitle; // copy other permanent fields $newNode->ActiveDate = $node->ActiveDate; $newNode->Status = $node->Status; // clone all the file out tags $outTags = $node->getOutTags(); $newOutTags = array(); foreach ($outTags as $tag) { if ($tag->getTagElement() == 'file') { $tnode = $this->RegulatedNodeService->getByNodeRef($tag->getTagLinkNode()->getNodeRef(), new NodePartials('#parent-element')); $fileNode = $this->cloneFileNode($tnode, $newNode->getElement()); $newTag = new Tag($fileNode->getNodeRef(), '', $tag->getTagRole(), $tag->getTagValue(), $tag->getTagValueDisplay()); $newOutTags[] = $newTag; } else { $newOutTags[] = $tag; } } $newNode->addOutTags($newOutTags); // copy all in tags $newNode->addInTags($node->getInTags()); // and add the new node $newNode = $this->RegulatedNodeService->add($newNode); // then remove the temporary node $this->RegulatedNodeService->delete($node->getNodeRef()); // commit so the node is ready for the worker $this->TransactionManager->commit()->begin(); //----------- // Rebuild thumbnails asynchronously $workerParams = array('nodeRef' => '' . $newNode->getNodeRef(), 'forceRebuildExisting' => false); $this->GearmanService->doBackgroundJob('ImagesWorker', 'rebuildThumbnails', $workerParams, 'high'); return $this->RegulatedNodeService->getByNodeRef($newNode->getNodeRef(), new NodePartials('all', '#original.#url,#original.#width,#original.#height,#original.#size,#thumbnails=150.#url,#thumbnails=150.#size,#thumbnails=150.#height,#thumbnails=150.#width')); }