Exemplo n.º 1
0
 /**
  * Sincroniza los procesos del atributo xpdl con los objetos procesos.
  * Si no existe el objeto lo crea, si cambio por ej. el nombre lo actualiza
  *
  * @param Object Objeto instancia de la clase pdsfXpdl con el xpdl a procesar.
  * @param array $pIdXpdls Lista especifica de id (xpdl) de procesos a tratar,
  *                          sino procedo con todos.
  * @return array procesos no actualizados por algun error
  */
 public function syncProcesses($xpdl, $pIdXpdls = array())
 {
     if (!$xpdl) {
         $err['file'] = $this->getNombre();
         $err['error'] = 'No se ha instanciado el archivo xpdl para su tratamiento';
         return $err;
     }
     // Para ir volcando los paquetes no procesados por alguna regla invalida
     $noimp = array();
     // Obtengo procesos a sincronizar
     $procs = $xpdl->getProcessArray($pIdXpdls);
     // Procedo con cada uno
     foreach ($procs as $pr) {
         $proc = Doctrine::getTable('Proceso')->findOneByXpdlId($pr['id']);
         // 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) {
             if (!$proc) {
                 $proc = new Proceso();
                 $proc->setNombre($pr['name']);
                 $proc->setRelPaquete($this->getId());
                 $proc->setXpdlId($pr['id']);
                 $proc->save();
             } else {
                 if ($proc->getNombre() != $pr['name']) {
                     $proc->setNombre($pr['name']);
                 }
             }
             if ($proc->isNew() or $proc->isModified()) {
                 $proc->save();
             }
         } else {
             $noimp[] = $err;
         }
     }
     return $noimp;
 }