Guest User

Untitled

a guest
Aug 17th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 KB | None | 0 0
  1. public function __toString()
  2. {
  3. $dbin = count($this->intervals['day']['parsed']) === 31 ? 1 : 0;
  4. $mbin = count($this->intervals['month']['parsed']) === 12 ? 2 : 0;
  5. $wbin = count($this->intervals['wday']['parsed']) === 7 ? 4 : 0;
  6.  
  7. $interval = $dbin | $mbin | $wbin;
  8. switch ($interval) {
  9. case 7:
  10. return 'Elke dag';
  11. break;
  12. case 6:
  13. // elke maand op bepaalde dagen
  14. return 'Maandelijks op volgende dagen: ' .
  15. $this->getOptimalGroups($this->intervals['day']['parsed']);
  16. break;
  17. case 5:
  18. // Elke dag, maar niet elke maand
  19. return 'Dagelijks in de maanden: ' .
  20. $this->getOptimalGroups($this->intervals['month']['parsed'], self::FORMAT_MONTHS);
  21. break;
  22. case 4:
  23. // Elke weekdag, maar niet elke maand en niet elke dag
  24. return 'In de maanden: ' .
  25. $this->getOptimalGroups($this->intervals['month']['parsed'], self::FORMAT_MONTHS) .
  26. ' op volgende dagen: ' .
  27. $this->getOptimalGroups($this->intervals['day']['parsed']);
  28. break;
  29. case 3:
  30. // Elke dag en elke maand, maar niet elke weekdag
  31. return 'Op volgende weekdagen: ' .
  32. $this->getOptimalGroups($this->intervals['wday']['parsed'], self::FORMAT_WEEKDAYS);
  33. break;
  34. case 2:
  35. // Elke maand, maar niet elke dag en niet elke weekdag
  36. return 'Op de ' .
  37. $this->getOptimalGroups($this->intervals['day']['parsed']) .
  38. ' dag van elke maand die vallen op volgende weekdagen: ' .
  39. $this->getOptimalGroups($this->intervals['wday']['parsed'], self::FORMAT_WEEKDAYS);
  40.  
  41. break;
  42. case 1:
  43. // Op bepaalde weekdagen in een bepaalde maand
  44. return 'Op volgende weekdagen: ' .
  45. $this->getOptimalGroups($this->intervals['wday']['parsed'], self::FORMAT_WEEKDAYS) .
  46. ' die vallen in de maanden: ' .
  47. $this->getOptimalGroups($this->intervals['month']['parsed'], self::FORMAT_MONTHS);
  48.  
  49. break;
  50. case 0:
  51. // Op bepaalde dagen die vallen op bepaalde weekdagen in een bepaalde maand
  52. return 'Op de ' .
  53. $this->getOptimalGroups($this->intervals['day']['parsed']) .
  54. ' dag van maanden ' .
  55. $this->getOptimalGroups($this->intervals['month']['parsed'], self::FORMAT_MONTHS) .
  56. ' op de weekdagen: ' .
  57. $this->getOptimalGroups($this->intervals['wday']['parsed'], self::FORMAT_WEEKDAYS);
  58. }
  59. }
  60.  
  61. protected function getOptimalGroups($days, $format = null)
  62. {
  63. $formats = array(
  64. self::FORMAT_WEEKDAYS => array_values(\Zend_Locale::getTranslationList('Day', 'nl')),
  65. self::FORMAT_MONTHS => array_values(\Zend_Locale::getTranslationList('Month', 'nl')),
  66. );
  67.  
  68. $groups = array();
  69. $pday = null;
  70. $ndays = (array) $days;
  71.  
  72. $n = 0;
  73. foreach ($ndays as $day) {
  74. if ($pday !== null && ($day !== $pday +1)) {
  75. $groups[] = array_slice($days, 0, $n);
  76. $days = array_splice($days, $n);
  77.  
  78. $n = 0;
  79. }
  80.  
  81. $pday = $day;
  82. $n++;
  83. }
  84.  
  85. if ($days) {
  86. $groups[] = $days;
  87. }
  88.  
  89. $result = '';
  90. foreach ($groups as $group) {
  91. $from = reset($group);
  92. $to = end($group);
  93.  
  94. if ($format == self::FORMAT_MONTHS) {
  95. $from--;
  96. $to--;
  97. }
  98.  
  99. $result .= (($format !== null) ? $formats[$format][$from] : $from . 'e');
  100. if ($from !== $to) {
  101. $result .= ' tot ' . (($format !== null) ? $formats[$format][$to] : $to . 'e');
  102. }
  103.  
  104. $result .= ', ';
  105. }
  106.  
  107. $result = rtrim($result, ', ');
  108. return $result;
  109. }
Add Comment
Please, Sign In to add comment