/** * Compile la balise `#FORMULAIRE_FORUM_PRIVE` qui affiche un formulaire d'ajout * de commentaire pour l'espace privé * * Signature : `#FORMULAIRE_FORUM_PRIVE{[redirection[, objet, id_objet]]}` * * Particularité du contexte du formulaire pour permettre une saisie * de mots-clés dans les forums : si la variable de personnalisation * `$afficher_groupe[]` est définie dans le fichier d'appel, et si la table * de référence est OK, la liste des mots-clés est alors proposée. * * @balise * @see balise_FORMULAIRE_FORUM() * @example * ``` * #FORMULAIRE_FORUM_PRIVE seul calcule (objet, id_objet) depuis la boucle parente * #FORMULAIRE_FORUM_PRIVE{#SELF} pour forcer l'url de retour * #FORMULAIRE_FORUM_PRIVE{#SELF, article, 3} pour forcer l'objet et son identifiant * ``` * * @param Champ $p * Pile au niveau de la balise * @return Champ * Pile complétée par le code à générer */ function balise_FORMULAIRE_FORUM_PRIVE($p) { /** * On recupere $objet et $id_objet depuis une boucle englobante si possible * Sinon, on essaie aussi de recuperer des id_xx dans l'URL qui pourraient indiquer * sur quoi le formulaire porte. * Enfin, on pourra aussi forcer objet et id_objet depuis l'appel du formulaire */ $i_boucle = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle; if (isset($p->boucles[$i_boucle])) { $_id_objet = $p->boucles[$i_boucle]->primary; $_type = $p->boucles[$i_boucle]->id_table; } else { $_id_objet = $_type = ''; } /** * On essaye de trouver les forums en fonction de l'environnement * pour cela, on recupere l'ensemble des id_xxx possibles dans l'env */ $ids = forum_get_objets_depuis_env(); $ids = array_values($ids); $obtenir = array($_id_objet, 'id_forum', 'forcer_previsu', 'statut'); if ($ids) { $obtenir = array_merge($obtenir, $ids); } $p = calculer_balise_dynamique($p, 'FORMULAIRE_FORUM_PRIVE', $obtenir, array("'{$_type}'", count($ids))); return $p; }
/** * @param int $ido * @param int $id_forum * @param array $args * @param array $context_compil * @param bool $objet_obligatoire * @return array|bool */ function balise_forum_retrouve_objet($ido, $id_forum, $args, $context_compil, $objet_obligatoire = true) { $_objet = $context_compil[5]; // type le la boucle deja calcule $nb_ids_env = $context_compil[6]; // nombre d'elements id_xx recuperes $nb = $nb_ids_env; $url = isset($args[$nb]) ? $args[$nb] : ''; $objet = isset($args[++$nb]) ? $args[$nb] : ''; $id_objet = isset($args[++$nb]) ? $args[$nb] : 0; // pas d'objet force ? on prend le type de boucle calcule if (!$objet) { $objet = $_objet; $id_objet = intval($ido); } else { $id_objet = intval($id_objet); } unset($_objet, $ido); $objet = objet_type($objet); // on tente de prendre l'objet issu de l'environnement si un n'a pas pu etre calcule if (!$objet) { $objets = forum_get_objets_depuis_env(); $ids = array(); $i = 0; foreach ($objets as $o => $ido) { if ($id = $args[$i]) { $ids[$o] = $id; } $i++; } if (count($ids) > 1) { if (isset($ids['rubrique'])) { unset($ids['rubrique']); } } if (count($ids) == 1) { $objet = key($ids); $id_objet = array_shift($ids); } } unset($i); // et si on n'a toujours pas ce qu'on souhaite, on tente de le trouver dans un forum existant... if (($objet == 'forum' or !$id_objet) and $id_forum) { if ($objet = sql_fetsel(array('id_objet', 'objet'), 'spip_forum', 'id_forum=' . intval($id_forum))) { $id_objet = $objet['id_objet']; $objet = $objet['objet']; } else { if ($objet_obligatoire) { return false; } } } // vraiment la... faut pas exagerer ! if ($objet_obligatoire and !$id_objet) { return false; } return array($objet, $id_objet, $url); }