/** * 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, '?') ? '&' . $args : '?' . $args; } return $url; } // On a ete gentil mais la .... spip_log("generer_url_entite: entite {$entite} ({$f}) inconnue {$type} {$public}"); return ''; }
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']); } } }