public function manage($hookType, dmDoctrineRecord $record)
 {
     if ($record instanceof dmRecordPermission && 'DmRecordPermission' === $record->get('secure_model')) {
         $permPermRecord = $record->getTable()->find($record->get('secure_record'));
         if ('DmRecordPermission' === $permPermRecord->get('secure_model')) {
             return;
             //don't go over 3 levels of permission of permission, crazy boy !
         }
     }
     $security = $record->getDmModule()->getOption('security', false);
     if (is_array($security)) {
         foreach ($security as $app => $appConfig) {
             if (!is_array($appConfig)) {
                 continue;
             }
             foreach ($appConfig as $actionKind => $actionsConfig) {
                 if (!is_array($actionsConfig)) {
                     continue;
                 }
                 foreach ($actionsConfig as $actionName => $actionConfig) {
                     if (!is_array($actionConfig)) {
                         continue;
                     }
                     if (isset($actionConfig['strategy']) && in_array($actionConfig['strategy'], array('record', 'mixed'))) {
                         $method = 'manage' . ucfirst($hookType);
                         if (method_exists($this, $method)) {
                             $this->{$method}($record, $actionName, $actionConfig, $app);
                         }
                     }
                 }
             }
         }
     }
 }
예제 #2
0
 protected function replace(dmDoctrineRecord $record, array $fields)
 {
     foreach ($fields as $field) {
         $oldValue = $record->get($field);
         $newValue = strtr($oldValue, $this->getReplacements());
         if ($oldValue != $newValue) {
             $this->log('Correct ' . $record . '->' . $field);
             $record->set($field, $newValue);
             $record->save();
         }
     }
 }
예제 #3
0
 public function getMediaUrl(dmDoctrineRecord $record)
 {
     if ($record instanceof DmMediaFolder) {
         if (null === $this->mediaFolderPathBaseUrl) {
             $this->mediaFolderPathBaseUrl = $this->generate('dm_media_library_path', array('path' => '__DM_MEDIA_PATH_PLACEHOLDER__'));
         }
         return str_replace('__DM_MEDIA_PATH_PLACEHOLDER__', $record->getRelPath(), $this->mediaFolderPathBaseUrl);
     } elseif ($record instanceof DmMedia) {
         return 'dmMediaLibrary/file?media_id=' . $record->get('id');
     } else {
         throw new dmException('Can not generate url for ' . $record);
     }
 }
예제 #4
0
 protected function updatePageIsActive(array $page, dmProjectModule $module, dmDoctrineRecord $record, array $modifiedFields)
 {
     if ($this->shouldUpdatePageIsActiveForModule($module)) {
         if (!$page['exist'] || $page['is_active'] != $record->get('is_active')) {
             $modifiedFields['is_active'] = $record->get('is_active');
         }
     }
     return $modifiedFields;
 }
예제 #5
0
 public function findOneByRecordWithI18n(dmDoctrineRecord $record)
 {
     $module = $record->getDmModule()->getKey();
     if (isset($this->recordPageCache[$module][$record->get('id')])) {
         return $this->recordPageCache[$module][$record->get('id')];
     }
     return $this->createQuery('p')->where('p.module = ?', $module)->andWhere('p.action = ?', 'show')->andWhere('p.record_id = ?', $record->get('id'))->withI18n(null, null, 'p')->fetchOne();
 }