feedController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php
  2. class feedController extends ActionController {
  3. public function firstAction () {
  4. $catDAO = new CategoryDAO ();
  5. $catDAO->checkDefault ();
  6. }
  7. public function addAction () {
  8. if (login_is_conf ($this->view->conf) && !is_logged ()) {
  9. Error::error (
  10. 403,
  11. array ('error' => array ('Vous n\'avez pas le droit d\'accéder à cette page'))
  12. );
  13. } else {
  14. if (Request::isPost ()) {
  15. $url = Request::param ('url_rss');
  16. $params = array ();
  17. try {
  18. $feed = new Feed ($url);
  19. $feed->load ();
  20. $feedDAO = new FeedDAO ();
  21. $values = array (
  22. 'id' => $feed->id (),
  23. 'url' => $feed->url (),
  24. 'category' => $feed->category (),
  25. 'name' => $feed->name (),
  26. 'website' => $feed->website (),
  27. 'description' => $feed->description (),
  28. 'lastUpdate' => time ()
  29. );
  30. if ($feedDAO->addFeed ($values)) {
  31. $entryDAO = new EntryDAO ();
  32. $entries = $feed->entries ();
  33. foreach ($entries as $entry) {
  34. $values = $entry->toArray ();
  35. $entryDAO->addEntry ($values);
  36. }
  37. // notif
  38. $notif = array (
  39. 'type' => 'good',
  40. 'content' => 'Le flux <em>' . $feed->name () . '</em> a bien été ajouté'
  41. );
  42. Session::_param ('notification', $notif);
  43. $params['id'] = $feed->id ();
  44. } else {
  45. // notif
  46. $notif = array (
  47. 'type' => 'bad',
  48. 'content' => '<em>' . $feed->name () . '</em> n\' a pas pu être ajouté'
  49. );
  50. Session::_param ('notification', $notif);
  51. }
  52. } catch (FileNotExistException $e) {
  53. Log::record ($e->getMessage (), Log::ERROR);
  54. // notif
  55. $notif = array (
  56. 'type' => 'bad',
  57. 'content' => 'Un problème de configuration a empêché l\'ajout du flux. Voir les logs pour plus d\'informations'
  58. );
  59. Session::_param ('notification', $notif);
  60. } catch (Exception $e) {
  61. // notif
  62. $notif = array (
  63. 'type' => 'bad',
  64. 'content' => 'L\'url <em>' . $url . '</em> est invalide'
  65. );
  66. Session::_param ('notification', $notif);
  67. }
  68. Request::forward (array ('c' => 'configure', 'a' => 'feed', 'params' => $params), true);
  69. }
  70. }
  71. }
  72. public function actualizeAction () {
  73. $feedDAO = new FeedDAO ();
  74. $entryDAO = new EntryDAO ();
  75. $feeds = $feedDAO->listFeedsOrderUpdate ();
  76. // pour ne pas ajouter des entrées trop anciennes
  77. $nb_month_old = $this->view->conf->oldEntries ();
  78. $date_min = time () - (60 * 60 * 24 * 30 * $nb_month_old);
  79. $i = 0;
  80. foreach ($feeds as $feed) {
  81. $feed->load ();
  82. $entries = $feed->entries ();
  83. foreach ($entries as $entry) {
  84. if ($entry->date (true) >= $date_min) {
  85. $values = $entry->toArray ();
  86. $entryDAO->addEntry ($values);
  87. }
  88. }
  89. $feedDAO->updateLastUpdate ($feed->id ());
  90. $i++;
  91. if ($i >= 10) {
  92. break;
  93. }
  94. }
  95. $entryDAO->cleanOldEntries ($nb_month_old);
  96. // notif
  97. $notif = array (
  98. 'type' => 'good',
  99. 'content' => '10 flux ont été mis à jour'
  100. );
  101. Session::_param ('notification', $notif);
  102. Request::forward (array (), true);
  103. }
  104. public function massiveImportAction () {
  105. if (login_is_conf ($this->view->conf) && !is_logged ()) {
  106. Error::error (
  107. 403,
  108. array ('error' => array ('Vous n\'avez pas le droit d\'accéder à cette page'))
  109. );
  110. } else {
  111. $entryDAO = new EntryDAO ();
  112. $feedDAO = new FeedDAO ();
  113. $categories = Request::param ('categories', array ());
  114. $feeds = Request::param ('feeds', array ());
  115. $this->addCategories ($categories);
  116. $nb_month_old = $this->view->conf->oldEntries ();
  117. $date_min = time () - (60 * 60 * 24 * 30 * $nb_month_old);
  118. $i = 0;
  119. foreach ($feeds as $feed) {
  120. $feed->load ();
  121. // Enregistrement du flux
  122. $values = array (
  123. 'id' => $feed->id (),
  124. 'url' => $feed->url (),
  125. 'category' => $feed->category (),
  126. 'name' => $feed->name (),
  127. 'website' => $feed->website (),
  128. 'description' => $feed->description (),
  129. 'lastUpdate' => 0
  130. );
  131. $feedDAO->addFeed ($values);
  132. }
  133. Request::forward (array (
  134. 'c' => 'feed',
  135. 'a' => 'actualize'
  136. ));
  137. }
  138. }
  139. public function deleteAction () {
  140. if (login_is_conf ($this->view->conf) && !is_logged ()) {
  141. Error::error (
  142. 403,
  143. array ('error' => array ('Vous n\'avez pas le droit d\'accéder à cette page'))
  144. );
  145. } else {
  146. $id = Request::param ('id');
  147. $feedDAO = new FeedDAO ();
  148. $feedDAO->deleteFeed ($id);
  149. // notif
  150. $notif = array (
  151. 'type' => 'good',
  152. 'content' => 'Le flux a été supprimé'
  153. );
  154. Session::_param ('notification', $notif);
  155. Request::forward (array ('c' => 'configure', 'a' => 'feed'), true);
  156. }
  157. }
  158. private function addCategories ($categories) {
  159. $catDAO = new CategoryDAO ();
  160. foreach ($categories as $cat) {
  161. if (!$catDAO->searchByName ()) {
  162. $values = array (
  163. 'id' => $cat->id (),
  164. 'name' => $cat->name (),
  165. 'color' => $cat->color ()
  166. );
  167. $catDAO->addCategory ($values);
  168. }
  169. }
  170. }
  171. }