PageRenderTime 24ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/_plugins_/noizetier/trunk/formulaires/editer_page.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 164 lines | 131 code | 20 blank | 13 comment | 27 complexity | 7b3a84d9519b4d139effdcc91b7d9295 MD5 | raw file
  1. <?php
  2. if (!defined('_ECRIRE_INC_VERSION')) return;
  3. include_spip('noizetier_fonctions');
  4. if (!function_exists('autoriser'))
  5. include_spip('inc/autoriser'); // si on utilise le formulaire dans le public
  6. // Détermine les compositions héritables par ce type de page
  7. function heritiers($type){
  8. $heritiers = array();
  9. foreach (compositions_recuperer_heritage() as $enfant => $parent)
  10. if ($parent == $type)
  11. $heritiers = array_merge($heritiers,compositions_lister_disponibles($enfant));
  12. return $heritiers;
  13. }
  14. function formulaires_editer_page_charger_dist($page, $new, $retour=''){
  15. $valeurs = array();
  16. $valeurs['editable'] = autoriser('configurer','noizetier') ? 'on' : '';
  17. $noizetier_compositions = unserialize($GLOBALS['meta']['noizetier_compositions']);
  18. // Si on demande une page
  19. if ($page!=''){
  20. // On désactive de toute façon le nouveau
  21. $new = '';
  22. $type_page = noizetier_page_type($page);
  23. $composition = noizetier_page_composition($page);
  24. // On vérifie que cette composition existe
  25. // et si elle n'existe pas
  26. if (!is_array($noizetier_compositions[$type_page][$composition])){
  27. $contexte['editable'] = false;
  28. $contexte['message_erreur'] = _T('spip:erreur');
  29. }
  30. $valeurs['page'] = $page;
  31. $valeurs['type_page'] = $type_page;
  32. $valeurs['composition'] = $composition;
  33. $valeurs['nom'] = $noizetier_compositions[$type_page][$composition]['nom'];
  34. $valeurs['description'] = $noizetier_compositions[$type_page][$composition]['description'];
  35. $valeurs['icon'] = $noizetier_compositions[$type_page][$composition]['icon'];
  36. $valeurs['_heritiers'] = heritiers($type_page);
  37. foreach($valeurs['_heritiers'] as $t => $i)
  38. if (isset($noizetier_compositions[$type_page][$composition]['branche'][$t]))
  39. $valeurs['heritage-'.$t] = $noizetier_compositions[$type_page][$composition]['branche'][$t];
  40. }
  41. if ($new) {
  42. $valeurs['type_page'] = '';
  43. $valeurs['composition'] = '';
  44. $valeurs['nom'] = '';
  45. $valeurs['description'] = '';
  46. $valeurs['icon'] = '';
  47. // Définir la liste des objets avec compositions
  48. $valeurs['_objets_avec_compos'] = array();
  49. if(defined('_NOIZETIER_COMPOSITIONS_TYPE_PAGE') AND _NOIZETIER_COMPOSITIONS_TYPE_PAGE)
  50. $valeurs['_objets_avec_compos'][] = 'page';
  51. //Si on voulait se baser sur la config de compositions, on utiliserai compositions_objets_actives(). En fait, à la création d'une compo du noizetier, on modifiera la config de compositions. On se base donc sur la liste des objets sur lesquels compositions est activable et qui dispose déjà d'une page dans le noizetier.
  52. $liste_pages = noizetier_lister_pages();
  53. include_spip('base/objets');
  54. foreach(lister_tables_objets_sql() as $objet)
  55. if (isset($objet['page']) && ($obj = $objet['page']) && isset($liste_pages[$obj]))
  56. $valeurs['_objets_avec_compos'][] = $obj;
  57. }
  58. $valeurs['page'] = $page;
  59. $valeurs['new'] = $new;
  60. return $valeurs;
  61. }
  62. function formulaires_editer_page_verifier_dist($page, $new, $retour=''){
  63. $erreurs = array();
  64. foreach(array('type_page','composition','nom') as $champ)
  65. if (!_request($champ))
  66. $erreurs[$champ] = _T('noizetier:formulaire_obligatoire');
  67. // On vérifie, dans le cas d'une nouvelle composition que $composition n'est pas déjà pris
  68. // On vérifie aussi que $composition ne contient ni espace, ni tiret
  69. if (_request('new') AND _request('composition')) {
  70. $type_page = _request('type_page');
  71. $composition = _request('composition');
  72. $liste_pages = noizetier_lister_pages();
  73. if (is_array($liste_pages[$type_page.'-'.$composition]))
  74. $erreurs['composition'] = _T('noizetier:formulaire_identifiant_deja_pris');
  75. if (preg_match('#^[a-z0-9_]+$#',$composition)==0)
  76. $erreurs['composition'] = _T('noizetier:formulaire_erreur_format_identifiant');
  77. }
  78. return $erreurs;
  79. }
  80. function formulaires_editer_page_traiter_dist($page, $new, $retour=''){
  81. if (!autoriser('configurer','noizetier'))
  82. return array('message_erreur' => _T('noizetier:probleme_droits'));
  83. $res = array();
  84. $noizetier_compositions = unserialize($GLOBALS['meta']['noizetier_compositions']);
  85. $type_page = _request('type_page');
  86. $composition = _request('composition');
  87. // Au cas où on n'a pas encore configuré de compositions
  88. if (!is_array($noizetier_compositions))
  89. $noizetier_compositions = array();
  90. $noizetier_compositions[$type_page][$composition] = array(
  91. 'nom' => _request('nom'),
  92. 'description' => _request('description'),
  93. 'icon' => _request('icon')
  94. );
  95. $branche = array();
  96. foreach(heritiers($type_page) as $t => $i)
  97. if ($h = _request('heritage-'.$t))
  98. $branche[$t] = $h;
  99. if (count($branche)>0)
  100. $noizetier_compositions[$type_page][$composition]['branche'] = $branche;
  101. ecrire_meta('noizetier_compositions',serialize($noizetier_compositions));
  102. $retours['message_ok'] = _T('noizetier:formulaire_composition_mise_a_jour');
  103. // Si nouvelle composition, on la pré-remplie avec les noisettes de la page mère.
  104. if ($new && $type_page!='page') {
  105. include_spip('base/abstract_sql');
  106. $config_mere = sql_allfetsel(
  107. 'rang, type, composition, bloc, noisette, parametres',
  108. 'spip_noisettes',
  109. 'type='.sql_quote($type_page).' AND composition=""'
  110. );
  111. if (count($config_mere)>0) {
  112. foreach($config_mere as $cle => $noisette)
  113. $config_mere[$cle]['composition'] = $composition;
  114. sql_insertq_multi('spip_noisettes',$config_mere);
  115. }
  116. // On vérifie également que les compositions sont actives sur ce type d'objet
  117. $compositions_actives = compositions_objets_actives();
  118. if (!in_array($type_page,$compositions_actives)) {
  119. $compositions_config = unserialize($GLOBALS['meta']['compositions']);
  120. include_spip('base/objets');
  121. $compositions_config['objets'][] = table_objet_sql($type_page);
  122. ecrire_meta('compositions',serialize($compositions_config));
  123. }
  124. }
  125. if($new) {
  126. // On invalide le cache
  127. include_spip('inc/invalideur');
  128. suivre_invalideur("id='page/$type_page-$composition'");
  129. }
  130. $res['message_ok'] = _T('info_modification_enregistree');
  131. if ($new) {
  132. $res['redirect'] = parametre_url(parametre_url(self(),'new',''),'page',$type_page.'-'.$composition);
  133. }
  134. elseif ($retour) {
  135. if (strncmp($retour,'javascript:',11)==0){
  136. $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/'.substr($retour,11).'/*]]>*/</script>';
  137. $res['editable'] = true;
  138. }
  139. else
  140. $res['redirect'] = $retour;
  141. }
  142. return $res;
  143. }
  144. ?>