public function __construct(LoggerInterface $Logger, Request $Request, RequestContext $RequestContext, TransactionManagerInterface $TransactionManager, Nonces $Nonces, Permissions $Permissions, DateFactory $DateFactory, ModelMapper $ModelMapper, Session $Session, Response $Response, $isCommandLine)
 {
     $this->Logger = $Logger;
     $this->Request = $Request;
     $this->Response = $Response;
     $this->RequestContext = $RequestContext;
     $this->TransactionManager = $TransactionManager;
     $this->Permissions = $Permissions;
     $this->Nonces = $Nonces;
     $this->DateFactory = $DateFactory;
     $this->ModelMapper = $ModelMapper;
     $this->Session = $Session;
     $this->isCommandLine = $isCommandLine;
     $this->params = $Request->getParameters();
     $this->rawParams = $Request->getRawParameters();
 }
 /**
  * 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'));
 }