$longueur_maxi) { break; } $url = $url2; } $url = substr($url, 1); // On enregistre en utf-8 dans la base $url = rawurldecode($url); if (strlen($url) < $longueur_min) return ''; return $url; } function url_insert(&$set,$confirmer,$separateur){ // Si l'insertion echoue, c'est une violation d'unicite. if (@sql_insertq('spip_urls', $set) <= 0) { // On veut chiper une ancienne adresse ? if ( // un vieux url $vieux = sql_fetsel('*', 'spip_urls', 'url='.sql_quote($set['url'])) // l'objet a une url plus recente AND $courant = sql_fetsel('*', 'spip_urls', 'type='.sql_quote($vieux['type']).' AND id_objet='.sql_quote($vieux['id_objet']) .' AND date>'.sql_quote($vieux['date']), '', 'date DESC', 1 )) { if ($confirmer AND !_request('ok2')) { die ("Vous voulez chiper l'URL de l'objet ".$courant['type']." " . $courant['id_objet']." qui a maintenant l'url " . $courant['url']); } // si oui on le chipe sql_updateq('spip_urls', $set, 'url='.sql_quote($set['url'])); sql_updateq('spip_urls', array('date' => date('Y-m-d H:i:s')), 'url='.sql_quote($set['url'])); } // Sinon else // Soit c'est un Come Back d'une ancienne url propre de l'objet // Soit c'est un vrai conflit. Rajouter l'ID jusqu'a ce que ca passe, // mais se casser avant que ca ne casse. // il peut etre du a un changement de casse de l'url simplement // pour ce cas, on reecrit systematiquement l'url en plus d'actualiser la date do { $where = "type=".sql_quote($set['type'])." AND id_objet=".intval($set['id_objet'])." AND url="; if (sql_countsel('spip_urls', $where .sql_quote($set['url']))) { sql_updateq('spip_urls', array('url'=>$set['url'], 'date' => date('Y-m-d H:i:s')), $where .sql_quote($set['url'])); spip_log("reordonne ".$set['type']." ".$set['id_objet']); return true; } else { $set['url'] .= $separateur.$set['id_objet']; if (strlen($set['url']) > 200) //serveur out ? retourner au mieux return false; elseif (sql_countsel('spip_urls', $where . sql_quote($set['url']))) { sql_updateq('spip_urls', array('url'=>$set['url'], 'date' => date('Y-m-d H:i:s')), 'url='.sql_quote($set['url'])); return true; } } } while (@sql_insertq('spip_urls', $set) <= 0); } sql_updateq('spip_urls', array('date' => date('Y-m-d H:i:s')), 'url='.sql_quote($set['url'])); spip_log("Creation de l'url propre '" . $set['url'] . "' pour ".$set['type']." ".$set['id_objet']); return true; } function url_verrouiller($objet,$id_objet,$url){ $where = "id_objet=".intval($id_objet)." AND type=".sql_quote($objet); $where .= " AND url=".sql_quote($url); // pour verrouiller une url, on fixe sa date dans le futur, dans 10 ans sql_updateq('spip_urls', array('date' => date('Y-m-d H:i:s',time()+10*365.25*24*3600)), $where); } function url_delete($objet,$id_objet,$url=""){ $where = "id_objet=".intval($id_objet)." AND type=".sql_quote($objet); if (strlen($url)) $where .= " AND url=".sql_quote($url); sql_delete("spip_urls",$where); } ?>