/**
 * Retrouve la traduction d'un rôle dans un objet donné 
 *
 * @param string $role
 *     Le role dans la base de donnée
 * @param string $objet
 *     L'objet sur lequel est le rôle
 * @return string
 *     Le texte du rôle dans la langue en cours
 * 
**/
function filtre_role_dist($role, $objet) {
	if (!$role) return '';
	if (!$objet) return $role;
	$roles = roles_presents(table_objet(objet_type($objet)));
	if (isset($roles['titres'][$role])) {
		return _T($roles['titres'][$role]);
	}
	return $role;
}
Beispiel #2
0
/**
 * Lister des rôles connus en base pour une liaion, pour un objet source
 *
 * On retourne cette liste dans le datalist de saisie libre role.
 *
 * @param string $objet_source Objet dont on veut récupérer la liste des identifiants
 * @param string $objet Objet sur lequel est liée la source
 * @param string $objet_lien Objet dont on utilise la table de liaison (c'est forcément soit $objet_source, soit $objet)
 * @return array|bool
 *     - Tableau de roles : tableau de description des roles,
 *     - false si pas de role déclarés
 */
function roles_connus_en_base($objet_source, $objet, $objet_lien)
{
    static $done = array();
    // stocker le résultat
    $hash = "{$objet_source}-{$objet}-{$objet_lien}";
    if (isset($done[$hash])) {
        return $done[$hash];
    }
    if (!($lien = objet_associable($objet_lien))) {
        return $done[$hash] = false;
    }
    // pas de roles sur ces objets, on sort
    $roles = roles_presents($objet_lien, $objet_lien == $objet ? $objet_source : $objet);
    if (!$roles) {
        return $done[$hash] = false;
    }
    list($primary, $l) = $lien;
    $colone_role = $roles['colonne'];
    $all = sql_allfetsel("DISTINCT {$colone_role}", $l, "objet=" . sql_quote($objet_source == $objet_lien ? $objet : $objet_source));
    $done[$hash] = array_map("reset", $all);
    return $done[$hash];
}
Beispiel #3
0
/**
 * Chargement du formulaire d'édition de liens
 *
 * #FORMULAIRE_EDITER_LIENS{auteurs,article,23}
 *   pour associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
 * #FORMULAIRE_EDITER_LIENS{article,23,auteurs}
 *   pour associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
 * #FORMULAIRE_EDITER_LIENS{articles,auteur,12}
 *   pour associer des articles à l'auteur 12, sur la table pivot spip_articles_liens
 * #FORMULAIRE_EDITER_LIENS{auteur,12,articles}
 *   pour associer des articles à l'auteur 12, sur la table pivot spip_auteurs_liens
 *
 * @param string $a
 * @param string|int $b
 * @param int|string $c
 * @param array|bool $options
 *    - Si array, tableau d'options
 *    - Si bool : valeur de l'option 'editable' uniquement
 *
 * @return array
 */
function formulaires_editer_liens_charger_dist($a, $b, $c, $options = array())
{
    // compat avec ancienne signature ou le 4eme argument est $editable
    if (!is_array($options)) {
        $options = array('editable' => $options);
    } elseif (!isset($options['editable'])) {
        $options['editable'] = true;
    }
    $editable = $options['editable'];
    list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c);
    if (!$table_source or !$objet or !$objet_lien or !$id_objet) {
        return false;
    }
    $objet_source = objet_type($table_source);
    $table_sql_source = table_objet_sql($objet_source);
    // verifier existence de la table xxx_liens
    include_spip('action/editer_liens');
    if (!objet_associable($objet_lien)) {
        return false;
    }
    // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
    include_spip('inc/autoriser');
    $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) and autoriser('modifier', $objet, $id_objet));
    if (!$editable and !count(objet_trouver_liens(array($objet_lien => '*'), array($objet_lien == $objet_source ? $objet : $objet_source => '*')))) {
        return false;
    }
    // squelettes de vue et de d'association
    // ils sont différents si des rôles sont définis.
    $skel_vue = $table_source . "_lies";
    $skel_ajout = $table_source . "_associer";
    // description des roles
    include_spip('inc/roles');
    if ($roles = roles_presents($objet_source, $objet)) {
        // on demande de nouveaux squelettes en conséquence
        $skel_vue = $table_source . "_roles_lies";
        $skel_ajout = $table_source . "_roles_associer";
    }
    $valeurs = array('id' => "{$table_source}-{$objet}-{$id_objet}-{$objet_lien}", '_vue_liee' => $skel_vue, '_vue_ajout' => $skel_ajout, '_objet_lien' => $objet_lien, 'id_lien_ajoute' => _request('id_lien_ajoute'), 'objet' => $objet, 'id_objet' => $id_objet, 'objet_source' => $objet_source, 'table_source' => $table_source, 'recherche' => '', 'visible' => 0, 'ajouter_lien' => '', 'supprimer_lien' => '', 'qualifier_lien' => '', '_roles' => $roles, '_oups' => _request('_oups'), 'editable' => $editable);
    // les options non definies dans $valeurs sont passees telles quelles au formulaire html
    $valeurs = array_merge($options, $valeurs);
    return $valeurs;
}