예제 #1
0
 public function updatePageFromRecord(array $page, array $record, dmProjectModule $module, dmProjectModule $parentModule, $parentPageIds, $parentRecordIds)
 {
     $moduleKey = $module->getKey();
     $recordTable = $module->getTable();
     $pageTable = dmDb::table('DmPage');
     //@todo make this behavior optional to not break BC ?
     if ($recordTable->isNestedSet()) {
         $recordObj = $recordTable->findOneBy($recordTable->getIdentifier(), $record['id']);
         $recordNode = $recordObj->getNode();
         if ($recordNode->isRoot()) {
             $parentPageId = $parentPageIds;
         } else {
             $parentRecord = $recordNode->getParent();
             $parentPageId = $parentRecord->getDmPage()->get('id');
         }
     } elseif ($parentModule->getKey() === $module->getKey()) {
         $parentPageId = $parentPageIds;
     } else {
         if ($parentRecordIds !== false) {
             $parentRecordId = isset($parentRecordIds[$record['id']]) ? $parentRecordIds[$record['id']] : null;
         } else {
             $parentRecordId = dmDb::create($module->getModel(), $record)->getAncestorRecordId($parentModule->getModel());
         }
         if (!$parentRecordId) {
             throw new dmPageMustNotExistException(sprintf('No parent record found for %s, page %s must not exist', $module->getModel(), $page['id']));
         } elseif (!($parentPageId = dmArray::get($parentPageIds, $parentRecordId))) {
             throw new dmPageMustNotExistException(sprintf('%s needs a parent page, %s.%s, but it does not exists for parent object %d', $module, $parentModule, 'show', $parentRecordId));
         }
     }
     $modified = false;
     if (!$page['id']) {
         if (!($parentPage = $pageTable->find($parentPageId))) {
             throw new dmException(sprintf('parent page with id %d for new page %s was not found', $parentPageId, $page['module'] . '.show'));
         }
         dmDb::table('DmPage')->create($page)->getNode()->insertAsLastChildOf($parentPage);
     } else {
         if ($this->getNodeParentId($page) != $parentPageId) {
             if (!($parentPage = $pageTable->find($parentPageId))) {
                 throw new dmException(sprintf('parent page with id %d for new page %s was not found', $parentPageId, $page['module'] . '.show'));
             }
             $pageRecord = dmDb::table('DmPage')->find($page['id']);
             $pageRecord->refresh(true);
             $pageRecord->getNode()->moveAsLastChildOf($parentPage);
         }
     }
 }
예제 #2
0
 public function getReplacementsForPatterns(dmProjectModule $module, array $patterns, dmDoctrineRecord $record)
 {
     $moduleKey = $module->getKey();
     $replacements = array();
     foreach ($this->getPatternsPlaceholders($patterns) as $placeholder) {
         if ('culture' === $placeholder || 'user.culture' === $placeholder) {
             $replacements[$this->wrap($placeholder)] = $this->culture;
             continue;
         }
         /*
          * Extract model and field from 'model.field' or 'model'
          */
         if (strpos($placeholder, '.')) {
             list($usedModuleKey, $field) = explode('.', $placeholder);
         } else {
             $usedModuleKey = $placeholder;
             $field = '__toString';
         }
         $usedModuleKey = dmString::modulize($usedModuleKey);
         $usedRecord = null;
         /*
          * Retrieve used record
          */
         if ($usedModuleKey === $moduleKey) {
             $usedRecord = $record;
         } elseif ($module->hasAncestor($usedModuleKey)) {
             $usedRecord = $record->getAncestorRecord($module->getAncestor($usedModuleKey)->getModel());
         } else {
             $usedRecord = $record->getRelatedRecord($this->moduleManager->getModule($usedModuleKey)->getModel());
         }
         if ($usedRecord instanceof dmDoctrineRecord) {
             /*
              * get record value for field
              */
             if ($field === '__toString') {
                 $usedValue = $usedRecord->__toString();
                 $processMarkdown = true;
             } else {
                 try {
                     $usedValue = $usedRecord->get($field);
                 } catch (Doctrine_Record_UnknownPropertyException $e) {
                     $usedValue = $usedRecord->{'get' . dmString::camelize($field)}();
                 }
                 $processMarkdown = $this->shouldProcessMarkdown($usedRecord->getTable(), $field);
             }
             unset($usedRecord);
         } else {
             $usedValue = $moduleKey . '-' . $usedModuleKey . ' not found';
             $processMarkdown = false;
         }
         $usedValue = trim($usedValue);
         if ($processMarkdown) {
             $usedValue = dmMarkdown::brutalToText($usedValue);
         }
         $replacements[$this->wrap($placeholder)] = $usedValue;
     }
     return $replacements;
 }
예제 #3
0
 protected function checkEachRecordHasShowPage(dmProjectModule $module, lime_test $t)
 {
     $moduleKey = $module->getKey();
     $model = $module->getModel();
     if ($ancestorModule = $module->getFarthestAncestor()) {
         $ancestorModel = $ancestorModule->getModel();
     } else {
         $ancestorModel = null;
     }
     $errors = array();
     /*
      * Verify that each record -that must have a page- has one
      */
     foreach ($module->getTable()->findAll() as $record) {
         $page = $record->getDmPage();
         $error = null;
         if (!$ancestorModel) {
             if (!$page) {
                 $error = sprintf('%s %s has no page', $model, $record);
             }
         } else {
             if ($ancestorRecord = $record->getAncestorRecord($ancestorModel)) {
                 if (!$page) {
                     $error = sprintf('%s %s has no page', $model, $record);
                 }
             } else {
                 if ($page) {
                     $error = sprintf('%s %s has a page, but no ancestor', $model, $record);
                 }
             }
         }
         if ($error) {
             $t->diag($error);
             $errors[] = $error;
             continue;
         }
         if (!$page) {
             continue;
         }
         if ($page->record_id != $record->id) {
             $error = sprintf('%s page has bad record : %s', $page, $record);
             $t->diag($error);
             $errors[] = $error;
         }
         $parentPage = $page->getNode()->getParent();
         if ($parentModule = $module->getNearestAncestorWithPage()) {
             if ($parentPage->module != $parentModule->getKey()) {
                 $error = sprintf('parent page has bad module : %s', $parentPage->module);
                 $t->diag($error);
                 $errors[] = $error;
             }
             if ($parentPage->action != 'show') {
                 $error = sprintf('parent page has bad action : %s', $parentPage->action);
                 $t->diag($error);
                 $errors[] = $error;
             }
         } else {
             if ($parentPage->module != $module->getKey()) {
                 $error = sprintf('parent page has bad module : %s', $parentPage->module);
                 $t->diag($error);
                 $errors[] = $error;
             }
             if ($parentPage->action != 'list') {
                 $error = sprintf('parent page has bad action : %s', $parentPage->action);
                 $t->diag($error);
                 $errors[] = $error;
             }
         }
     }
     return $errors;
 }