/** * 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; }