public function cloneActivity(Campaign $campaign, Activity $activity, $status = null) { /** @var Activity $clonedActivity */ $clonedActivity = clone $activity; $clonedActivity->setCampaign($campaign); $campaign->addActivity($clonedActivity); if ($status != null) { $clonedActivity->setStatus($status); } $this->em->persist($clonedActivity); // Clone all related Operations. $operations = $activity->getOperations(); if ($operations->count()) { $operationService = $this->container->get('campaignchain.core.operation'); foreach ($operations as $operation) { $operationService->cloneOperation($activity, $operation); } } $this->em->flush(); return $clonedActivity; }
/** * Compares the status message of an already scheduled Activity with the * content of a new/edited Activity. * * @param Activity $existingActivity * @param StatusBase $content * @return array */ protected function isUniqueContent(Activity $existingActivity, StatusBase $content) { /** @var StatusBase $existingStatus */ $existingStatus = $this->em->getRepository('CampaignChainOperationFacebookBundle:StatusBase')->findOneByOperation($existingActivity->getOperations()[0]); if ($existingStatus->getMessage() == $content->getMessage()) { return array('status' => false, 'message' => 'Same status message has already been scheduled: ' . '<a href="' . $this->router->generate('campaignchain_activity_facebook_publish_status_edit', array('id' => $existingActivity->getId())) . '">' . $existingActivity->getName() . '</a>. ' . 'Either change the message or leave at least ' . $this->maxDuplicateInterval . ' between yours and the other post.'); } else { return array('status' => true); } }