web-dev-qa-db-fra.com

Etat mis à 0 après parent :: publish

J'étends la méthode de publication de mon contrôleur pour une tâche appelée "setup".

C'est la méthode étendue:

/**
 * publish function.
 * 
 * @access public
 * @return void
 */
public function publish()
{
    $app      = JFactory::getApplication();
    $jinput   = JFactory::getApplication()->input;
    $ids      = $jinput->get('cid', '', 'array');
    $task     = $this->getTask();
    $date     = JFactory::getDate();            

    $modelitem  = $this->getModel('Item');
    $tableitem  = JTable::getInstance('Item','BestiaTable');      

    foreach($ids as $id)
    {
        $tableitem->load($id);

        switch($task)
        {
            case 'publish'  : $tableitem->autorenew = 1;  
                              break;    

            case 'unpublish': $tableitem->autorenew = 1;
                              break;

            case 'archive'  : $tableitem->autorenew    = 0;
                              $tableitem->terminatedon = $date->toSql();     
                              break;

            case 'trash'    : $tableitem->autorenew    = 0;
                              $tableitem->terminatedon = $date->toSql();
                              $tableitem->end          = $date->toSql();
                              $tableitem->overwriteend = 1;

            case 'setup'    : $SetupHelper             = SetupHelper::getInstance();
                              $setupitem               = $SetupHelper->setupItem($id);
                              if ($setupitem)
                              {

                              }
                              else
                              {
                                  $app->enqueueMessage(implode(", ", $SetupHelper->getErrors()), 'warning');          
                              }
                              break;
            break;
        }

        $tableitem->store();            
    }

    $publish = parent::publish();
    $this->setRedirect('index.php?option=com_bestia&view=items', false);

    return true;
}

Ok - la publication et la dépublication fonctionnent bien, mais la tâche d'installation qui est lancée par un bouton de barre d'outils comme celui-ci:

JToolbarHelper::custom('items.setup', 'cogs', '', 'Setup item', true);

Change toujours l'état de l'objet en 0 au lieu de -1 _ (qui est l’état de "wait for setup" ou 1 (qui est l'état de "setup okay").

Comment puis-je changer ce comportement et dire à la méthode quel état utiliser?

1
MyFault

Vous appelez parent::publish(). Cette méthode a un tableau qui mappe les tâches aux états ( ligne 19 ):

$data = array('publish' => 1, 'unpublish' => 0, 'archive' => 2, 'trash' => -2, 'report' => -3);

Ensuite, il obtient la tâche (ligne suivante):

$task = $this->getTask();

Ce qui est "setup" dans votre cas. Après cela, il essaie de lire la valeur de la tâche dans le tableau:

$value = JArrayHelper::getValue($data, $task, 0, 'int');

Mais il ne trouvera pas "setup" dans ce tableau. La valeur est donc 0. Cela explique pourquoi votre état passe à 0.

Je n'appellerais pas parent :: publish () si votre tâche est "setup". Vous pourriez éviter cela en encapsulant cet appel comme ceci:

 if($task != "setup")
 {
     $publish                             =   parent::publish();
 }
 else
 {
    // Check the code from JControllerAdmin how to set models state 
    // e.g. $modelitem->publish($id, -1); set a Nice message and how to redirect
    // back to your list
 }
3
fruppel