예제 #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
 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;
 }