X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fautoriser.php;fp=www%2Fecrire%2Finc%2Fautoriser.php;h=67629f7799fb1f54943bdab2eed43e3f09776eb0;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/inc/autoriser.php b/www/ecrire/inc/autoriser.php new file mode 100644 index 0000000..67629f7 --- /dev/null +++ b/www/ecrire/inc/autoriser.php @@ -0,0 +1,753 @@ + '', 'id_auteur' =>0, 'webmestre' => 'non'); + elseif (is_numeric($qui)) { + $qui = sql_fetsel("*", "spip_auteurs", "id_auteur=".$qui); + } + + // Admins restreints, on construit ici (pas generique mais...) + // le tableau de toutes leurs rubriques (y compris les sous-rubriques) + if (_ADMINS_RESTREINTS AND is_array($qui)) + $qui['restreint'] = liste_rubriques_auteur($qui['id_auteur']); + + if (_DEBUG_AUTORISER) spip_log("autoriser $faire $type $id ($qui[nom]) ?"); + + // Aliases pour les types pas generiques (a etendre et ameliorer) + if ($type == 'groupes_mot') $type = 'groupemots'; + #if ($type == 'syndic_article') $type = 'syndicarticle'; + + // Si une exception a ete decretee plus haut dans le code, l'appliquer + if (isset($GLOBALS['autoriser_exception'][$faire][$type][$id]) + AND autoriser_exception($faire,$type,$id,'verifier')) + return true; + + // Chercher une fonction d'autorisation + // Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist], + // autoriser_faire[_dist], autoriser_defaut[_dist] + $fonctions = $type + ? array ( + 'autoriser_'.$type.'_'.$faire, + 'autoriser_'.$type.'_'.$faire.'_dist', + 'autoriser_'.$type, + 'autoriser_'.$type.'_dist', + 'autoriser_'.$faire, + 'autoriser_'.$faire.'_dist', + 'autoriser_defaut', + 'autoriser_defaut_dist' + ) + : array ( + 'autoriser_'.$faire, + 'autoriser_'.$faire.'_dist', + 'autoriser_defaut', + 'autoriser_defaut_dist' + ); + + foreach ($fonctions as $f) { + if (function_exists($f)) { + $a = $f($faire,$type,$id,$qui,$opt); + break; + } + } + + if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id,$qui[nom]): ".($a?'OK':'niet')); + + return $a; +} + +// une globale pour aller au plus vite dans la fonction generique ci dessus +$GLOBALS['autoriser_exception']=array(); +// http://doc.spip.org/@autoriser_exception +function autoriser_exception($faire,$type,$id,$autoriser=true){ + // une static innaccessible par url pour verifier que la globale est positionnee a bon escient + static $autorisation; + if ($autoriser==='verifier') + return isset($autorisation[$faire][$type][$id]); + if ($autoriser===true) + $GLOBALS['autoriser_exception'][$faire][$type][$id] = $autorisation[$faire][$type][$id] = true; + if ($autoriser===false) { + unset($GLOBALS['autoriser_exception'][$faire][$type][$id]); + unset($autorisation[$faire][$type][$id]); + } + return false; +} + +// Autorisation par defaut : les admins complets OK, les autres non +// http://doc.spip.org/@autoriser_defaut_dist +function autoriser_defaut_dist($faire, $type, $id, $qui, $opt) { + return + $qui['statut'] == '0minirezo' + AND !$qui['restreint']; +} + +// A-t-on acces a l'espace prive ? +// http://doc.spip.org/@autoriser_ecrire_dist +function autoriser_ecrire_dist($faire, $type, $id, $qui, $opt) { + return in_array($qui['statut'], array('0minirezo', '1comite')); +} + +// http://doc.spip.org/@autoriser_previsualiser_dist +function autoriser_previsualiser_dist($faire, $type, $id, $qui, $opt) { + return strpos($GLOBALS['meta']['preview'], ",". $qui['statut'] .",") + !==false; +} + +function autoriser_dater_dist($faire, $type, $id, $qui, $opt) { + if (!isset($opt['statut'])){ + $table = table_objet($type); + $trouver_table = charger_fonction('trouver_table','base'); + $desc = $trouver_table($table); + if (!$desc) + return false; + if (isset($desc['field']['statut'])){ + $statut = sql_getfetsel("statut", $desc['table'], id_table_objet($type)."=".intval($id)); + } + else + $statut = 'publie'; // pas de statut => publie + } + else + $statut = $opt['statut']; + + if ($statut == 'publie' + OR ($statut == 'prop' AND $type=='article' AND $GLOBALS['meta']["post_dates"] == "non")) + return autoriser('modifier', $type, $id); + return false; +} +// Autoriser a publier dans la rubrique $id +// http://doc.spip.org/@autoriser_rubrique_publierdans_dist +function autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt) { + return + ($qui['statut'] == '0minirezo') + AND ( + !$qui['restreint'] OR !$id + OR in_array($id, $qui['restreint']) + ); +} + +// Autoriser a creer une rubrique dans la rubrique $id +// http://doc.spip.org/@autoriser_rubrique_creerrubriquedans_dist +function autoriser_rubrique_creerrubriquedans_dist($faire, $type, $id, $qui, $opt) { + return + ($id OR ($qui['statut'] == '0minirezo' AND !$qui['restreint'])) + AND autoriser('voir','rubrique',$id) + AND autoriser('publierdans','rubrique',$id); +} + +// Autoriser a creer un article dans la rubrique $id +// http://doc.spip.org/@autoriser_rubrique_creerarticledans_dist +function autoriser_rubrique_creerarticledans_dist($faire, $type, $id, $qui, $opt) { + return + $id + AND autoriser('voir','rubrique',$id); +} + +// Autoriser a creer une breve dans la rubrique $id +// http://doc.spip.org/@autoriser_rubrique_creerbrevedans_dist +function autoriser_rubrique_creerbrevedans_dist($faire, $type, $id, $qui, $opt) { + $r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=".sql_quote($id)); + return + $id + AND ($r['id_parent']==0) + AND ($GLOBALS['meta']["activer_breves"]!="non") + AND autoriser('voir','rubrique',$id); +} + +// Autoriser a creer un site dans la rubrique $id +// http://doc.spip.org/@autoriser_rubrique_creersitedans_dist +function autoriser_rubrique_creersitedans_dist($faire, $type, $id, $qui, $opt) { + return + $id + AND autoriser('voir','rubrique',$id) + AND $GLOBALS['meta']['activer_sites'] != 'non' + AND ( + $qui['statut']=='0minirezo' + OR ($GLOBALS['meta']["proposer_sites"] >= + ($qui['statut']=='1comite' ? 1 : 2))); +} + +// Autoriser a modifier un site +// http://doc.spip.org/@autoriser_site_modifier_dist +function autoriser_site_modifier_dist($faire, $type, $id, $qui, $opt) { + if ($qui['statut'] == '0minirezo' AND !$qui['restreint']) + return true; + + $t = sql_fetsel("id_rubrique,statut", "spip_syndic", "id_syndic=".sql_quote($id)); + return ($t + AND autoriser('voir','rubrique',$t['id_rubrique']) + AND ($t['statut'] == 'prop' + OR autoriser('modifier', 'rubrique', $t['id_rubrique']) + ) + ); +} +// Autoriser a voir un site $id_syndic +// http://doc.spip.org/@autoriser_site_voir_dist +function autoriser_site_voir_dist($faire, $type, $id, $qui, $opt) { + return autoriser_site_modifier_dist($faire, $type, $id, $qui, $opt); +} + +// Autoriser a modifier la rubrique $id +// = publierdans rubrique $id +// http://doc.spip.org/@autoriser_rubrique_modifier_dist +function autoriser_rubrique_modifier_dist($faire, $type, $id, $qui, $opt) { + return + autoriser('publierdans', 'rubrique', $id, $qui, $opt); +} + +// On ne peut joindre un document qu'a un article qu'on a le droit d'editer +// mais il faut prevoir le cas d'une *creation* par un redacteur, qui correspond +// au hack id_article = 0-id_auteur +// http://doc.spip.org/@autoriser_joindredocument_dist +function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt){ + return + autoriser('modifier', $type, $id, $qui, $opt) + OR ( + $type == 'article' + AND $id<0 + AND abs($id) == $qui['id_auteur'] + AND autoriser('ecrire', $type, $id, $qui, $opt) + ); +} + +// On ne peut modifier un document que s'il est lie a un objet qu'on a le droit +// d'editer *et* qu'il n'est pas lie a un objet qu'on n'a pas le droit d'editer +// http://doc.spip.org/@autoriser_document_modifier_dist +function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt){ + static $m = array(); + + if ($qui['statut'] == '0minirezo' + AND !$qui['restreint']) + return true; + + if (!isset($m[$id])) { + $vu = false; + $interdit = false; + + $s = sql_select("id_objet,objet", "spip_documents_liens", "id_document=".sql_quote($id)); + while ($t = sql_fetch($s)) { + if (autoriser('modifier', $t['objet'], $t['id_objet'], $qui, $opt)) { + $vu = true; + } + else { + $interdit = true; + break; + } + } + $m[$id] = ($vu && !$interdit); + } + + return $m[$id]; +} + + +// On ne peut supprimer un document que s'il n'est lie a aucun objet +// c'est autorise pour tout auteur ayant acces a ecrire +// http://doc.spip.org/@autoriser_document_modifier_dist +function autoriser_document_supprimer_dist($faire, $type, $id, $qui, $opt){ + if (!intval($id) + OR !$qui['id_auteur'] + OR !autoriser('ecrire','','',$qui)) + return false; + if (sql_countsel('spip_documents_liens', 'id_document='.intval($id))) + return false; + + return true; +} + +// Autoriser a modifier la breve $id +// = admins & redac si la breve n'est pas publiee +// = admins de rubrique parente si publiee +// http://doc.spip.org/@autoriser_breve_modifier_dist +function autoriser_breve_modifier_dist($faire, $type, $id, $qui, $opt) { + $r = sql_fetsel("id_rubrique,statut", "spip_breves", "id_breve=".sql_quote($id)); + return + ($r['statut'] == 'publie') + ? autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt) + : in_array($qui['statut'], array('0minirezo', '1comite')); +} + +// Autoriser a modifier l'article $id +// = publierdans rubrique parente +// = ou statut 'prop,prepa' et $qui est auteur +// http://doc.spip.org/@autoriser_article_modifier_dist +function autoriser_article_modifier_dist($faire, $type, $id, $qui, $opt) { + $r = sql_fetsel("id_rubrique,statut", "spip_articles", "id_article=".sql_quote($id)); + + include_spip('inc/auth'); // pour auteurs_article si espace public + + return + autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt) + OR ( + in_array($qui['statut'], array('0minirezo', '1comite')) + AND in_array($r['statut'], array('prop','prepa', 'poubelle')) + AND auteurs_article($id, "id_auteur=".$qui['id_auteur']) + ); +} + + +// Autoriser a creer un groupe de mots +// http://doc.spip.org/@autoriser_groupemots_creer_dist +function autoriser_groupemots_creer_dist($faire, $type, $id, $qui, $opt) { + return + $qui['statut'] == '0minirezo' + AND !$qui['restreint']; +} + +// Autoriser a modifier un groupe de mots $id +// y compris en ajoutant/modifiant les mots lui appartenant +// http://doc.spip.org/@autoriser_groupemots_modifier_dist +function autoriser_groupemots_modifier_dist($faire, $type, $id, $qui, $opt) { + return + $qui['statut'] == '0minirezo' + AND !$qui['restreint']; +} + +// Autoriser a modifier un mot $id ; note : si on passe l'id_groupe +// dans les options, on gagne du CPU (c'est ce que fait l'espace prive) +// http://doc.spip.org/@autoriser_mot_modifier_dist +function autoriser_mot_modifier_dist($faire, $type, $id, $qui, $opt) { + return + isset($opt['id_groupe']) + ? autoriser('modifier', 'groupemots', $opt['id_groupe'], $qui, $opt) + : ( + $t = sql_getfetsel("id_groupe", "spip_mots", "id_mot=".sql_quote($id)) + AND autoriser('modifier', 'groupemots', $t, $qui, $opt) + ); +} + +// Lire les stats ? +// = tous les admins +// http://doc.spip.org/@autoriser_voirstats_dist +function autoriser_voirstats_dist($faire, $type, $id, $qui, $opt) { + return + $qui['statut'] == '0minirezo'; +} + + +// Voir un objet +// http://doc.spip.org/@autoriser_voir_dist +function autoriser_voir_dist($faire, $type, $id, $qui, $opt) { + if ($type == 'document') + return autoriser_document_voir_dist($faire, $type, $id, $qui, $opt); + if ($qui['statut'] == '0minirezo') return true; + if ($type == 'auteur') return false; + if ($type == 'groupemots') { + $acces = sql_fetsel("comite,forum", "spip_groupes_mots", "id_groupe=".intval($id)); + if ($qui['statut']=='1comite' AND ($acces['comite'] == 'oui' OR $acces['forum'] == 'oui')) + return true; + if ($qui['statut']=='6forum' AND $acces['forum'] == 'oui') + return true; + return false; + } + if ($type != 'article') return true; + if (!$id) return false; + + // un article 'prepa' ou 'poubelle' dont on n'est pas auteur : interdit + $r = sql_getfetsel("statut", "spip_articles", "id_article=".sql_quote($id)); + include_spip('inc/auth'); // pour auteurs_article si espace public + return + in_array($r, array('prop', 'publie')) + OR auteurs_article($id, "id_auteur=".$qui['id_auteur']); +} + +// Voir les revisions ? +// = voir l'objet +// http://doc.spip.org/@autoriser_voirrevisions_dist +function autoriser_voirrevisions_dist($faire, $type, $id, $qui, $opt) { + return + autoriser('voir', $type, $id, $qui, $opt); +} + +// Moderer le forum ? +// = modifier l'objet correspondant (si forum attache a un objet) +// = droits par defaut sinon (admin complet pour moderation complete) +// http://doc.spip.org/@autoriser_modererforum_dist +function autoriser_modererforum_dist($faire, $type, $id, $qui, $opt) { + return + autoriser('modifier', $type, $id, $qui, $opt); +} + +// Modifier un forum ? +// = jamais ! +// http://doc.spip.org/@autoriser_forum_modifier_dist +function autoriser_forum_modifier_dist($faire, $type, $id, $qui, $opt) { + return + false; +} + +// Modifier une signature ? +// = jamais ! +// http://doc.spip.org/@autoriser_signature_modifier_dist +function autoriser_signature_modifier_dist($faire, $type, $id, $qui, $opt) { + return + false; +} + +// Moderer la petition ? +// = modifier l'article correspondant +// = droits par defaut sinon (admin complet pour moderation de tout) +// http://doc.spip.org/@autoriser_modererpetition_dist +function autoriser_modererpetition_dist($faire, $type, $id, $qui, $opt) { + return + autoriser('modifier', $type, $id, $qui, $opt); +} + +// Est-on webmestre ? Signifie qu'on n'a meme pas besoin de passer par ftp +// pour modifier les fichiers, cf. notamment inc/admin +// = rien ni personne sauf definition de +// a l'avenir peut-etre autoriser "admin numero 1" ou une interface de selection +// http://doc.spip.org/@autoriser_webmestre_dist +function autoriser_webmestre_dist($faire, $type, $id, $qui, $opt) { + return + (defined('_ID_WEBMESTRES')? + in_array($qui['id_auteur'], explode(':', _ID_WEBMESTRES)) + :$qui['webmestre']=='oui') + AND $qui['statut'] == '0minirezo' + AND !$qui['restreint'] + ; +} + +// Configurer le site => idem autorisation par defaut +// http://doc.spip.org/@autoriser_configurer_dist +function autoriser_configurer_dist($faire, $type, $id, $qui, $opt) { + return + $qui['statut'] == '0minirezo' + AND !$qui['restreint'] + ; +} + +// Effectuer un backup ? +// admins y compris restreints +// http://doc.spip.org/@autoriser_sauvegarder_dist +function autoriser_sauvegarder_dist($faire, $type, $id, $qui, $opt) { + return + $qui['statut'] == '0minirezo' + ; +} + +// Effacer la base de donnees ? +// webmestres seulement +// http://doc.spip.org/@autoriser_detruire_dist +function autoriser_detruire_dist($faire, $type, $id, $qui, $opt) { + return + autoriser('webmestre', null, null, $qui, $opt); +} + +// Consulter le forum des admins ? +// admins y compris restreints +// http://doc.spip.org/@autoriser_forum_admin_dist +function autoriser_forum_admin_dist($faire, $type, $id, $qui, $opt) { + return + $qui['statut'] == '0minirezo' + ; +} + +// +// http://doc.spip.org/@autoriser_auteur_previsualiser_dist +function autoriser_auteur_previsualiser_dist($faire, $type, $id, $qui, $opt) { + // les admins peuvent "previsualiser" une page auteur + if ($qui['statut'] == '0minirezo' + AND !$qui['restreint']) return true; + // "Voir en ligne" si l'auteur a un article publie + $n = sql_fetsel('A.id_article', 'spip_auteurs_articles AS L LEFT JOIN spip_articles AS A ON L.id_article=A.id_article', "A.statut='publie' AND L.id_auteur=".sql_quote($id)); + return $n ? true : false; +} + +// Modifier un auteur ? +// Attention tout depend de ce qu'on veut modifier +// http://doc.spip.org/@autoriser_auteur_modifier_dist +function autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt) { + + // Ni admin ni redacteur => non + if (!in_array($qui['statut'], array('0minirezo', '1comite'))) + return false; + + // Un redacteur peut modifier ses propres donnees mais ni son login/email + // ni son statut (qui sont le cas echeant passes comme option) + if ($qui['statut'] == '1comite') { + if ($opt['webmestre']) + return false; + elseif ($opt['statut'] OR $opt['restreintes'] OR $opt['email']) + return false; + elseif ($id == $qui['id_auteur']) + return true; + else + return false; + } + + // Un admin restreint peut modifier/creer un auteur non-admin mais il + // n'a le droit ni de le promouvoir admin, ni de changer les rubriques + if ($qui['restreint']) { + if ($opt['webmestre']) + return false; + elseif ($opt['statut'] == '0minirezo' OR $opt['restreintes']) + return false; + else { + if ($id == $qui['id_auteur']) { + if ($opt['statut']) + return false; + else + return true; + } + else if ($id_auteur = intval($id)) { + $t = sql_fetsel("statut", "spip_auteurs", "id_auteur=$id_auteur"); + if ($t AND $t['statut'] != '0minirezo') + return true; + else + return false; + } + // id = 0 => creation + else + return true; + } + } + + // Un admin complet fait ce qu'elle veut + // sauf se degrader + if ($id == $qui['id_auteur'] && $opt['statut']) + return false; + // et toucher au statut webmestre si il ne l'est pas lui meme + // ou si les webmestres sont fixes par constante (securite) + elseif ($opt['webmestre'] AND (defined('_ID_WEBMESTRES') OR !autoriser('webmestre'))) + return false; + // et toucher au statut d'un webmestre si il ne l'est pas lui meme + elseif ($opt['statut'] AND autoriser('webmestre','',0,$id) AND !autoriser('webmestre')) + return false; + else + return true; +} + + +// +// Peut-on faire de l'upload ftp ? +// par defaut, les administrateurs +// +// http://doc.spip.org/@autoriser_chargerftp_dist +function autoriser_chargerftp_dist($faire, $type, $id, $qui, $opt) { + return $qui['statut'] == '0minirezo'; +} + + +// +// Peut-on voir un document dans _DIR_IMG ? +// Tout le monde (y compris les visiteurs non enregistres), puisque par +// defaut ce repertoire n'est pas protege ; si une extension comme +// acces_restreint a positionne creer_htaccess, on regarde +// si le document est lie a un element publie +// (TODO: a revoir car c'est dommage de sortir de l'API true/false) +// +// http://doc.spip.org/@autoriser_document_voir_dist +function autoriser_document_voir_dist($faire, $type, $id, $qui, $opt) { + + if (!isset($GLOBALS['meta']["creer_htaccess"]) + OR $GLOBALS['meta']["creer_htaccess"] != 'oui') + return true; + + if ((!is_numeric($id)) OR $id < 0) return false; + + if (in_array($qui['statut'], array('0minirezo', '1comite'))) + return 'htaccess'; + + if ($liens = sql_allfetsel('objet,id_objet', 'spip_documents_liens', 'id_document='.intval($id))) + foreach ($liens as $l) { + $table_sql = table_objet_sql($l['objet']); + $id_table = id_table_objet($l['objet']); + if (sql_countsel($table_sql, "$id_table = ". intval($l['id_objet']) + . (in_array($l['objet'], array('article', 'rubrique', 'breve')) + ? " AND statut = 'publie'" + : '') + ) > 0) + return 'htaccess'; + } + return false; +} + +// Qui peut activer le debugueur ? +// http://doc.spip.org/@autoriser_debug_dist +function autoriser_debug_dist($faire, $type, $id, $qui, $opt) { + return $qui['statut'] == '0minirezo'; +} + +// Renvoie la liste des rubriques liees a cet auteur, independamment de son +// statut (pour les admins restreints, il faut donc aussi verifier statut) +// Memorise le resultat dans un tableau statique indexe par les id_auteur. +// On peut reinitialiser un element en passant un 2e argument non vide +// http://doc.spip.org/@liste_rubriques_auteur +function liste_rubriques_auteur($id_auteur, $raz=false) { + static $restreint = array(); + + if (!$id_auteur = intval($id_auteur)) return array(); + if ($raz) unset($restreint[$id_auteur]); + elseif (isset($restreint[$id_auteur])) return $restreint[$id_auteur]; + + $where = "id_auteur=$id_auteur AND id_rubrique!=0"; + $table = "spip_auteurs_rubriques"; + // Recurrence sur les sous-rubriques + $rubriques = array(); + while (true) { + $q = sql_select("id_rubrique", $table, $where); + $r = array(); + while ($row = sql_fetch($q)) { + $id_rubrique = $row['id_rubrique']; + $r[]= $rubriques[$id_rubrique] = $id_rubrique; + } + + // Fin de la recurrence : $rubriques est complet + if (!$r) break; + $table = 'spip_rubriques'; + $where = sql_in('id_parent', $r) . ' AND ' . + sql_in('id_rubrique', $r, 'NOT'); + } + + // Affecter l'auteur session le cas echeant + if ($GLOBALS['visiteur_session']['id_auteur'] == $id_auteur) + $GLOBALS['visiteur_session']['restreint'] = $rubriques; + + + return $restreint[$id_auteur] = $rubriques; +} + +// Autoriser a modifier l'URL d'un objet (cf. action=redirect) +// http://doc.spip.org/@autoriser_modifierurl_dist +function autoriser_modifierurl_dist($faire, $quoi, $id, $qui, $opt) { + return autoriser('modifier', $quoi, $id, $qui, $opt); +} + +// http://doc.spip.org/@autoriser_rubrique_editermots_dist +function autoriser_rubrique_editermots_dist($faire,$quoi,$id,$qui,$opts){ + // on recupere les champs du groupe s'ils ne sont pas passes en opt + $droit = substr($GLOBALS['visiteur_session']['statut'],1); + if (!isset($opts['groupe_champs'])){ + if (!$id_groupe = $opts['id_groupe']) + return false; + include_spip('base/abstract_sql'); + $opts['groupe_champs'] = sql_fetsel("*", "spip_groupes_mots", "id_groupe=".intval($id_groupe)); + } + $droit = $opts['groupe_champs'][$droit]; + + return + ($droit == 'oui') + AND + // on verifie que l'objet demande est bien dans les tables liees + in_array( + table_objet($quoi), + explode(',', $opts['groupe_champs']['tables_liees']) + ); +} +// http://doc.spip.org/@autoriser_article_editermots_dist +function autoriser_article_editermots_dist($faire,$quoi,$id,$qui,$opts){ + return autoriser_rubrique_editermots_dist($faire,'article',0,$qui,$opts); +} +// http://doc.spip.org/@autoriser_breve_editermots_dist +function autoriser_breve_editermots_dist($faire,$quoi,$id,$qui,$opts){ + return autoriser_rubrique_editermots_dist($faire,'breve',0,$qui,$opts); +} +// http://doc.spip.org/@autoriser_syndic_editermots_dist +function autoriser_syndic_editermots_dist($faire,$quoi,$id,$qui,$opts){ + return autoriser_rubrique_editermots_dist($faire,'syndic',0,$qui,$opts); +} + +// http://doc.spip.org/@autoriser_rubrique_iconifier_dist +function autoriser_rubrique_iconifier_dist($faire,$quoi,$id,$qui,$opts){ + return autoriser('publierdans', 'rubrique', $id, $qui, $opt); +} +// http://doc.spip.org/@autoriser_auteur_iconifier_dist +function autoriser_auteur_iconifier_dist($faire,$quoi,$id,$qui,$opts){ + return (($id == $qui['id_auteur']) OR + (($qui['statut'] == '0minirezo') AND !$qui['restreint'])); +} +// http://doc.spip.org/@autoriser_mot_iconifier_dist +function autoriser_mot_iconifier_dist($faire,$quoi,$id,$qui,$opts){ + return (($qui['statut'] == '0minirezo') AND !$qui['restreint']); +} +// http://doc.spip.org/@autoriser_article_iconifier_dist +function autoriser_iconifier_dist($faire,$quoi,$id,$qui,$opts){ + // On reprend le code de l'ancien iconifier pour definir les autorisations pour les autres + // objets SPIP. De ce fait meme de nouveaux objets bases sur cet algorithme peuvent continuer + // a fonctionner. Cependant il est recommander de leur definir une autorisation specifique + $table = table_objet_sql($quoi); + $id_objet = id_table_objet($quoi); + $row = sql_fetsel("id_rubrique, statut", $table, "$id_objet=$id"); + $droit = autoriser('publierdans','rubrique',$row['id_rubrique']); + + if (!$droit AND ($row['statut'] == 'prepa' OR $row['statut'] == 'prop' OR $row['statut'] == 'poubelle')) { + $jointure = table_jointure('auteur', 'article'); + if ($droit = sql_fetsel("id_auteur", "spip_$jointure", "id_article=".sql_quote($id) . " AND id_auteur=$connect_id_auteur")) + $droit = true; + } + + return $droit; +} + +// Deux fonctions sans surprise pour permettre les tests +// Dire toujours OK +// http://doc.spip.org/@autoriser_ok_dist +function autoriser_ok_dist($faire, $type, $id, $qui, $opt) { return true; } +// Dire toujours niet +// http://doc.spip.org/@autoriser_niet_dist +function autoriser_niet_dist($faire, $type, $id, $qui, $opt) { return false; } + +?>