diff --git a/core/lib/Thelia/Controller/Admin/ContentController.php b/core/lib/Thelia/Controller/Admin/ContentController.php index 78ee63391..d3706e479 100644 --- a/core/lib/Thelia/Controller/Admin/ContentController.php +++ b/core/lib/Thelia/Controller/Admin/ContentController.php @@ -22,9 +22,12 @@ /*************************************************************************************/ namespace Thelia\Controller\Admin; +use Thelia\Core\Event\Content\ContentCreateEvent; +use Thelia\Core\Event\Content\ContentUpdateEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Form\ContentCreationForm; use Thelia\Form\ContentModificationForm; +use Thelia\Model\ContentQuery; /** @@ -88,7 +91,6 @@ class ContentController extends AbstractCrudController 'postscriptum' => $object->getPostscriptum(), 'visible' => $object->getVisible(), 'url' => $object->getRewrittenUrl($this->getCurrentEditionLocale()), - 'parent' => $object->getParent() ); // Setup the object form @@ -102,7 +104,14 @@ class ContentController extends AbstractCrudController */ protected function getCreationEvent($formData) { - // TODO: Implement getCreationEvent() method. + $contentCreateEvent = new ContentCreateEvent(); + + $contentCreateEvent + ->setLocale($formData['locale']) + ->setDefaultFolder($formData['default_controller']) + ->setTitle($formData['title']) + ->setVisible($formData['visible']) + ; } /** @@ -112,7 +121,19 @@ class ContentController extends AbstractCrudController */ protected function getUpdateEvent($formData) { - // TODO: Implement getUpdateEvent() method. + $contentUpdateEvent = new ContentUpdateEvent($formData['id']); + + $contentUpdateEvent + ->setLocale($formData['locale']) + ->setTitle($formData['title']) + ->setChapo($formData['chapo']) + ->setDescription($formData['description']) + ->setPostscriptum($formData['postscriptum']) + ->setVisible($formData['visible']) + ->setUrl($formData['url']) + ->setDefaultFolder($formData['default_folder']); + + return $contentUpdateEvent; } /** @@ -126,49 +147,75 @@ class ContentController extends AbstractCrudController /** * Return true if the event contains the object, e.g. the action has updated the object in the event. * - * @param unknown $event + * @param \Thelia\Core\Event\Content\ContentEvent $event */ protected function eventContainsObject($event) { - // TODO: Implement eventContainsObject() method. + return $event->hasContent(); } /** * Get the created object from an event. * - * @param unknown $createEvent + * @param $event \Thelia\Core\Event\Content\ContentEvent + * + * @return null|\Thelia\Model\Content */ protected function getObjectFromEvent($event) { - // TODO: Implement getObjectFromEvent() method. + return $event->getContent(); } /** * Load an existing object from the database + * + * @return \Thelia\Model\Content */ protected function getExistingObject() { - // TODO: Implement getExistingObject() method. + return ContentQuery::create() + ->joinWithI18n($this->getCurrentEditionLocale()) + ->findOneById($this->getRequest()->get('content_id', 0)); } /** * Returns the object label form the object event (name, title, etc.) * - * @param unknown $object + * @param $object \Thelia\Model\Content + * + * @return string content title + * */ protected function getObjectLabel($object) { - // TODO: Implement getObjectLabel() method. + return $object->getTitle(); } /** * Returns the object ID from the object * - * @param unknown $object + * @param $object \Thelia\Model\Content + * + * @return int content id */ protected function getObjectId($object) { - // TODO: Implement getObjectId() method. + return $object->getId(); + } + + protected function getFolderId() + { + $folderId = $this->getRequest()->get('folder_id', null); + + if(null === $folderId) { + $content = $this->getExistingObject(); + + if($content) { + $folderId = $content->getDefaultFolderId(); + } + } + + return $folderId ?: 0; } /** @@ -178,7 +225,21 @@ class ContentController extends AbstractCrudController */ protected function renderListTemplate($currentOrder) { - // TODO: Implement renderListTemplate() method. + $this->getListOrderFromSession('content', 'content_order', 'manual'); + + return $this->render('folders', + array( + 'content_order' => $currentOrder, + 'parent' => $this->getFolderId() + )); + } + + protected function getEditionArguments() + { + return array( + 'content_id' => $this->getRequest()->get('content_id', 0), + 'current_tab' => $this->getRequest()->get('current_tab', 'general') + ); } /** @@ -186,7 +247,7 @@ class ContentController extends AbstractCrudController */ protected function renderEditionTemplate() { - // TODO: Implement renderEditionTemplate() method. + return $this->render('content-edit', $this->getEditionArguments()); } /** @@ -194,7 +255,7 @@ class ContentController extends AbstractCrudController */ protected function redirectToEditionTemplate() { - // TODO: Implement redirectToEditionTemplate() method. + $this->redirect($this->getRoute('admin.content.update', $this->getEditionArguments())); } /** @@ -202,6 +263,9 @@ class ContentController extends AbstractCrudController */ protected function redirectToListTemplate() { - // TODO: Implement redirectToListTemplate() method. + $this->redirectToRoute( + 'admin.content.default', + array('parent' => $this->getFolderId()) + ); } } \ No newline at end of file diff --git a/core/lib/Thelia/Controller/Admin/FolderController.php b/core/lib/Thelia/Controller/Admin/FolderController.php index 67dd39b38..9f2190442 100644 --- a/core/lib/Thelia/Controller/Admin/FolderController.php +++ b/core/lib/Thelia/Controller/Admin/FolderController.php @@ -174,7 +174,7 @@ class FolderController extends AbstractCrudController /** * Return true if the event contains the object, e.g. the action has updated the object in the event. * - * @param unknown $event + * @param \Thelia\Core\Event\FolderEvent $event */ protected function eventContainsObject($event) { @@ -228,13 +228,13 @@ class FolderController extends AbstractCrudController */ protected function renderListTemplate($currentOrder) { - // Get product order - $product_order = $this->getListOrderFromSession('content', 'content_order', 'manual'); + // Get content order + $content_order = $this->getListOrderFromSession('content', 'content_order', 'manual'); return $this->render('folders', array( 'folder_order' => $currentOrder, - 'content_order' => $product_order, + 'content_order' => $content_order, 'parent' => $this->getRequest()->get('parent', 0) )); } diff --git a/core/lib/Thelia/Core/Event/Content/ContentCreateEvent.php b/core/lib/Thelia/Core/Event/Content/ContentCreateEvent.php index 75a1fce78..5e2e7f0ea 100644 --- a/core/lib/Thelia/Core/Event/Content/ContentCreateEvent.php +++ b/core/lib/Thelia/Core/Event/Content/ContentCreateEvent.php @@ -32,7 +32,7 @@ namespace Thelia\Core\Event\Content; class ContentCreateEvent extends ContentEvent { protected $title; - protected $parent; + protected $default_folder; protected $locale; protected $visible; @@ -57,13 +57,13 @@ class ContentCreateEvent extends ContentEvent } /** - * @param mixed $parent + * @param mixed $default_folder * * @return $this */ - public function setParent($parent) + public function setDefaultFolder($default_folder) { - $this->parent = $parent; + $this->default_folder = $default_folder; return $this; } @@ -71,11 +71,14 @@ class ContentCreateEvent extends ContentEvent /** * @return mixed */ - public function getParent() + public function getDefaultFolder() { - return $this->parent; + return $this->default_folder; } + + + /** * @param mixed $visible * diff --git a/core/lib/Thelia/Model/Content.php b/core/lib/Thelia/Model/Content.php index 10ed2afe3..ca1978e65 100755 --- a/core/lib/Thelia/Model/Content.php +++ b/core/lib/Thelia/Model/Content.php @@ -30,6 +30,12 @@ class Content extends BaseContent // and generate the position relative to this folder } + public function getDefaultFolderId() + { + //@TODO update contentFolder Table, adding by_default column + } + + /** * {@inheritDoc} */ diff --git a/templates/admin/default/content-edit.html b/templates/admin/default/content-edit.html new file mode 100644 index 000000000..97fc02d70 --- /dev/null +++ b/templates/admin/default/content-edit.html @@ -0,0 +1,344 @@ +{extends file="admin-layout.tpl"} + +{block name="check-permissions"}admin.content.view{/block} + +{block name="page-title"}{intl l='Edit content'}{/block} + +{block name="main-content"} +
+
+ + {* include file="includes/folder-breadcrumb.html" editing_category="true" *} + +
+ {loop name="content_edit" type="content" visible="*" id="{$content_id}" backend_context="1" lang="$edit_language_id"} +
+
+
+ {intl l='Edit content %title' title=$TITLE} +
+ +
+ + {if $HAS_PREVIOUS != 0} + + {else} + + {/if} + + + + {if $HAS_NEXT != 0} + + {else} + + {/if} +
+
+ +
+
+ + + +
+ +
+ +
+ + {form name="thelia.admin.content.modification"} +
+ + {include file="includes/inner-form-toolbar.html" close_url="{url path='/admin/folders' parent=0}"} + + {* Be sure to get the folder ID, even if the form could not be validated *} + + + + + {form_hidden_fields form=$form} + + {form_field form=$form field='success_url'} + + {/form_field} + + {form_field form=$form field='locale'} + + {/form_field} + + {if $form_error}
{$form_error_message}
{/if} + + {include file="includes/standard-description-form-fields.html"} + + {form_field form=$form field='url'} +
+ + + +
+ {/form_field} + + {*
+
+ {form_field form=$form field='parent'} +
+ + + + +
+ {/form_field} +
+ +
+ {form_field form=$form field='visible'} +
+ +
+ +
+
+ {/form_field} +
+
*} + +
+
+
+   +
+

{intl l='Colder created on %date_create. Last modification: %date_change' date_create="{format_date date=$CREATE_DATE}" date_change="{format_date date=$UPDATE_DATE}"}

+
+
+
+
+ +
+ {/form} +
+
+ +
+
+
+ +
+ + + + + + + + + {module_include location='folder_contents_table_header'} + + + + + + + {*loop name="assigned_contents" type="associated_content" folder="$folder_id" backend_context="1" lang="$edit_language_id"} + + + + + + {module_include location='folder_contents_table_row'} + + + + {/loop} + + {elseloop rel="assigned_contents"} + + + + {/elseloop*} + +
{intl l='ID'}{intl l='Attribute title'}{intl l="Actions"}
{$ID} + {$TITLE} + +
+ {loop type="auth" name="can_create" roles="ADMIN" permissions="admin.configuration.folder.content.delete"} + + + + {/loop} +
+
+
+ {intl l="This folder contains no contents"} +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ {/loop} +
+
+
+ + +{* Delete related content confirmation dialog *} + + {capture "delete_content_dialog"} + + + + + + {/capture} + + {include + file = "includes/generic-confirm-dialog.html" + + dialog_id = "delete_content_dialog" + dialog_title = {intl l="Remove related content"} + dialog_message = {intl l="Do you really want to remove this related content ?"} + +form_action = {url path='/admin/folders/related-content/delete'} +form_content = {$smarty.capture.delete_content_dialog nofilter} +} +{/block} + +{block name="javascript-initialization"} + +{/block} \ No newline at end of file