public function editAction()

in pp3/module/Application/src/Application/Controller/PluginVersionController.php [42:141]


    public function editAction() {
        $pvId = $this->params()->fromQuery('id');
        $search = $this->params()->fromQuery('search');
        $pluginVersion = $this->_pluginVersionRepository->find($pvId);
        if ((!$pluginVersion || empty($pvId) || !$pluginVersion->getPlugin()->isOwnedBy($this->getAuthenticatedUserId())) && !$this->isAdmin()) {
            return $this->redirect()->toRoute('plugin', array(
                'action' => 'list'
            ));
        }
        $req = $this->request;
        if ($req->isPost()) {
            $relnotes = $this->params()->fromPost('relnotes');
            if ($pluginVersion->getErrorMessage()) {
                $pluginVersion->setErrorMessage(null);
                $this->_pluginVersionRepository->persist($pluginVersion);
            }
            if (!empty($relnotes)) {
                $config = HTMLPurifier_Config::createDefault();
                $purifier = new HTMLPurifier($config);
                $pluginVersion->setRelnotes($purifier->purify($relnotes));
                $this->_pluginVersionRepository->persist($pluginVersion);
                $showFlash = true;
            }
            // handle nb versions assignmnent
            $selectedNbVersionIds = $this->params()->fromPost('nbVersion_ids');
            if (!empty($selectedNbVersionIds)) {
                $assignedNbVersions = array();
                foreach($pluginVersion->getNbVersionsPluginVersions() as $nbvPv) {
                    // remove if deselected
                    if (!in_array($nbvPv->getNbVersionId(), $selectedNbVersionIds)) {
                        $this->_nbVersionPluginVersionRepository->remove($nbvPv);
                        $showFlash = true;
                    } else {
                        $assignedNbVersions[] = $nbvPv->getNbVersionId();
                    }
                }                                
                // and add newly selected
                foreach($selectedNbVersionIds as $selectedNbVersionId) {
                    if (!in_array($selectedNbVersionId, $assignedNbVersions)) {
                        $newNbvpv = new NbVersionPluginVersion();
                        $newNbvpv->setNbVersion($this->_nbVersionRepository->find($selectedNbVersionId));
                        $newNbvpv->setPluginVersion($pluginVersion);
                        $pluginVersion->addNbVersion($newNbvpv);
                        $showFlash = true;
                    }
                }
                $this->_pluginVersionRepository->persist($pluginVersion);
            } else {
                // remove all
                foreach($pluginVersion->getNbVersionsPluginVersions() as $nbvPv) {                
                    $this->_nbVersionPluginVersionRepository->remove($nbvPv);
                    $showFlash = true;
                }
            }

            $this->rebuildAllCatalogs();
            
            if ($showFlash) {
                $plugin = $pluginVersion->getPlugin();
                $plugin->setLastUpdatedAt(new \DateTime('now'));
                $this->_pluginRepository->persist($plugin);
                $this->flashMessenger()->setNamespace('success')->addMessage('Plugin version updated');
                return $this->redirect()->toUrl('./edit?id='.$pluginVersion->getId());                
            }
        }
        
        // droping verification
        $verificationId = $this->params()->fromQuery('verifId');
        if ($verificationId) {
            $verification = $this->_verificationRepository->find($verificationId);
            if ($verification && $verification->getNbVersionPluginVersion()->getPluginVersion()->getId() == $pluginVersion->getId()) {
                $this->_verificationRepository->remove($verification);
                $nbvPv = $verification->getNbVersionPluginVersion();
                $nbvPv->setVerification(null);
                $this->_nbVersionPluginVersionRepository->persist($nbvPv);
                $this->flashMessenger()->setNamespace('success')->addMessage('Verification dropped');
                return $this->redirect()->toUrl('./edit?id='.$pluginVersion->getId());
            }
        }
        
        
        $verifiedNbVersions = $this->_nbVersionRepository->getVerifiedNbVersionIdsForPlugin($pluginVersion->getPlugin()->getId());
        $verifiedNbVersionIds = array();
        foreach($verifiedNbVersions as $v) {
            $verifiedNbVersionIds[]=$v['id'];
        }

        if ($this->isAdmin() && !empty($search)) {
            $backUrl = $this->url()->fromRoute('admin', array('action' => 'index'), array('query' => array('search' => $search)));
        } else {
            $backUrl = $this->url()->fromRoute('plugin', array('action' => 'list'));
        }
        
        return new ViewModel([
            'pluginVersion' => $pluginVersion,
            'nbVersions' => $this->_nbVersionRepository->findAll(),
            'verifiedNbVersionIds' => $verifiedNbVersionIds,
            'return' => $backUrl, 
        ]);
    }