openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit f4953b32dddc06db297150919c81d30a81c003fa
parent 23cf8089e93e8a46dd917e5082e8f5bd8a6f85f2
Author: dankert <openrat@jandankert.de>
Date:   Sat,  4 Dec 2021 01:03:54 +0100

Fix: Editing all values of the page is now able to save with the new pagecontent.

Diffstat:
Mmodules/cms/action/page/PageAllAction.class.php | 84+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
1 file changed, 48 insertions(+), 36 deletions(-)

diff --git a/modules/cms/action/page/PageAllAction.class.php b/modules/cms/action/page/PageAllAction.class.php @@ -10,10 +10,12 @@ use cms\generator\Producer; use cms\generator\Publisher; use cms\generator\PublishOrder; use cms\model\BaseObject; +use cms\model\Content; use cms\model\Element; use cms\model\Folder; use cms\model\Language; use cms\model\Page; +use cms\model\PageContent; use cms\model\Permission; use cms\model\Project; use cms\model\Value; @@ -32,7 +34,6 @@ class PageAllAction extends PageAction implements Method { public function view() { - $languageid = $this->request->getRequiredNumber('languageid'); $language = new Language($languageid); $language->load(); @@ -41,20 +42,28 @@ class PageAllAction extends PageAction implements Method { $this->setTemplateVar('languageid' , $language->languageid ); $this->setTemplateVar('value_time',time() ); + $this->setTemplateVar('writable' ,$this->page->hasRight( Permission::ACL_WRITE ) ); $elements = []; /** @var Element $element */ foreach ($this->getElements() as $element) { - $value = new Value(); - $value->languageid = $languageid; - $value->objectid = $this->page->objectid; - $value->pageid = $this->page->pageid; - $value->element = &$element; - $value->elementid = &$element->elementid; - $value->element->load(); - $value->publish = false; - $value->load(); + + $pageContent = new PageContent(); + $pageContent->elementId = $element->elementid; + $pageContent->pageId = $this->page->pageid; + $pageContent->languageid = $languageid; + $pageContent->load(); + + if ( $pageContent->isPersistent() ) { + $value = new Value(); + $value->contentid = $pageContent->contentId; + $value->load(); + } + else { + // There is no content yet, so creating an empty value. + $value = new Value(); + } $output = []; $output += $element->getProperties(); @@ -98,7 +107,7 @@ class PageAllAction extends PageAction implements Method { break; case Element::ELEMENT_TYPE_SELECT: - $output['items'] = $value->element->getSelectItems(); + $output['items'] = $element->getSelectItems(); $content = $value->text; break; @@ -138,7 +147,7 @@ class PageAllAction extends PageAction implements Method { break; case Element::ELEMENT_TYPE_NUMBER: - $content = $value->number / pow(10, $value->element->decimals); + $content = $value->number / pow(10, $element->decimals); break; case Element::ELEMENT_TYPE_LONGTEXT: @@ -176,7 +185,6 @@ class PageAllAction extends PageAction implements Method { $this->setTemplateVar('publish', false); $this->setTemplateVar('elements', $elements ); - //echo "<pre>" . print_r($elements,true) . '</pre>'; } @@ -193,15 +201,14 @@ class PageAllAction extends PageAction implements Method { /** @var Element $element */ foreach ($this->getElements() as $element) { + $pageContent = new PageContent(); + $pageContent->elementId = $element->elementid; + $pageContent->pageId = $this->page->pageid; + $pageContent->languageid = $languageid; + $pageContent->load(); + $value = new Value(); - $value->languageid = $languageid; - $value->objectid = $this->page->objectid; - $value->pageid = $this->page->pageid; - $value->element = &$element; - $value->elementid = &$element->elementid; - $value->element->load(); - $value->publish = false; - $value->load(); + $value->contentid = $pageContent->contentId; switch ($element->typeid) { @@ -213,7 +220,7 @@ class PageAllAction extends PageAction implements Method { break; case Element::ELEMENT_TYPE_DATE: - $value->date = strtotime($this->request->getText($element->name.'_date') . $this->request->getText($element->name.'_time')); + $value->date = strtotime($this->request->getText($element->name . '_date') . $this->request->getText($element->name . '_time')); break; case Element::ELEMENT_TYPE_SELECT: @@ -228,42 +235,47 @@ class PageAllAction extends PageAction implements Method { $value->number = $this->request->getText($element->name) * pow(10, $value->element->decimals); break; default: - throw new \LogicException('Unknown element type: '.$element->getTypeName() ); + throw new \LogicException('Unknown element type: ' . $element->getTypeName()); } - $value->page = new Page($value->objectid); - $value->page->load(); // Inhalt sofort freigegeben, wenn // - Recht vorhanden // - Freigabe gewuenscht - $value->publish = $value->page->hasRight(Permission::ACL_RELEASE) && $this->request->has('release'); + $value->publish = $this->page->hasRight(Permission::ACL_RELEASE) && $this->request->has('release'); // Up-To-Date-Check - $lastChangeTime = $value->getLastChangeSinceByAnotherUser($this->request->getNumber('value_time'), Session::getUser()->userid); + $content = new Content( $pageContent->contentId ); + $lastChangeTime = $content->getLastChangeSinceByAnotherUser($this->request->getNumber('value_time'), $this->getCurrentUserId()); if ($lastChangeTime) $this->addWarningFor($value, Messages::CONCURRENT_VALUE_CHANGE, array('last_change_time' => date(L::lang('DATE_FORMAT'), $lastChangeTime))); // Inhalt speichern + $value->persist(); // Wenn Inhalt in allen Sprachen gleich ist, dann wird der Inhalt // fuer jede Sprache einzeln gespeichert. - if ($value->element->allLanguages) { + if ($element->allLanguages) { $project = new Project($this->page->projectid); foreach ($project->getLanguageIds() as $languageid) { - $value->languageid = $languageid; - $value->add(); + if ($languageid != $pageContent->languageid) { + $otherPageContent = clone $pageContent; + $otherPageContent->languageid = $languageid; + $otherPageContent->contentId = null; + $otherPageContent->load(); + if (!$otherPageContent->contentId) + $otherPageContent->persist(); // create pagecontent if it does not exist. + + $otherValue = clone $value; + $otherValue->contentid = $otherPageContent->contentId; + $otherValue->persist(); + } } - } else { - // sonst nur 1x speichern (fuer die aktuelle Sprache) - $value->add(); } - - } // Falls ausgewaehlt die Seite sofort veroeffentlichen - if ($value->page->hasRight(Permission::ACL_PUBLISH) && $this->request->has('publish')) { + if ($this->page->hasRight(Permission::ACL_PUBLISH) && $this->request->has('publish')) { $this->publishPage( $languageid ); }