Example #1
0
 /**
  * Gets the full path of the file.
  *
  * @param IExportPolicy $policy
  * @param CDbCriteriaBuilder $builder
  * @return string
  */
 public function getFileName(IExportPolicy $policy, CDbCriteriaBuilder $builder)
 {
     $fullpath = $this->basePath;
     foreach ($policy->getExportPathHierarchy($builder) as $dirname) {
         $fullpath .= DIRECTORY_SEPARATOR . $dirname;
         if (!is_dir($fullpath)) {
             if (!@mkdir($fullpath)) {
                 throw new CException(Yii::t('export.CFileWriter', 'The given path "{path}" is not writable.', array('{path}' => $fullpath)));
             }
         }
     }
     $fullpath .= DIRECTORY_SEPARATOR . $policy->getExportedFilename($builder) . '.' . $policy->getFormat()->getFileExtension();
     return $fullpath;
 }
Example #2
0
 /**
  * {@inheritDoc}
  * @see IExporter::exportPolicyToFile()
  */
 public function exportPolicyToFile(IExportPolicy $policy, IFileWriter $filewriter)
 {
     /* @var $criteria CDbCriteriaBuilder */
     foreach ($policy->getIterator() as $builder) {
         $record = $policy->getModel();
         $event = new ValidateExportEvent($this, array('policy' => $policy, 'builder' => $builder));
         $this->raiseEvent('onValidateExport', $event);
         // if the file does not exists, we still force the export
         if (!$event->validate && $filewriter->hasFileOn($policy, $builder)) {
             continue;
         }
         $event = new BeforeEraseFileEvent($this, array('policy' => $policy, 'builder' => $builder));
         $this->raiseEvent('onBeforeEraseFile', $event);
         if ($event->validate) {
             $success = $filewriter->eraseFileOn($policy, $builder);
             $event = new AfterEraseFileEvent($this, array('policy' => $policy, 'builder' => $builder, 'success' => $success));
             $this->raiseEvent('onAfterEraseFile', $event);
         }
         $event = new BeforeLockFileEvent($this, array('policy' => $policy, 'builder' => $builder));
         $this->raiseEvent('onBeforeLockFile', $event);
         if ($event->validate) {
             $success = $filewriter->lockFileOn($policy, $builder);
             $event = new AfterLockFileEvent($this, array('policy' => $policy, 'builder' => $builder, 'success' => $success));
             $this->raiseEvent('onAfterLockFile', $event);
         }
         $i = 0;
         $attributes = array();
         $iterator = new COrderedIterator($record, $builder->getCriteria());
         foreach ($iterator as $record) {
             $attributes[] = $record->attributes;
             $i++;
             if ($i >= $this->_number_of_records_per_page) {
                 $sql = $policy->getFormat()->format($record, $attributes);
                 $event = new BeforeWriteFileEvent($this, array('policy' => $policy, 'builder' => $builder, 'data' => $sql));
                 $this->raiseEvent('onBeforeWriteFile', $event);
                 if ($event->validate) {
                     $success = $filewriter->appendToFileOn($policy, $builder, $sql);
                     $event = new AfterWriteFileEvent($this, array('policy' => $policy, 'builder' => $builder, 'data' => $sql, 'success' => $success));
                     $this->raiseEvent('onAfterWriteFile', $event);
                 }
                 $i = 0;
                 $attributes = array();
             }
         }
         if (!empty($attributes)) {
             $sql = $policy->getFormat()->format($record, $attributes);
             $event = new BeforeWriteFileEvent($this, array('policy' => $policy, 'builder' => $builder, 'data' => $sql));
             $this->raiseEvent('onBeforeWriteFile', $event);
             if ($event->validate) {
                 $success = $filewriter->appendToFileOn($policy, $builder, $sql);
                 $event = new AfterWriteFileEvent($this, array('policy' => $policy, 'builder' => $builder, 'data' => $sql, 'success' => $success));
                 $this->raiseEvent('onAfterWriteFile', $event);
             }
         }
         $event = new BeforeUnlockFileEvent($this, array('policy' => $policy, 'builder' => $builder));
         $this->raiseEvent('onBeforeUnlockFile', $event);
         if ($event->validate) {
             $success = $filewriter->unlockFileOn($policy, $builder);
             $event = new AfterUnlockFileEvent($this, array('policy' => $policy, 'builder' => $builder, 'success' => $success));
             $this->raiseEvent('onAfterUnlockFile', $event);
         }
     }
 }
 /**
  * Gets the cached key that for given record.
  *
  * @param IExportPolicy $policy
  * @param CDbCriteriaBuilder $builder
  * @return string
  */
 public function buildKey(IExportPolicy $policy, CDbCriteriaBuilder $builder)
 {
     return self::CACHED_EXPORT_KEY . '_' . $policy->getUniqueKey($builder);
 }