Example #1
0
/**
 * Fonction codant et décodant les URLs des objets SQL mis en page par SPIP
 *
 * @api
 * @param string $id
 *   numero de la cle primaire si nombre, URL a decoder si pas numerique
 * @param string $entite
 *   surnom de la table SQL (donne acces au nom de cle primaire)
 * @param string $args
 *   query_string a placer apres cle=$id&....
 * @param string $ancre
 *   ancre a mettre a la fin de l'URL a produire
 * @param bool|string $public
 *   produire l'URL publique ou privee (par defaut: selon espace)
 *   si string : serveur de base de donnee (nom du connect)
 * @param string $type
 *   fichier dans le repertoire ecrire/urls determinant l'apparence
 * @return string|array
 *   url codee ou fonction de decodage
 *   array : derogatoire, la fonction d'url retourne (objet,id_objet) utilises par nettoyer_raccourcis_typo() pour generer un lien titre
 *           (cas des raccourcis personalises [->spip20] : il faut implementer une fonction generer_url_spip et une fonction generer_url_ecrire_spip)
 */
function generer_url_entite($id = '', $entite = '', $args = '', $ancre = '', $public = NULL, $type = NULL)
{
    if ($public === NULL) {
        $public = !test_espace_prive();
    }
    $entite = objet_type($entite);
    // cas particulier d'appels sur objet/id_objet...
    if (!$public) {
        if (!$entite) {
            return '';
        }
        if (!function_exists('generer_url_ecrire_objet')) {
            include_spip('inc/urls');
        }
        $res = generer_url_ecrire_objet($entite, $id, $args, $ancre, false);
    } else {
        if ($type === NULL) {
            $type = isset($GLOBALS['type_urls']) ? $GLOBALS['type_urls'] : (isset($GLOBALS['meta']['type_urls']) ? $GLOBALS['meta']['type_urls'] : "page");
            // sinon type "page" par défaut
        }
        $f = charger_fonction($type, 'urls', true);
        // se rabattre sur les urls page si les urls perso non dispo
        if (!$f) {
            $f = charger_fonction('page', 'urls', true);
        }
        // si $entite='', on veut la fonction de passage URL ==> id
        // sinon on veut effectuer le passage id ==> URL
        if (!$entite) {
            return $f;
        }
        // mais d'abord il faut tester le cas des urls sur une
        // base distante
        if (is_string($public) and $g = charger_fonction('connect', 'urls', true)) {
            $f = $g;
        }
        $res = $f(intval($id), $entite, $args, $ancre, $public);
    }
    if ($res) {
        return $res;
    }
    // Sinon c'est un raccourci ou compat SPIP < 2
    if (!function_exists($f = 'generer_url_' . $entite)) {
        if (!function_exists($f .= '_dist')) {
            $f = '';
        }
    }
    if ($f) {
        $url = $f($id, $args, $ancre);
        if (strlen($args)) {
            $url .= strstr($url, '?') ? '&amp;' . $args : '?' . $args;
        }
        return $url;
    }
    // On a ete gentil mais la ....
    spip_log("generer_url_entite: entite {$entite} ({$f}) inconnue {$type} {$public}");
    return '';
}
Example #2
0
function quete_calendrier_interval_breves($avant, $apres, &$evenements)
{
    $result = sql_select("id_breve, titre, date_heure, id_rubrique", 'spip_breves', "statut='publie' AND date_heure >= {$avant} AND date_heure < {$apres}", '', "date_heure");
    while ($row = sql_fetch($result)) {
        $amj = date_anneemoisjour($row['date_heure']);
        $id = $row['id_breve'];
        $ir = $row['id_rubrique'];
        if (autoriser('voir', 'breve', $id)) {
            $evenements[$amj][] = array('URL' => generer_url_ecrire_objet('breve', $id, '', '', 'prop'), 'CATEGORIES' => calendrier_categories('spip_breves', $ir, 'id_breve'), 'SUMMARY' => $row['titre']);
        }
    }
}