src/Entity/Correction.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\CorrectionRepository;
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Gedmo\Loggable;
  6. use Doctrine\ORM\Event\LifecycleEventArgs// prePersist
  7. use Doctrine\ORM\Event\OnFlushEventArgs// onFlush
  8. use Doctrine\ORM\Event\PreUpdateEventArgs// preUpdate
  9. use DateTime;
  10. use Exception;
  11. class Correction
  12. {
  13.     const STATUS_UNCHECKED 'unchecked';
  14.     const STATUS_REVIEWED  'reviewed';
  15.     const STATUS_FINALISED 'finalised';
  16.     const STATUS_VERIFIED  'verified';
  17.     const STATUS_DEFAULT   'finalised';
  18.     
  19.     const ALLGEMEINES      0;
  20.     const NACH_ALLGEMEINES 1;
  21.     const ALEX             25000;
  22.     const NACH_ALEX        25001;
  23.     const LOND             580000;
  24.     const NACH_LOND        582001;
  25.     const TAIT             1250000;
  26.     const NACH_TAIT        1250001;
  27.     const MODE_XML         'xml';
  28.     const MODE_OOXML       'ooxml';
  29.     const MODE_PLAIN       'plain';
  30.     const MODE_REGISTER    'register';
  31.     public static $STATUS = array('unchecked''reviewed''finalised''verified');
  32.     public static $ROMAN  = array('I' => 1'II' => 2'III' => 3'IV' => 4'V' => 5'VI' => 6'VII' => 7'VIII' => 8'IX' => 9'X' => 10'XI' => 11'XII' => 12'XIII' => 13'XIV' => 14'XV' => 15'XVI' => 16'XVII' => 17'XVIII' => 18'XIX' => 19'XX' => 20'XXI' => 21'XXII' => 22'XXIII' => 23'XXIV' => 24'XXV' => 25'XXVI' => 26'XXVII' => 27'XXVIII' => 28'XXIX' => 29'XXX' => 30'XXXI' => 31'XXXII' => 32'XXXIII' => 33'XXXIV' => 34'XXXV' => 35'XXXVI' => 36'XXXVII' => 37'XXXIX' => 39'XXXVIII' => 38'XL' => 40'XLI' => 41'XXIX' => 42'XLIII' => 43'XLIV' => 44'XLV' => 45'XLVI' => 46'XLVII' => 47'XLVIII' => 48'XLIX' => 49'L' => 50'LI' => 51'LII' => 52'LIII' => 53'LIV' => 54'LV' => 55'LVI' => 56'LVII' => 57'LVIII' => 58'LIX' => 59'LX' => 60'LXI' => 61'LXII' => 62'LXIII' => 63'LXIV' => 64'LXV' => 65'LXVI' => 66'LXVII' => 67'LXVIII' => 68'LXIX' => 69'LXX' => 70'LXXI' => 71'LXXII' => 72'LXXIII' => 73'LXXIV' => 74'LXXV' => 75'LXXVI' => 76'LXXVII' => 77'LXXVIII' => 78'LXXIX' => 79'LXXX' => 80'LXXXI' => 81'LXXXII' => 82'LXXXIII' => 83'LXXXIV' => 84'LXXXV' => 85'LXXXVI' => 86'LXXXVII' => 87'LXXXVIII' => 88'LXXXIX' => 89'XC' => 90'XCI' => 91'XCII' => 92'XCIII' => 93'XCIV' => 94'XCV' => 95'XCVI' => 96'XCVII' => 97'XCVIII' => 98'XCIX' => 99'C' => 100);
  33.     public static $ALPHA  = array('A' => 1'B' => 2'C' => 3'D' => 4'E' => 5'F' => 6'G' => 7'H' => 8);
  34.     public static $ENCODE = array(
  35.       '𝈪' => 'f09d88aa',
  36.       '𐅵' => 'f09085b5'// one half
  37.       '𐅷' => 'f09085b7'// two thirds
  38.       '𐅸' => 'f09085b8' // three quarters
  39.     );
  40.   
  41.     public static $DECODE = array(
  42.       'f09d88aa' => '𝈪',
  43.       'f09085b5' => '𐅵',
  44.       'f09085b7' => '𐅷',
  45.       'f09085b8' => '𐅸'
  46.     );
  47.     public static function encode4Byte($data){
  48.       if(is_array($data)){
  49.         foreach($data as $key => $value){
  50.           $data[$key] = self::encode4ByteUnicode($value);
  51.         }
  52.         return $data;
  53.       } else {
  54.         return self::encode4ByteUnicode($data);
  55.       }
  56.     }
  57.     public static function decode4Byte($data){
  58.       if(is_array($data)){
  59.         foreach($data as $key => $value){
  60.           $data[$key] = self::decode4ByteUnicode($value);
  61.         }
  62.         return $data;
  63.       } else {
  64.         return self::decode4ByteUnicode($data);
  65.       }
  66.     }
  67.     public static function encode4ByteUnicode($string){
  68.       mb_internal_encoding('UTF-8');
  69.       mb_regex_encoding('UTF-8');
  70.       foreach(self::$ENCODE as $character => $code){
  71.         if(mb_strpos($string$character) !== FALSE){
  72.           $string mb_ereg_replace($character$code$string);
  73.         }
  74.       }
  75.       return $string;
  76.     }
  77.     
  78.     public static function decode4ByteUnicode($string){
  79.       mb_internal_encoding('UTF-8');
  80.       mb_regex_encoding('UTF-8');
  81.       foreach(self::$ENCODE as $character => $code){
  82.         if(mb_strpos($string$code) !== FALSE){
  83.           $string mb_ereg_replace($code$character$string);
  84.         }
  85.       }
  86.       return $string;
  87.     }
  88.     public function encode(){
  89.       $this->description self::encode4Byte($this->description);
  90.     }
  91.   
  92.     public function decode(){
  93.       $this->description self::decode4Byte($this->description);
  94.     }
  95.     public function __construct()
  96.     {
  97.         $this->tasks           = new \Doctrine\Common\Collections\ArrayCollection();
  98.         $this->registerEntries = new \Doctrine\Common\Collections\ArrayCollection();
  99.         $this->indexEntries    = new \Doctrine\Common\Collections\ArrayCollection();
  100.         $this->status self::STATUS_UNCHECKED;
  101.         $this->creator 'system';
  102.         $this->sort $this->sortSystem '';
  103.         $this->created = new DateTime('now');
  104.         $this->text '';
  105.     }
  106.     
  107.     public function getPage(){ // CROMULENT: should be in database as sortPage
  108.             if(preg_match('/^([^()]*)\((S\. +)?([\dIVXLCDM]+)(-\d+)?\)(,? \([^)]+\))*([^()]*)$/'$this->text$matches)){
  109.                 return $matches[3];
  110.             }
  111.             return '';
  112.     }
  113.     
  114.     public function getInventoryNumber(){ // CROMULENT?! see above
  115.       if(preg_match('/^Inv\. (\d+)([^\d].*)?$/'$this->text$matches)){
  116.         return $matches[1];
  117.       }
  118.       return '';
  119.     }
  120.     
  121.     public function getSortText(){ // CROMULENT: should be in database
  122.             if(preg_match('/^([^()]*)\((S\. +)?([\dIVXLCDM]+)(-\d+)?\)(,? \([^)]+\))*([^()]*)$/'$this->text$matches)){
  123.                 return trim($matches[1]) . trim($matches[6]);
  124.             }
  125.             return '';
  126.     }
  127.     public function getTitle(){
  128.       return $this->getEdition()->getSort() . ' = ' $this->getEdition()->getTitle();
  129.     }
  130.     public function hasTask($category null){
  131.       return count($this->getTasks($category));
  132.     }
  133.     public function hasOpenTask($category null){
  134.       $count 0;
  135.       foreach($this->getTasks($category) as $task){
  136.         if(!$task->isCleared()){
  137.           $count++;
  138.         }
  139.       }
  140.       return $count;
  141.     }
  142.     public function getTasks($category null){
  143.       if($category === null){
  144.         return $this->tasks;
  145.       } else {
  146.         $tasks = new \Doctrine\Common\Collections\ArrayCollection();
  147.         foreach($this->tasks as $task){
  148.           if($task->getCategory() === $category){
  149.             $tasks->add($task);
  150.           }
  151.         }
  152.         return $tasks;
  153.       }
  154.     }
  155.     public function getTaskString($category null){
  156.       $result '';
  157.       foreach($this->getTasks($category) as $task){
  158.           $result .= ($category '' $task->getCategory() . ': ') . $task->getDescription() . "; ";
  159.       }
  160.       return rtrim($result'; ');
  161.     }
  162.     public function setDdb($ddb)
  163.     {
  164.         throw new Exception('setDdb() invalid function');
  165.     }
  166.     public function setTm($tm)
  167.     {
  168.         throw new Exception('setTm() invalid function');
  169.     }
  170.     public function setHgv($hgv)
  171.     {
  172.         throw new Exception('setHgv() invalid function');
  173.     }
  174.     public function setStatus($status)
  175.     {
  176.         if(in_array($statusself::$STATUS)){
  177.           $this->status $status;
  178.         } else {
  179.           $this->status self::STATUS_DEFAULT;
  180.         }
  181.     }
  182.     public function setText($text ''){
  183.       $this->text $text;
  184.       $this->setSortValues();
  185.     }
  186.     public function setPosition($position){
  187.       $this->position $position;
  188.       $this->setSortValues();
  189.     }
  190.     public function setEdition(\App\Entity\Edition $edition){
  191.         $this->edition $edition;
  192.         $this->setSortValues();
  193.     }
  194.     public function setSortValues(){
  195.       if($this->getEdition()){
  196.         // retrieve page, fragment, column and line from position string
  197.         $this->sortPage $this->sortSide $this->sortFragment $this->sortColumn $this->sortLine null;
  198.         $sortText $this->text;
  199.         if($this->getEdition()->getSort() === self::ALLGEMEINES){
  200.           $sortText mb_substr($sortText08);
  201.           while(mb_strlen($sortText) < 8){
  202.             $sortText .= '.';
  203.           }
  204.         }
  205.         //echo '<pre>';
  206.         //var_dump($sortText);
  207.         //echo '</pre>';
  208.         if(preg_match('/^(\d+)([\-+ .,]*(\d+))*(( | Fr. )?\(?([*a-zA-Z])((-|\+| |, ?)[*a-zA-Z])*\)?)?( \((\d+)(-\d+)?\)(, \(\d+\))*)?( ([RV]°))?( \(S\. (\d+)\))?( konkave Innenseite)?$/'$sortText$matches)){
  209.         //               1    2         3      45            6          78                           9  10    11       12            13 14      15       16
  210.                 //echo '<pre>';
  211.         //var_dump($matches);
  212.         //echo '</pre>';
  213.           $sortText $matches[1];
  214.           if(count($matches) > 16){
  215.             $this->sortPage $matches[16];
  216.             $this->sortSide $matches[14];
  217.             $this->sortFragment $matches[6];
  218.           } else if(count($matches) > 14){
  219.             $this->sortSide $matches[14];
  220.             $this->sortFragment $matches[6];
  221.           } else if(count($matches) > 10){
  222.             $this->sortColumn $matches[10];
  223.             $this->sortFragment $matches[6];
  224.           }  else if(count($matches) > 6){
  225.             $this->sortFragment $matches[6];
  226.           } else if(count($matches) > 3){
  227.             $this->sortPage $matches[3];
  228.           }
  229.         }
  230.         if(preg_match('/^passim$/'$sortText$matches)){
  231.           $sortText 0;
  232.         }
  233.         if(preg_match('/^(\d+)(bis)$/'$sortText$matches)){
  234.           $sortText $matches[1];
  235.           $this->sortPage $matches[2];
  236.         }
  237.         // for text ~= (S. 147) 426 ~= 390 (S. 332) ~= 1 (S. XVIII) ~= 9604 (11), (18), (19)
  238.         if(preg_match('/^([^()]*)\((S\. +)?([\dIVXLCDM]+)(-\d+)?\)(,? \([^)]+\))*([^()]*)$/'$sortText$matches)){
  239.         //               1         2       3             4        5              6
  240.           echo '1 ' '[' trim($matches[1]) . '][' trim($matches[2]) . ']{' trim($matches[3]) . '}[' trim($matches[4]) . '][' trim($matches[5]) . '][' trim($matches[6]) . ']';
  241.           $this->sortPage $matches[3];
  242.           $sortText trim($matches[1]) . trim($matches[6]);
  243.         }
  244.         if(preg_match('/^Inv\. (\d+)?$/'$sortText$matches)){
  245.           $sortText 1000000 $matches[1];
  246.         }
  247.         if(preg_match('/([RV]°)( |,|-|\)|$)/'$this->position$matches)){
  248.           $this->sortSide $matches[1];
  249.         }
  250.         if(preg_match('/([ABCDEFGH])( |,|-|\)|$)/'$this->position$matches)){
  251.           $this->sortFragment $matches[1];
  252.         } else if(preg_match('/Fr\. (\d+)( |,|-|\)|$)/'$this->position$matches)){
  253.           $this->sortFragment $matches[1];
  254.         }
  255.         if(preg_match('/([IVXL]+)( |,|-|\)|$)/'$this->position$matches)){
  256.           $this->sortColumn $matches[1];
  257.         }
  258.         if(preg_match('/(\d+)( |,|-|\)|$)/'$this->position$matches)){
  259.           $this->sortLine $matches[1];
  260.         }
  261.   
  262.         // calculate system sort
  263.         $this->sortSystem $this->generateSytemSort($this->getEdition()->getSort(), $sortText$this->sortPage$this->sortSide$this->sortFragment$this->sortColumn$this->sortLine);
  264.         // define final sort parameter
  265.         $this->sort $this->sortUser !== null $this->sortUser $this->sortSystem;
  266.       }
  267.     }
  268.      /**
  269.      * generate code sytem sort parameter
  270.      * sort by edition > text > page > side > fragment > column > line
  271.      * SELECT e.sort, text, position, sortPage, sortSide, sortFragment, sortColumn, sortLine, sortSystem from correction c JOIN edition e ON c.edition_id = e.id ORDER BY sortSystem;
  272.      * Key  e........p........t........s..f........c........l........
  273.      * 
  274.      * @param $edition 0 (Allgemein) ... 1'300'000 (Tavolette Varie); exceptions for P.Lond P.Petr O.Tait
  275.      * @param $text
  276.      * @param $page
  277.      * @param $side R°, V° (two sides)
  278.      * @param $fragment, A, B, C, D, E, F, G, H (up to 8 letter coded fragements) or number
  279.      * @param $column, i.e. I, II, III, IV, V, VI, VII, ...
  280.      * @param $line, i.e. 1, 2, 3, 4, 5, 6, ... ∞; e.g. p.mich/p.mich.4.1/p.mich.4.1.224.xml: <lb n='6368'/>
  281.      */
  282.     protected function generateSytemSort($edition$text$page$side$fragment$column$line){
  283.       if($column != null && array_key_exists($columnself::$ROMAN)){
  284.         $column self::$ROMAN[$column];
  285.       }
  286.       
  287.       if($page != null && array_key_exists($pageself::$ROMAN)){
  288.         $page self::$ROMAN[$page];
  289.       }
  290.       //if(in_array($edition, array('580000', '581000', '582000', '1250000'))){ // P. Lond 1 - 3 and O. Tait 1, sort by page and then by text
  291.       if($edition === '1250000'){ // O. Tait 1, sort by page and then by text
  292.         return 'e' $this->lpad($edition) .
  293.                'p' $this->lpad($page) .
  294.                't' $this->lpad($text) .
  295.                's' $this->lpad($side2) .
  296.                'f' $this->lpad($fragment) .
  297.                'c' $this->lpad($column) .
  298.                'l' $this->lpad($line);
  299.       }
  300.       return 'e' $this->lpad($edition) .
  301.              't' $this->lpad($text) .
  302.              'p' $this->lpad($page) .
  303.              's' $this->lpad($side2) .
  304.              'f' $this->lpad($fragment) .
  305.              'c' $this->lpad($column) .
  306.              'l' $this->lpad($line);
  307.     }
  308.     protected function lpad($string$length 8$pad '0'){
  309.       return str_pad($string$length$padSTR_PAD_LEFT);
  310.     }
  311.     public function getLinks(){
  312.       if($this->registerEntries and $this->registerEntries->first()){
  313.         return $this->registerEntries->first()->getLinks();
  314.       }
  315.       return array();
  316.     }
  317.     private $id;
  318.     private $source;
  319.     private $text;
  320.     private $position;
  321.     private $description;
  322.     private $status;
  323.     private $creator;
  324.     private $created;
  325.     private $sortPage;
  326.     private $sortSide;
  327.     private $sortFragment;
  328.     private $sortColumn;
  329.     private $sortLine;
  330.     private $sortSystem;
  331.     private $sortUser;
  332.     private $sort;
  333.     private $registerEntries;
  334.     private $tasks;
  335.     private $compilation;
  336.     private $edition;
  337.     public function getId()
  338.     {
  339.         return $this->id;
  340.     }
  341.     public function setSource($source)
  342.     {
  343.         $this->source $source;
  344.     }
  345.     public function getSource()
  346.     {
  347.         return $this->source;
  348.     }
  349.     public function getText()
  350.     {
  351.         return $this->text;
  352.     }
  353.     public function getTm()
  354.     {
  355.       if($this->registerEntries and $this->registerEntries->first()){
  356.         return $this->registerEntries->first()->getTm();
  357.       }
  358.       return null;
  359.     }
  360.     public function getHgv()
  361.     {
  362.       if($this->registerEntries and $this->registerEntries->first()){
  363.         return $this->registerEntries->first()->getHgv();
  364.       }
  365.       return null;
  366.     }
  367.     public function getDdb()
  368.     {
  369.       $registerList $this->getDistinctDdb(self::MODE_REGISTER);
  370.       if(count($registerList)){
  371.         return array_pop($registerList)->getDdb(); 
  372.       }
  373.       return null;
  374.     }
  375.     public function getDdbCollection()
  376.     {
  377.       if($registerList $this->getDistinctDdb(self::MODE_REGISTER)){
  378.         return array_pop($registerList)->getDdbCollection(); 
  379.       }
  380.       return null;
  381.     }
  382.     public function getDdbVolume()
  383.     {
  384.       if($registerList $this->getDistinctDdb(self::MODE_REGISTER)){
  385.         return array_pop($registerList)->getDdbVolume(); 
  386.       }
  387.       return null;
  388.     }
  389.     public function getDdbDocument()
  390.     {
  391.       if($registerList $this->getDistinctDdb(self::MODE_REGISTER)){
  392.         return array_pop($registerList)->getDdbDocument(); 
  393.       }
  394.       return null;
  395.     }
  396.     public function getDclp()
  397.     {
  398.       if($registerList $this->getDistinctDclp(self::MODE_REGISTER)){
  399.         return array_pop($registerList)->getDclp(); 
  400.       }
  401.       return null;
  402.     }
  403.     public function getDclpCollection()
  404.     {
  405.       if($registerList $this->getDistinctDclp(self::MODE_REGISTER)){
  406.         return $registerList[0]->getDclpCollection(); 
  407.       }
  408.       return null;
  409.     }
  410.     public function getDclpVolume()
  411.     {
  412.       if($registerList $this->getDistinctDclp(self::MODE_REGISTER)){
  413.         return $registerList[0]->getDclpVolume(); 
  414.       }
  415.       return null;
  416.     }
  417.     public function getDclpDocument()
  418.     {
  419.       if($registerList $this->getDistinctDclp(self::MODE_REGISTER)){
  420.         return $registerList[0]->getDclpDocument(); 
  421.       }
  422.       return null;
  423.     }
  424.     public function getPosition()
  425.     {
  426.         return $this->position;
  427.     }
  428.     public function setDescription($description)
  429.     {
  430.         $this->description $description;
  431.     }
  432.     public function getDescription($mode null)
  433.     {
  434.         if($mode == self::MODE_XML){
  435.           return str_replace(array('<''>''&'), array('&gt;''&lt;''&amp;'), $this->description);
  436.         } else if($mode == self::MODE_OOXML){
  437.           $ooxml $this->description;
  438.           $ooxml mb_ereg_replace('<''#lt;',$ooxml);
  439.           $ooxml mb_ereg_replace('>''#gt;',$ooxml);
  440.           $ooxml mb_ereg_replace('&''#amp;',$ooxml);
  441.           $ooxml mb_ereg_replace('#lt;''<text:span>&lt;</text:span>',$ooxml);
  442.           $ooxml mb_ereg_replace('#gt;''<text:span>&gt;</text:span>',$ooxml);
  443.           $ooxml mb_ereg_replace('#amp;''<text:span>&amp;</text:span>',$ooxml);
  444.           return $ooxml;
  445.         }
  446.         return $this->description;
  447.     }
  448.     public function getStatus()
  449.     {
  450.         return $this->status;
  451.     }
  452.     public function setCreator($creator)
  453.     {
  454.         $this->creator $creator;
  455.     }
  456.     public function getCreator()
  457.     {
  458.         return $this->creator;
  459.     }
  460.     public function setCreated($created)
  461.     {
  462.         $this->created $created;
  463.     }
  464.     public function getCreated()
  465.     {
  466.         return $this->created;
  467.     }
  468.     public function setSortPage($sortPage)
  469.     {
  470.         $this->sortPage $sortPage;
  471.     }
  472.     public function getSortPage()
  473.     {
  474.         return $this->sortPage;
  475.     }
  476.     public function setSortSide($sortSide)
  477.     {
  478.         $this->sortSide $sortSide;
  479.     }
  480.     public function getSortSide()
  481.     {
  482.         return $this->sortSide;
  483.     }
  484.     public function setSortFragment($sortFragment)
  485.     {
  486.         $this->sortFragment $sortFragment;
  487.     }
  488.     public function getSortFragment()
  489.     {
  490.         return $this->sortFragment;
  491.     }
  492.     public function setSortColumn($sortColumn)
  493.     {
  494.         $this->sortColumn $sortColumn;
  495.     }
  496.     public function getSortColumn()
  497.     {
  498.         return $this->sortColumn;
  499.     }
  500.     public function setSortLine($sortLine)
  501.     {
  502.         $this->sortLine $sortLine;
  503.     }
  504.     public function getSortLine()
  505.     {
  506.         return $this->sortLine;
  507.     }
  508.     public function setSortSystem($sortSystem)
  509.     {
  510.         $this->sortSystem $sortSystem;
  511.     }
  512.     public function getSortSystem()
  513.     {
  514.         return $this->sortSystem;
  515.     }
  516.     public function setSortUser($sortUser)
  517.     {
  518.         $this->sortUser $sortUser;
  519.     }
  520.     public function getSortUser()
  521.     {
  522.         return $this->sortUser;
  523.     }
  524.     public function setSort($sort)
  525.     {
  526.         $this->sort $sort;
  527.     }
  528.     public function getSort()
  529.     {
  530.         return $this->sort;
  531.     }
  532.     public function addRegisterEntry(\App\Entity\Register $registerEntries)
  533.     {
  534.         $this->registerEntries[] = $registerEntries;
  535.     }
  536.     public function getRegisterEntries()
  537.     {
  538.         return $this->registerEntries;
  539.     }
  540.     public function getDistinctTm($mode self::MODE_PLAIN)
  541.     {
  542.         $distinctList = array();
  543.         foreach($this->registerEntries as $registerEntry){
  544.             if($registerEntry->getTm()){
  545.               $distinctList[$registerEntry->getTm()] = $mode == self::MODE_PLAIN $registerEntry->getTm() : $registerEntry;
  546.             }
  547.         }
  548.         return $distinctList;
  549.     }
  550.     public function getDistinctHgv($mode self::MODE_PLAIN)
  551.     {
  552.         $distinctList = array();
  553.         foreach($this->registerEntries as $registerEntry){
  554.             if($registerEntry->getHgv($mode self::MODE_PLAIN)){
  555.               $distinctList[$registerEntry->getHgv()] = $mode == self::MODE_PLAIN $registerEntry->getHgv() : $registerEntry;
  556.             }
  557.         }
  558.         return $distinctList;
  559.     }
  560.     public function getDistinctDdb($mode self::MODE_PLAIN)
  561.     {
  562.         $distinctList = array();
  563.         foreach($this->registerEntries as $registerEntry){
  564.             if($registerEntry->getDdb()){
  565.                 $distinctList[$registerEntry->getDdb()] = $mode == self::MODE_PLAIN $registerEntry->getDdb() : $registerEntry;
  566.             }
  567.         }
  568.         return $distinctList;
  569.     }
  570.     public function getDistinctDclp($mode self::MODE_PLAIN)
  571.     {
  572.         $distinctList = array();
  573.         foreach($this->registerEntries as $registerEntry){
  574.             if($registerEntry->getDclp()){
  575.               $distinctList[$registerEntry->getDclp()] = $mode == self::MODE_PLAIN $registerEntry->getDclp() : $registerEntry;
  576.             }
  577.         }
  578.         return $distinctList;
  579.     }
  580.     public function addTask(\App\Entity\Task $tasks)
  581.     {
  582.         $this->tasks[] = $tasks;
  583.     }
  584.     public function setCompilation(\App\Entity\Compilation $compilation)
  585.     {
  586.         $this->compilation $compilation;
  587.     }
  588.     public function getCompilation()
  589.     {
  590.         return $this->compilation;
  591.     }
  592.     public function getEdition()
  593.     {
  594.         return $this->edition;
  595.     }
  596.     private $indexEntries;
  597.     public function addIndexEntry(\App\Entity\IndexEntry $indexEntry)
  598.     {
  599.         $this->indexEntries[] = $indexEntry;
  600.     }
  601.     public function removeIndexEntry(\App\Entity\IndexEntry $indexEntry)
  602.     {
  603.       if(!$this->indexEntries->contains($indexEntry)) {
  604.         return;
  605.       }    
  606.       $this->indexEntries->removeElement($indexEntry);
  607.       $indexEntry->removeCorrection($this);
  608.     }
  609.     public function getIndexEntries()
  610.     {
  611.       return $this->indexEntries;
  612.     }
  613.     private $compilationPage;
  614.     public function setCompilationPage($compilationPage)
  615.     {
  616.         $this->compilationPage $compilationPage;
  617.     }
  618.     public function getCompilationPage()
  619.     {
  620.         return $this->compilationPage;
  621.     }
  622.     private $compilationIndex;
  623.     public function setCompilationIndex($compilationIndex)
  624.     {
  625.         $this->compilationIndex $compilationIndex;
  626.     }
  627.     public function getCompilationIndex()
  628.     {
  629.         return $this->compilationIndex;
  630.     }
  631. }