Skip to content
Snippets Groups Projects

Sandbox multiple articles selection

Closed Ghislain Loas requested to merge sandbox_multiple_articles_selection into WIP
Compare and
+ 702
24
Preferences
Compare changes
Files
@@ -594,6 +594,118 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
$this->getRequest()->setParamSources(['_GET', '_POST']);
return $url;
}
}
public function clearMultipleArticlesAction() {
Zend_Registry::get('session')->selected_articles = [];
$this->_redirectToReferer();
}
public function editMultipleArticlesAction() {
$this->view->titre = $this->_('Modifier les articles');
$model_ids = $this->_getParam('ids');
$model_ids = explode('-', $model_ids);
$model_ids = array_filter($model_ids, function($id) { return '-' !== $id;});
$articles = Class_Article::findAllBy(['id_article' => $model_ids]);
if ($this->_setupFormAndUpdateModels($articles)) {
$this->_helper->notify($this->_('Les articles sélectionnés ont bien été sauvegardés'));
$this->_redirect('admin/cms');
}
}
protected function _setupFormAndUpdateModels($articles) {
$form = $this->_getMultipleSelectionForm($this->_definitions->newModel());
$this->view->form = $form;
if (!$this->_request->isPost())
return false;
// for multicheckboxes, if none is checked nothing is posted, default to empty
$defaults = [];
foreach ($form->getMulticheckboxNames() as $checkbox_name)
$defaults[$checkbox_name] = [];
$post = array_filter(array_merge($defaults, $this->_getPost()));
$custom_values = [];
foreach ($post as $k=>$v)
if (preg_match('/field_[0-9]+/', $k)) {
$custom_values[$k] = $v;
unset($post[$k]);
}
foreach($articles as $article) {
$article->updateAttributes($post);
if ((!$form->isValidModelAndArray($article, $this->_getPost())))
return false;
$this->_doBeforeSave($article);
if (!$article->save())
return false;
$model_values = $this->_getCustomFieldModelValues($article);
$custom_form = $this->_getCustomFieldForm($model_values);
$custom_form->populate($custom_values);
$custom_form->updateModelValues();
$model_values->save();
$this->_doAfterSave($article);
}
return true;
}
protected function _getMultipleSelectionForm($model) {
$this
->_definitions
->setFormClassName('ZendAfi_Form_Admin_News');
$form = parent::_getForm($model);
return $form->beMultipleSelection();
}
public function multipleSelectWidgetAction() {
$session = Zend_Registry::get('session');
$article_id = $this->_getParam('select_id', '');
$cat_id = $this->_getParam('select_id_cat', '');
$articles_ids = Class_ArticleCategorie::findAllArticlesIds([$cat_id]);
if(!$selected_articles = $session->selected_articles)
$selected_articles = $session->selected_articles = [];
$selected_articles = array_merge($selected_articles, $articles_ids, [$article_id]);
$selected_articles = array_unique(array_filter($selected_articles));
$session->selected_articles = $selected_articles;
$this->_redirectToReferer();
}
public function removeItemAction() {
$session = Zend_Registry::get('session');
$article_id = $this->_getParam('select_id', '');
$cat_id = $this->_getParam('select_id_cat', '');
$articles_ids = Class_ArticleCategorie::findAllArticlesIds([$cat_id]);
if(!$selected_articles = $session->selected_articles)
$selected_articles = $session->selected_articles = [];
$selected_articles = array_diff($selected_articles, $articles_ids, [$article_id]);
$selected_articles = array_unique(array_filter($selected_articles));
$session->selected_articles = $selected_articles;
$this->_redirectToReferer();
}
}
?>
\ No newline at end of file