[SPIP Zone] Agenda 2.0 : saisie libre d'événement ?

Bonjour,

Est-il possible de permettre la saisie d’événement par des visiteurs non connectés ?
Je n’y arrive pas. Même avec l’aide de l’article de spip-contrib.

Le formulaire apparaît bien. Mais après la validation un message me dit que je ne suis pas autorisé.
Sans doute parce que « anonyme » n’est pas l’auteur de l’article.

Je n’ai pas vu de différence avec ou sans « ajout_evenement=oui » dans l’url (la doc 2.0 renvoie sur 1.9 pour la partie publique).

Est-ce bien prévu par le plugin ? Avec un moyen simple et propre donc.

J’ai tenté de contourner en enlevant le contrôle de droits dans la fonction « formulaires_editer_evenement_verifier_dist »

if (!$id_parent = intval(_request(‹ id_parent ›)))
$erreurs[‹ id_parent ›] = _T(‹ agenda:erreur_article_manquant ›);
/* suppression début else {
if (!autoriser(‹ creerevenementdans ›,‹ article ›,$id_parent))
$erreurs[‹ id_parent ›] = _T(‹ agenda:erreur_article_interdit ›);
} suppression fin */

#if (!count($erreurs))

$erreurs[‹ message_erreur ›] = ‹ ok? ›;

return $erreurs;

Le message d’erreur n’apparaît plus…
Mais il doit y avoir un problème plus loin car l’événement n’apparaît pas non plus dans l’agenda.

Bonne piste tout d même ?

D’avance merci.

Luc

Bonjour,

Pour rendre la saisie d’événement publique, la seule façon que j’ai trouvée est de modifier les fonctions « autoriser… » du plugin (module agenda_autoriser.php).

function autoriser_article_creerevenementdans_dist($faire,$quoi,$id,$qui,$options){
return(true); /* hack pour rendre public*/
if (!$id) return false; // interdit de creer un evenement sur un article vide !
// si on a le droit de modifier l’article alors on a le droit d’y creer un evenement !
return autoriser(‹ modifier ›,‹ article ›,$id);
}

function autoriser_evenement_modifier_dist($faire,$quoi,$id,$qui,$options){
return(true); /* hack rendre public*/
if (!isset($options[‹ id_article ›]) OR !$id_article=$options[‹ id_article ›])
$id_article = sql_getfetsel(‹ id_article ›,‹ spip_evenements ›,‹ id_evenement= ›.intval($id));
if (!$id_article) return false;
return autoriser(‹ modifier ›,‹ article ›,$id_article,$qui);
}

Avez-vous plus propre ?
Autre solution ?
Ou bien un autre emplacement (répertoire squelettes ?) pour ne pas toucher aux fichiers sources du plugin ? Cela n’a pas marché en les mettant dans mes_fonctions.php, sans doute parce que pipeline ?

D’avance merci.

Luc

luc.tech a écrit :

Les fonctions autoriser...() de l'api autoriser() sont faites pour être surchargées en fonction des besoins spécifiques de chaque application.
Il suffit, dans mes_options.php de définir, dans ton cas

function autoriser_article_creerevenementdans($faire,$quoi,$id,$qui,$options){

return true;
}

function autoriser_evenement_modifier($faire,$quoi,$id,$qui,$options){

return true;
}

Attention donc :
- a bien enlever le suffixe _dist car sinon cela va planter (2 fois la meme fonction definie).
- a bien les definir dans ton fichier mes_options

Cédric

Le 15 avr. 09 à 17:49, luc.tech a écrit :

Bonjour,

Pour rendre la saisie d'événement publique, la seule façon que j'ai trouvée est de modifier les fonctions "autoriser..." du plugin (module agenda_autoriser.php).
function autoriser_article_creerevenementdans_dist($faire,$quoi,$id,$qui,$options){
   return(true); /* hack pour rendre public*/
    if (!$id) return false; // interdit de creer un evenement sur un article vide !
    // si on a le droit de modifier l'article alors on a le droit d'y creer un evenement !
    return autoriser('modifier','article',$id);
}

function autoriser_evenement_modifier_dist($faire,$quoi,$id,$qui,$options){
   return(true); /* hack rendre public*/
    if (!isset($options['id_article']) OR !$id_article=$options['id_article'])
        $id_article = sql_getfetsel('id_article','spip_evenements','id_evenement='.intval($id));
    if (!$id_article) return false;
    return autoriser('modifier','article',$id_article,$qui);
}

Avez-vous plus propre ?
Autre solution ?
Ou bien un autre emplacement (répertoire squelettes ?) pour ne pas toucher aux fichiers sources du plugin ? Cela n'a pas marché en les mettant dans mes_fonctions.php, sans doute parce que pipeline ?

D'avance merci.

Luc

luc.tech a écrit :

Bonjour,

Est-il possible de permettre la saisie d'événement par des visiteurs non connectés ?
Je n'y arrive pas. Même avec l'aide de l'article de spip-contrib.

Le formulaire apparaît bien. Mais après la validation un message me dit que je ne suis pas autorisé.
Sans doute parce que "anonyme" n'est pas l'auteur de l'article.

Je n'ai pas vu de différence avec ou sans "ajout_evenement=oui" dans l'url (la doc 2.0 renvoie sur 1.9 pour la partie publique).

Est-ce bien prévu par le plugin ? Avec un moyen simple et propre donc.

J'ai tenté de contourner en enlevant le contrôle de droits dans la fonction "formulaires_editer_evenement_verifier_dist"
    if (!$id_parent = intval(_request('id_parent')))
        $erreurs['id_parent'] = _T('agenda:erreur_article_manquant');
    /* suppression début else {
        if (!autoriser('creerevenementdans','article',$id_parent))
            $erreurs['id_parent'] = _T('agenda:erreur_article_interdit');
    } suppression fin */

    #if (!count($erreurs))
    # $erreurs['message_erreur'] = 'ok?';
    return $erreurs;
Le message d'erreur n'apparaît plus...
Mais il doit y avoir un problème plus loin car l'événement n'apparaît pas non plus dans l'agenda.

Bonne piste tout d même ?

D'avance merci.

Luc

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Merci Cédric pour ta réponse claire et détaillée,

ça marche nickel.
Il va me falloir me remettre à niveaux sur les "fondamentaux SPIP". Il y a eu de sacrés progrès depuis la 1.8 !

Quand le résultat est présentable, je le "montrerai".

Luc

cedric.morin@yterium.com a écrit :

Les fonctions autoriser...() de l'api autoriser() sont faites pour être surchargées en fonction des besoins spécifiques de chaque application.
Il suffit, dans mes_options.php de définir, dans ton cas

function autoriser_article_creerevenementdans($faire,$quoi,$id,$qui,$options){

return true;
}

function autoriser_evenement_modifier($faire,$quoi,$id,$qui,$options){

return true;
}

Attention donc :
- a bien enlever le suffixe _dist car sinon cela va planter (2 fois la meme fonction definie).
- a bien les definir dans ton fichier mes_options

Cédric

Le 15 avr. 09 à 17:49, luc.tech a écrit :

Bonjour,

Pour rendre la saisie d'événement publique, la seule façon que j'ai trouvée est de modifier les fonctions "autoriser..." du plugin (module agenda_autoriser.php).
function autoriser_article_creerevenementdans_dist($faire,$quoi,$id,$qui,$options){

   return(true); /* hack pour rendre public*/
    if (!$id) return false; // interdit de creer un evenement sur un article vide !
    // si on a le droit de modifier l'article alors on a le droit d'y creer un evenement !
    return autoriser('modifier','article',$id);
}

function autoriser_evenement_modifier_dist($faire,$quoi,$id,$qui,$options){
   return(true); /* hack rendre public*/
    if (!isset($options['id_article']) OR !$id_article=$options['id_article'])
        $id_article = sql_getfetsel('id_article','spip_evenements','id_evenement='.intval($id));

    if (!$id_article) return false;
    return autoriser('modifier','article',$id_article,$qui);
}

Avez-vous plus propre ?
Autre solution ?
Ou bien un autre emplacement (répertoire squelettes ?) pour ne pas toucher aux fichiers sources du plugin ? Cela n'a pas marché en les mettant dans mes_fonctions.php, sans doute parce que pipeline ?

D'avance merci.

Luc

luc.tech a écrit :

Bonjour,

Est-il possible de permettre la saisie d'événement par des visiteurs non connectés ?
Je n'y arrive pas. Même avec l'aide de l'article de spip-contrib.

Le formulaire apparaît bien. Mais après la validation un message me dit que je ne suis pas autorisé.
Sans doute parce que "anonyme" n'est pas l'auteur de l'article.

Je n'ai pas vu de différence avec ou sans "ajout_evenement=oui" dans l'url (la doc 2.0 renvoie sur 1.9 pour la partie publique).

Est-ce bien prévu par le plugin ? Avec un moyen simple et propre donc.

J'ai tenté de contourner en enlevant le contrôle de droits dans la fonction "formulaires_editer_evenement_verifier_dist"
    if (!$id_parent = intval(_request('id_parent')))
        $erreurs['id_parent'] = _T('agenda:erreur_article_manquant');
    /* suppression début else {
        if (!autoriser('creerevenementdans','article',$id_parent))
            $erreurs['id_parent'] = _T('agenda:erreur_article_interdit');
    } suppression fin */

    #if (!count($erreurs))
    # $erreurs['message_erreur'] = 'ok?';
    return $erreurs;
Le message d'erreur n'apparaît plus...
Mais il doit y avoir un problème plus loin car l'événement n'apparaît pas non plus dans l'agenda.

Bonne piste tout d même ?

D'avance merci.

Luc

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Le 18 avr. 09 à 11:28, luc.tech a écrit :

Merci Cédric pour ta réponse claire et détaillée,

ça marche nickel.
Il va me falloir me remettre à niveaux sur les "fondamentaux SPIP". Il y a eu de sacrés progrès depuis la 1.8 !

Quand le résultat est présentable, je le "montrerai".

Sans même attendre, tu peux déjà faire un bout de doc sur spip-contrib pour expliquer pas à pas comment faire de la saisie d'evenements dans le site public avec agenda 2.0 :stuck_out_tongue:
Rien de mieux en effet qu'un cas concret comme support à une doc, car lorsqu'on l'écrit de manière théorique il manque toujours des étapes.

Cédric