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); } } }
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; }
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; }