feedController.php 6.6 KB

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