Salut, j'ai un probleme d'utilisation du plugin media de Grafikart.
J'ai tout configurer correctement cependant, voila le resultat :

Je ne sais pas ce qui pose probleme.
Il m'affiche que le post n'existe pas dans le iframe.

J'ai essayer de débugger a plusieur endroit, mais rien ne s'affiche.

Auriez vous une idée de mon problème :'(

Cordialement Airday

7 réponses


Airday
Auteur
Réponse acceptée

J'ai trouvé mon problème.
Merci a toi Lartak11 pour m'avoir aidé.

public function beforeFilter(){
        parent::beforeFilter();
        if(isset($this->Auth)) {
            $this->Auth->userModel = 'User';
            $this->Auth->fields = array('username' => 'username', 'password' => 'password');
            $this->Auth->userScope = array('User.active' => 1);
            $this->Auth->loginAction = '/users/login';
            $this->Auth->loginError = "Identifiant ou mot de passe incorrects.";
            $this->Auth->logoutRedirect = '/';
            $this->Auth->authError = "Vous n'avez pas accès à cette page.";
                        $this->Auth->autoRedirect = false;
            //$this->Auth->authorize = 'controller';
        }
    }

C'etais le $this->Auth->authorize = 'controller'; qui bloquer le plugin.

Bonsoir.
S'il te dit que le post n'existe pas, c'est qu'il ne doit pas avoir d'ID de défini.
À la base, le plugin Media n'est fonctionnel que pour les enregistrement ayants un ID de défini et non pour un nouvel enregistrement.
Tu peux toujours utiliser le plugin Draft pour palier à ce problème, car celui-ci créera un nouvel enregistrement, qui par conséquent définira un ID alors que l'enregistrement n'existait pas précédemment au moment de la demande, et ce, de manière "transparente".

Airday
Auteur

Merci Lartak, j'ai déja palier ce probleme avec le Plugin Draft, mais meme avec ce dernier, il ne trouve pas avec l'id.

public function add() {
                // Recherche un article qui a le champ draft a true
        $article = $this->Post->find('first',array(
            'conditions' => array('draft' => '1', 'user_id' => $this->Session->read('Auth.User.id'))
        ));

                // Si l'article n'existe pas alors il en crée un grace au plugin Draft et le redirige
                // sinon il renvoie directement sur l'action edit avec l'id en parametre
        if(empty($article)){
            $token = uniqid($this->Session->read('Auth.User.id') + (time() * rand(20, 32)));
            $id = $this->Article->getDraftId(array(
                'draft' => 1,
                'category_id' => 1,
                'shop_id' => $this->Session->read('Auth.User.Shop.id'),
                'user_id' => $this->Session->read('Auth.User.id'),
                'token' => $token
            ));
            return $this->redirect(array('action' => 'edit', $id));
        }else{
            return $this->redirect(array('action' => 'edit', $article'Article']'id']));
        }
    }

Bonsoir.
Tu n'as pas besoin de faire deux fonctions distinctes avec le plugin Draft (add et edit dans ton cas)
Il te suffit de faire la fonction edit par exemple et y mettre quelque chose comme :

public function edit($id = null){
    if(!$id){
        $id = $this->Article->getDraftId(array(
            'draft' => 1,
            'category_id' => 1,
            'shop_id' => $this->Session->read('Auth.User.Shop.id'),
            'user_id' => $this->Session->read('Auth.User.id'),
            'token' => $token));
    }
    /* Ta partie de sauvegarde */
    $this->request->data = $this->Article->findById($id);
}

Par contre, c'est normal pour ton problème d'ID par rapport au code que tu as donné, tu fais un find sur Post et un Draft sur Article.
Si tu crées un brouillon sur le modèle Article et que tu fais un find sur le modèle Post, il ne risque pas de trouver d'article.
Le plugin Draft te permet de créer un enregistrement et de récupérer l'ID, mais si tu essaies de renvoyer des données à ta vue depuis un modèle différent à celui en cours, ça ne peut pas fonctionner.

Airday
Auteur

Bonsoir, Merci Lartak11 encore ^^
J'ai juste fait un erreur sur ce petit bémol.
Et je préféré avoir met deux méthodes pour par m'y perdre ;)

Alors j'ai fait les correction et j'ai toutjours le meme probleme :'(

public function edit($id = null) {
    if($id == null){
        $this->redirect(array('controller' => 'users', 'action' => 'index'));
    }
    $post = $this->Post->find('first', 
        array(
            'conditions' => array(
                'Post.' . $this->Post->primaryKey => $id,
                'Post.user_id' => $this->Session->read('Auth.User.id')
            )
        )
    );
    if(empty($post)){
        $this->redirect(array('controller' => 'users', 'action' => 'index'));
    }

    if (!empty($this->request->data) && !empty($post)) {
        if($this->request->data'Post']'token'] == $post'Post']'token']){
            if($post'Post']'draft'] == 1){
                //BLALAL
            } else {
                //ERROR
            }
            if($post'Post']'draft'] == 0){
                 //BLALAL
            } else {
                //ERROR
            }
        }
    }else{
        $this->Session->setFlash('Une erreur s\'est produite !', 'flash', array('class' => 'error'));
        $this->redirect(array('controller' => 'users'));
    }
    $this->request->data = $post;
    $categories = $this->Post->Category->find('list');
    $this->set(compact('categories'));
}

Bonjour.
Dis moi, est-ce que tu utilises le Plugin DebugKit ?
Ce qui m'inquiète dans ton code, c'est que tu es actuellement en développement pour ce projet et tu ne fais quasiment pas de message flash pour voir d'où peut venir les erreurs, dans tes redirects par exemple, tu devrais indiquer un message indiquant l'erreur rencontré pour qu'il y ait une redirection (que tu enlèverais par la suite avant la mise en production ou lorsque le système en cours est parfaitement fonctionnel).

Ensuite, c'est peut-être parce que tu n'indiques pas l'ID au Helper Media de la manière qu'il l'attend.

Airday
Auteur

Bonsoir,
Alors j'ai le plugin DebugKit installé.
Dans le Helper Media :

public function iframe($ref,$ref_id){
    debug($ref);
    debug($ref_id);
    return '<iframe src="' . $this->Html->url("/media/medias/index/$ref/$ref_id", true) . '" style="width:100%;" id="medias-' . $ref . '-' . $ref_id . '"></iframe>';
    }

Cela me retourne bien l'id.

\app\Plugin\Media\View\Helper\MediaHelper.php (line 39)
'Post'
\app\Plugin\Media\View\Helper\MediaHelper.php (line 40)
'1