コード例 #1
0
ファイル: actions.class.php プロジェクト: psdf/psdfCorePlugin
 public function executeSync(sfWebRequest $request)
 {
     // Preparo el id y name del proyecto para la proxima accion
     $this->proyecto = array();
     $this->proyecto['id'] = $request->getParameter('id');
     $proyecto = Doctrine::getTable('Proyecto')->find($request->getParameter('id'));
     $this->proyecto['name'] = $proyecto->getNombre();
     // Recupero en un array la lista de documentos xpdl
     $finder = sfFinder::type('file')->name('*.xpdl');
     $finder->ignore_version_control(true);
     $files = $finder->in(sfConfig::get('psdf_xpdl_dir'));
     // Armo otro array con informacion de los xpdl
     foreach ($files as $file) {
         $xpdl = new psdfXpdl();
         $ret = $xpdl->load($file);
         $new['nombre'] = $file;
         $new['macro'] = $ret ? $xpdl->getMacroName() : '';
         $new['package'] = $ret ? $xpdl->getPackageName() : '';
         $new['fecha'] = filemtime($file);
         $this->proyecto['files'][] = $new;
     }
     // Ordeno el array por la fecha de modificacion
     usort($this->proyecto['files'], array('self', 'comparar'));
 }
コード例 #2
0
 /**
  * Procesa documentos xpdl, previamente seleccionados, generando y/o
  * actualizando objetos Macro, Paquete, Proceso, Actividad y RolAbstracto.
  * Retorna un array con los archivos que no pudieron ser procesados.
  *
  * @param array $files_xpdl Archivos Xpdls a Importar
  * @return array Archivos no procesados
  */
 public function processXpdls($files_xpdl = array())
 {
     // Para ir volcando los paquetes no procesados por alguna regla invalida
     $noimp = array();
     foreach ($files_xpdl as $file) {
         $xpdl = new psdfXpdl($file);
         // Recupero Id y Nombre del paquete
         $xpdlPackageId = $xpdl->getPackageId();
         $xpdlPackageName = $xpdl->getPackageName();
         // Recupero Macro
         $macro_name = $xpdl->getMacroName();
         // Contenido del xpdl como un string para guardarlo
         $content = $xpdl->getContent();
         // Intento recuperar Macro y Paquete si ya estuviesen almacenados
         $macro = Doctrine::getTable('Macro')->findOneByNombre($macro_name);
         $pack = Doctrine::getTable('Paquete')->findOneByXpdlId($xpdlPackageId);
         // REGLAS
         $err = array();
         // Si no se cumple alguna regla generar:
         // $err['file'] = $this->getNombre();
         // $err['error'] = 'Mensaje del error';
         // CONTINUO SI SE PASARON TODAS LAS REGLAS
         if (count($err) == 0) {
             // Creo el macro si aún no existe
             if (!$macro) {
                 $macro = new Macro();
                 $macro->setNombre($macro_name);
                 $macro->setRelProyecto($this->getId());
                 $macro->save();
             }
             // Creo el paquete si aún no existe y actualizo
             if (!$pack) {
                 $pack = new Paquete();
                 $pack->setNombre($xpdlPackageName);
                 $pack->setRelMacro($macro->getId());
                 $pack->setXpdl($content);
                 $pack->setXpdlId($xpdlPackageId);
                 $pack->save();
                 // Grabo para que genere el Id
             } else {
                 if ($pack->getXpdl() != $content) {
                     $pack->setXpdl($content);
                 }
                 if ($pack->getNombre() != $xpdlPackageName) {
                     $pack->setNombre($xpdlPackageName);
                 }
             }
             // Guardo el paquete con los cambios
             if ($pack->isNew() or $pack->isModified()) {
                 $pack->save();
             }
             // Delego en el paquete la sincronizacion de los Procesos
             $err = $pack->syncProcesses($xpdl);
             if (count($err) > 0) {
                 $noimp[] = array_merge($noimp, $err);
             }
         } else {
             $noimp[] = $err;
         }
     }
     return $noimp;
 }