/src/Zeega/DataBundle/Service/ProjectService.php

https://github.com/Zeega/Zeega · PHP · 133 lines · 100 code · 26 blank · 7 comment · 11 complexity · d28bfcebf45ec227d929493e1ec51f4e MD5 · raw file

  1. <?php
  2. namespace Zeega\DataBundle\Service;
  3. use Zeega\DataBundle\Document\Item;
  4. use Zeega\DataBundle\Document\Project;
  5. use Zeega\DataBundle\Document\Sequence;
  6. use Zeega\DataBundle\Document\Frame;
  7. use Zeega\DataBundle\Document\Layer;
  8. class ProjectService
  9. {
  10. public function __construct($doctrine) {
  11. $this->doctrine = $doctrine;
  12. }
  13. // not in use yet
  14. public function createEmptyProject( $title, $version ) {
  15. $frame = new Frame();
  16. $frame->setId(new \MongoId());
  17. $frame->setEnabled(true);
  18. $frame->setLayers(array());
  19. $sequence = new Sequence();
  20. $sequence->setEnabled(true);
  21. $sequence->setFrames(array((string)$frame->getId()));
  22. $project= new Project();
  23. $project->setDateCreated(new \DateTime("now"));
  24. $project->setEnabled(true);
  25. $project->setPublished(false);
  26. $project->setAuthors($user->getDisplayName());
  27. $project->setUser($user);
  28. $project->setMobile(true);
  29. $project->setVersion($version);
  30. $project->addSequence($sequence);
  31. $project->addFrame($frame);
  32. if( isset($title) ) {
  33. $project->setTitle($title);
  34. }
  35. if( isset($version) ) {
  36. $project->setVersion($version);
  37. }
  38. $dm = $this->doctrine->getManager();
  39. $dm->persist($project);
  40. $dm->clear();
  41. return $project;
  42. }
  43. public function createRemixProject( $pagesNumber = 1, $parentProject, $user ) {
  44. // copy the project
  45. $newProject = clone $parentProject;
  46. $newProject->setUser($user);
  47. $newProject->setRemixable(true);
  48. // clear the original project layers, frames, sequences
  49. $newProject->setLayers(new \Doctrine\Common\Collections\ArrayCollection());
  50. $newProject->setFrames(new \Doctrine\Common\Collections\ArrayCollection());
  51. $newProject->setSequences(new \Doctrine\Common\Collections\ArrayCollection());
  52. // clear cover image and title
  53. $newProject->setTitle("");
  54. $newProject->setCoverImage("");
  55. // create a new sequence and frames
  56. $sequence = new Sequence();
  57. $sequence->setEnabled(true);
  58. $frames = array();
  59. while($pagesNumber > 0) {
  60. $frame = new Frame();
  61. $frame->setId(new \MongoId());
  62. $frame->setEnabled(true);
  63. $frame->setLayers(array());
  64. $newProject->addFrame($frame);
  65. $frames[] = (string)$frame->getId();
  66. --$pagesNumber;
  67. }
  68. $sequence->setFrames($frames);
  69. // get the soundtrack from the original project
  70. $parentProjectSequences = $parentProject->getSequences();
  71. if ( isset($parentProjectSequences) && $parentProjectSequences->count() > 0 ) {
  72. $soundtrackSequence = $parentProjectSequences[0];
  73. $soundtrackSequenceAttributes = $soundtrackSequence->getAttr();
  74. if( isset($soundtrackSequenceAttributes) && isset($soundtrackSequenceAttributes["soundtrack"]) && is_string($soundtrackSequenceAttributes["soundtrack"]) ) {
  75. $soundtrackLayerId = $soundtrackSequenceAttributes["soundtrack"];
  76. $sequence->setAttr(array("soundtrack" => $soundtrackLayerId));
  77. $soundtrackLayer = $parentProject->getLayers()->filter(
  78. function($layr) use ($soundtrackLayerId){
  79. return $layr->getId() == $soundtrackLayerId;
  80. }
  81. )->first();
  82. $newProject->addLayer($soundtrackLayer);
  83. }
  84. }
  85. $ancestors = $parentProject->getAncestors();
  86. if ( isset($ancestors) ) {
  87. foreach ($ancestors as $ancestor) {
  88. $newProject->addAncestor($ancestor);
  89. }
  90. }
  91. $newProject->addAncestor($parentProject);
  92. $newProject->setParentProject($parentProject);
  93. $rootProject = $parentProject->getRootProject();
  94. if ( isset($rootProject) ) {
  95. $newProject->setRootProject($parentProject->getRootProject());
  96. } else {
  97. $newProject->setRootProject($parentProject);
  98. }
  99. $newProject->addSequence($sequence);
  100. // persist the project
  101. $dm = $this->doctrine->getManager();
  102. $dm->persist($newProject);
  103. $dm->flush();
  104. $dm->clear();
  105. return $newProject;
  106. }
  107. }