/** * 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; }
/** * 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]; }
/** * 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; }