/**
 * 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;
}
Beispiel #2
0
/**
 * @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);
}