iPédiatre
 Tout Classes Fichiers Fonctions Variables
ipfunctioncollection.php
Aller à la documentation de ce fichier.
1 <?php
6 {
7 
16  function fetchHasAcceptedGTU( $user_id ) {
17 
18  $user = $user_id ? eZUser::fetch($user_id) : eZUser::currentUser();
19 
20  if (!$user) {
21 
22  throw new Exception(
23  'ipediatreFunctionCollection::fetchHasAcceptedGTU()'
24  .'n\'arrive pas à récupérer l\'utilisateur'
25  );
26  }
27 
28  $user = new iPUser($user);
29 
30  if ($ok = $user->hasAcceptedGTU()) {
31 
32  eZDebug::writeDebug("L'utilisateur `{$user->id()}` a déjà accepté les CGU");
33 
34  } else {
35 
36  eZDebug::writeDebug("L'utilisateur `{$user->id()}` n'a pas encore accepté les CGU");
37  }
38 
39  return array('result'=>$ok);
40  }
41 
45  function fetchCategories() {
46 
47  $countryCode = eZLocale::instance()->countryCode(); // ex: FR, GB, MX, ...
48 
49  $categories = eZContentObjectTreeNode::fetchByURLPath($countryCode)
50  ->subTree(
51  array(
52  'ClassFilterType'=>'include',
53  'ClassFilterArray'=>array('folder'),
54  'SortBy'=> array(array('priority',true))
55  )
56  );
57 
58  return array('result' => $categories);
59  }
60 
64  function fetchFolders( $user_id )
65  {
66  $user = eZUser::fetch($user_id);
67  $folder_ids = array();
68  $folders = array();
69 
70  if ( $user === null )
71  {
72  $result = array( 'error' => array( 'error_type' => 'kernel',
73  'error_code' => eZError::KERNEL_NOT_FOUND ) );
74  }
75  else
76  {
77  // on récupère les articles sous le noeud de l'utilisateur
78  $articles = $user->contentObject()->mainNode()->children();
79  $folder_ids = array_map(function($n){return $n->object()->mainParentNodeID();}, $articles);
80  $folder_ids = array_unique($folder_ids);
81  $folders = array_map(array('eZContentObjectTreeNode', 'fetch'), $folder_ids);
82  $result = array( 'result' => $folders );
83  }
84 
85  return $result;
86  }
87 
91  function fetchArticles($user_id, $category, $age, $offset, $limit)
92  {
93  $articles = eZUser::fetch($user_id)->contentObject()
94  ->mainNode()
95  ->subTree(array( 'MainNodeOnly' => false,
96  'ClassFilterType' => 'include',
97  'ClassFilterArray' => array('article'),
98  'SortBy' => array(array('priority',true))));
99 
100  if ($category) {
101  $articles = array_filter($articles,
102  function($n1) use($category){
103  $count = count(array_filter($n1->object()->assignedNodes(),
104  function($n2) use($category){
105  return ($n2->attribute('parent_node_id')==$category);
106  }));
107  return $count > 0;
108  });
109  }
110 
111  if ($age) {
112  $articles = array_filter($articles, function($n) use($age) {
113  $dm = $n->dataMap();
114  return in_array($age, explode(';',$dm['age_slot2']->DataText));
115  });
116  }
117 
118  if ($limit) {
119  $articles = array_slice($articles, $offset, $limit);
120  }
121  return array( 'result' => $articles );
122  }
123 
127  function fetchIsArticleFrom($object_id, $user_id)
128  {
129  $object = eZContentObject::fetch($object_id);
130  $user = eZUser::fetch($user_id);
131 
132 
133  return array('result' => $object->mainParentNodeID() == $user->contentObject()->mainNodeID());
134  }
135 
136 
144  function fetchMyArticles($user_id)
145  {
146  $articles = eZUser::fetch($user_id)->contentObject()
147  ->mainNode()
148  ->subTree(array( 'MainNodeOnly' => true,
149  'Depth' => 1,
150  'DepthOperator' => 'eq',
151  'IgnoreVisibility' => true,
152  'ClassFilterType' => 'include',
153  'ClassFilterArray' => array('article'),
154  'SortBy' => array(array('published',true))));
155 
156  foreach ($articles as $article)
157  {
158  foreach ($article->object()->assignedNodes() as $node)
159  {
160  if ($node->fetchParent()->classIdentifier() == 'folder') {
161  $article_list[$node->attribute('parent_node_id')][] = $article;
162  break;
163  }
164  }
165  }
166 
167  uksort($article_list, function($group1, $group2){return eZContentObjectTreeNode::fetch($group1)->attribute('priority') - eZContentObjectTreeNode::fetch($group2)->attribute('priority');});
168 
169 
170  if ( $article_list=== null )
171  {
172  $result = array( 'error' => array( 'error_type' => 'kernel',
173  'error_code' => eZError::KERNEL_NOT_FOUND ) );
174  }
175  else
176  {
177  $result = array( 'result' => $article_list );
178  }
179  return $result;
180  }
181 
185  function fetchPublishedArticles($user_id)
186  {
187  $parentNodeID = eZContentObject::fetch($user_id)->mainNodeID();
188  $countryCode = eZLocale::instance()->countryCode();
189  $contentRoot = eZContentObjectTreeNode::fetchByURLPath($countryCode);
190 
191  $articles = eZUser::fetch($user_id)->contentObject()
192  ->mainNode()
193  ->subTree(array( 'MainNodeOnly' => false,
194  'ClassFilterType' => 'include',
195  'ClassFilterArray' => array('article'),
196  'SortBy' => array(array('published',true))));
197 
198  foreach ($articles as $article) {
199  foreach ($article->object()->assignedNodes() as $node) {
200  if ($node->fetchParent()->classIdentifier() == 'folder') {
201  $article_list[$node->attribute('parent_node_id')][] = $article;
202  break;
203  }
204  }
205  }
206 
207  uksort($article_list, function($group1, $group2){return eZContentObjectTreeNode::fetch($group1)->attribute('priority') - eZContentObjectTreeNode::fetch($group2)->attribute('priority');});
208 
209  if ( $article_list=== null )
210  {
211  $result = array( 'error' => array( 'error_type' => 'kernel',
212  'error_code' => eZError::KERNEL_NOT_FOUND ) );
213  }
214  else
215  {
216  $result = array( 'result' => $article_list );
217  }
218  return $result;
219  }
220 
224  function fetchUnpublishedArticles($user_id)
225  {
226  $countryCode = eZLocale::instance()->countryCode();
227  $contentRoot = eZContentObjectTreeNode::fetchByURLPath($countryCode);
228  $userNodeID = eZContentObject::fetch($user_id)->mainNodeID();
229  $countryCode = eZLocale::instance()->countryCode();
230  $contentRoot = eZContentObjectTreeNode::fetchByURLPath($countryCode);
231 
232 
233  $subnodes = eZUser::fetch($user_id)->contentObject()
234  ->mainNode()
235  ->subTree(array( 'MainNodeOnly' => false,
236  'IgnoreVisibility' => true,
237  'ClassFilterType' => 'include',
238  'ClassFilterArray' => array('article'),
239  'SortBy' => array(array('published',true))));
240 
241 
242  $published_articles = array_filter($subnodes, function($n){return $n->attribute('is_hidden')==false;});
243  $unpublished_articles = array_filter($subnodes, function($n) use($userNodeID) {return ($n->attribute('is_hidden')==true) && ($n->object()->mainParentNodeID()==$userNodeID);});
244 
245  $published_articles_node_ids = array_map(function($n){return $n->attribute('node_id');}, $published_articles);
246  $unpublished_articles_node_ids = array_map(function($n){return $n->attribute('node_id');}, $unpublished_articles);
247 
248 
249 
250 
251  foreach ($contentRoot->children() as $category)
252  {
253  $tmp = array();
254  $articles_tmp = $category->subTree(array( 'MainNodeOnly' => true,
255  'ClassFilterType' => 'include',
256  'ClassFilterArray' => array('article'),
257  'SortBy' => array(array('published',true)) ));
258 
259  foreach ($articles_tmp as $t) {
260 
261  // On récupère les parent_node_id des noeuds de l'objet
262  $locations = array_map(function($n){return $n->attribute('parent_node_id');}, $t->object()->assignedNodes());
263 
264  if (!in_array($userNodeID, $locations)) {
265  $tmp[] = $t;
266  }
267  }
268 
269  $articles[$category->attribute('node_id')] = $tmp;
270  }
271 
272  foreach ($unpublished_articles as $a) {
273 
274  $art = new iPArticle($a->object());
275  $cat = $art->getCategory();
276 
277  if(!$cat) continue;
278 
279  $cat_id = $cat->attribute('node_id');
280  $articles[$cat_id][] = $a;
281  }
282 
283  uksort($articles, function($group1, $group2){return eZContentObjectTreeNode::fetch($group1)->attribute('priority') - eZContentObjectTreeNode::fetch($group2)->attribute('priority');});
284 
285  if ( $articles=== null )
286  {
287  $result = array( 'error' => array( 'error_type' => 'kernel',
288  'error_code' => eZError::KERNEL_NOT_FOUND ) );
289  }
290  else
291  {
292  $result = array( 'result' => $articles );
293  }
294  return $result;
295  }
296 
302  function fetchNewArticles($owner_id)
303  {
304 
305 
306  $countryCode = eZLocale::instance()->countryCode();
307 
308  $node = eZContentObjectTreeNode::fetchByURLPath($countryCode);
309 
310  $articles = $node->subTree(array('MainNodeOnly' => false,
311  'AttributeFilter' => array(array('published','>',(time()-30*24*60*60))),
312  'ClassFilterType' => 'include',
313  'ClassFilterArray' => array('article')));
314 
315  $authorized_articles = array_filter($articles, function($n) use($userNode) {return !$n->attribute('is_hidden') || ($n->attribute('parent_node_id') == $userNode->attribute('node_id'));});
316 
317  foreach ($authorized_articles as $article)
318  {
319  $art = new iPArticle($article->object());
320  $cat_id = $art->getCategory()->attribute('node_id');
321 
322  $articles_list[$cat_id][] = $article;
323  }
324 
325  uksort($articles_list, function($group1, $group2){return eZContentObjectTreeNode::fetch($group1)->attribute('priority') - eZContentObjectTreeNode::fetch($group2)->attribute('priority');});
326 
327  return array('result' => $articles_list);
328 
329  }
330 
341  function fetchAllArticles($owner_id)
342  {
343  $countryCode = eZLocale::instance()->countryCode();
344  $contentRoot = eZContentObjectTreeNode::fetchByURLPath($countryCode);
345 
346  $filter = array( 'MainNodeOnly' => true, // On est obligé de mettre MainNodeOnly pour ne pas voir les articles des autres
347  'ClassFilterType' => 'include',
348  'ClassFilterArray' => array('article') );
349 
350  foreach ($contentRoot->children() as $child)
351  {
352  $articles[$child->attribute('node_id')] = $child->subTree($filter);
353  }
354 
355  // A ce stade, $articles contient tous les articles communs mais pas les articles du péditre
356  // Nous allons donc les récupérer et les ajouter
357 
358  $myarticles = eZUser::fetch($owner_id)->contentObject()
359  ->mainNode()
360  ->subTree(array( 'MainNodeOnly' => true,
361  'Depth' => 1,
362  'DepthOperator' => 'eq',
363  'IgnoreVisibility' => true,
364  'ClassFilterType' => 'include',
365  'ClassFilterArray' => array('article'),
366  'SortBy' => array(array('published',true))));
367 
368  foreach ($myarticles as $article) {
369  foreach ($article->object()->assignedNodes() as $node) { // Un seul noeud parent nous intéresse: celui de la rubrique
370  if ($node->fetchParent()->classIdentifier() == 'folder') {
371  $articles[$node->attribute('parent_node_id')][] = $article;
372  break;
373  }
374  }
375  }
376 
377  // Maintenant il nous faut trier les articles des rubriques par ordre chronologique
378  foreach ($articles as $k=>$v) {
379  usort($articles[$k], function($b,$a){return $a->object()->attribute('published') - $b->object()->attribute('published');});
380  }
381 
382  uksort($articles, function($group1, $group2){return eZContentObjectTreeNode::fetch($group1)->attribute('priority') - eZContentObjectTreeNode::fetch($group2)->attribute('priority');});
383 
384  return array('result' => $articles);
385 
386  }
387 
388 
393  function fetchIsPublished($object_id, $user_id)
394  {
395  $article = eZContentObject::fetch($object_id);
396 
397  $user = $user_id ? eZUser::fetch($user_id) : eZUser::currentUser();
398 
399  if (!$article || !$user) {
400  return array( 'error' => array( 'error_type' => 'kernel',
401  'error_code' => eZError::KERNEL_NOT_FOUND ) );
402  }
403  $nodes = $article->assignedNodes();
404  foreach ($nodes as $node) {
405 
406  if ($node->attribute('parent_node_id') == $user->contentObject()->mainNodeID() && !$node->attribute('is_hidden')) {
407 
408  return array( 'result' => true );
409  }
410  }
411 
412  return array('result'=>false);
413  }
414 
421  function fetchCategory($object_id)
422  {
423  $article = eZContentObject::fetch($object_id);
424 
425  if ($article) {
426 
427  $nodes = $article->assignedNodes();
428 
429  foreach ($nodes as $node) {
430  $parent = $node->fetchParent();
431  if ($parent->classIdentifier() == 'folder') {
432 
433  return array( 'result' => $parent);
434  }
435  }
436  }
437 
438  return array( 'error' => array( 'error_type' => 'kernel',
439  'error_code' => eZError::KERNEL_NOT_FOUND ) );
440  }
441 
442  protected function getCategoryOfNode($node)
443  {
444  $article = new iPArticle($node->object());
445 
446  return $article->getCategory();
447  }
448 
449  protected function getCategoryOfObject($object) {
450 
451  $nodes = $object->assignedNodes();
452 
453  foreach ($nodes as $node) {
454 
455  $parent = $node->fetchParent();
456 
457  if ($parent->classIdentifier() == 'folder') {
458 
459  return $parent;
460  }
461  }
462  }
463 }