/** * Publish path * Create all needed Entities from JSON structure created by the Editor * @param \Innova\PathBundle\Entity\Path\Path $path * @throws \Exception * @return boolean */ public function publish(Path $path) { // We need to publish all linked resources to have a full working Path // Start Publishing $this->start($path); // Store existing steps to remove steps which no longer exist $existingSteps = $path->getSteps()->toArray(); // Publish steps for this path $toProcess = !empty($this->pathStructure->steps) ? $this->pathStructure->steps : array(); /*//echo "JSON steps : <br>\n";var_dump($this->pathStructure->steps);*/ $publishedSteps = $this->publishSteps(0, null, $toProcess); // Clean steps to remove $this->cleanSteps($publishedSteps, $existingSteps); // flush all steps $this->om->flush(); // replace ids $json = $this->replaceStepIds(); $json = $this->replaceStepConditionId($json); $json = $this->replaceCriteriagroupId($json); $json = $this->replaceCriteriaId($json); //echo "json final :".$json; // Re encode updated structure and update Path $this->path->setStructure($json); // Manage rights $this->manageRights(); // Mark Path as published $this->path->setPublished(true); $this->path->setModified(false); // Persist data $this->om->persist($this->path); $this->om->flush(); // End Publishing $this->end(); return true; }
/** * Publish path * Create all needed Entities from JSON structure created by the Editor. * * @param \Innova\PathBundle\Entity\Path\Path $path * * @throws \Exception * * @return bool */ public function publish(Path $path) { // We need to publish all linked resources to have a full working Path // Start Publishing $this->start($path); // Store existing steps to remove steps which no longer exist $existingSteps = $path->getSteps()->toArray(); // Publish steps for this path $toProcess = !empty($this->pathStructure->steps) ? $this->pathStructure->steps : []; $publishedSteps = $this->publishSteps(0, null, $toProcess); // Clean steps to remove $this->cleanSteps($publishedSteps, $existingSteps); // Flush all created Entities in order to generate their IDs (needed to update the JSON structure of the Path) $this->om->flush(); // Mark Path as published and not modified $this->path->setPublished(true); $this->path->setModified(false); // Re encode updated structure and update Path // When the Path is published, the structure is built from generated Entities // So we want to do this now to inject Entities IDs into the JSON structure $updatedStructure = $this->path->getStructure(); $this->path->setStructure($updatedStructure); // Manage rights $this->manageRights(); // Persist data $this->om->persist($this->path); $this->om->flush(); // End Publishing $this->end(); return true; }
/** * Import a Path into the Platform. * * @param string $structure * @param array $data * @param array $resourcesCreated * * @return Path */ public function import($structure, array $data, array $resourcesCreated = []) { // Create a new Path object which will be populated with exported data $path = new Path(); $pathData = $data['data']['path']; // Populate Path properties $path->setBreadcrumbs(!empty($pathData['breadcrumbs']) ? $pathData['breadcrumbs'] : false); $path->setDescription($pathData['description']); $path->setModified($pathData['modified']); $path->setSummaryDisplayed($pathData['summaryDisplayed']); $path->setCompleteBlockingCondition($pathData['completeBlockingCondition']); $path->setManualProgressionAllowed($pathData['manualProgressionAllowed']); // Create steps $stepData = $data['data']['steps']; if (!empty($stepData)) { $createdSteps = []; foreach ($stepData as $step) { $createdSteps = $this->stepManager->import($path, $step, $resourcesCreated, $createdSteps); } } // Inject empty structure into path (will be replaced by a version with updated IDs later in the import process) $path->setStructure($structure); return $path; }
/** * Edit existing path * @param \Innova\PathBundle\Entity\Path\Path $path * @return \Innova\PathBundle\Entity\Path\Path */ public function edit(Path $path) { // Check if JSON structure is built $structure = $path->getStructure(); if (empty($structure)) { // Initialize path structure $path->initializeStructure(); } // Set path as modified (= need publishing to be able to play path with new modifs) $path->setModified(true); $this->om->persist($path); // Update resource node if needed $resourceNode = $path->getResourceNode(); if ($path->getName() !== $resourceNode->getName()) { // Path name as changed => rename linked resource node $resourceNode->setName($path->getName()); $this->om->persist($resourceNode); } $this->om->flush(); return $path; }