/**
  * 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;
 }
 public function changemacros()
 {
     $data = json_decode($_POST["json"]);
     $macrocontent = $data->selectedMacro;
     $token = (string) JWTAuth::getToken();
     $dataObj2 = "";
     $user = JWTAuth::toUser($token);
     $dataObj = $macrocontent;
     if ($macrocontent == null) {
         // adding a new macro
         $macro = new Macro();
         $macro->kcals = $macrocontent->kcals;
         $macro->carbs = $macrocontent->carbs;
         $macro->prot = $macrocontent->prot;
         $macro->fats = $macrocontent->fats;
         $macro->wkcals = $macrocontent->kcals;
         $macro->wcarbs = $macrocontent->wcarbs;
         $macro->wprot = $macrocontent->wprot;
         $macro->wfats = $macrocontent->wfats;
         $macro->bulking = $macrocontent->bulking;
         $macro->current = $macrocontent->current;
         $macro->name = $macrocontent->name;
         $macro->user_id = $user->id;
         $macro->save();
         $dataObj = $macro;
     } else {
         // editing an existing macro
         $macro_id = $macrocontent->id;
         $macro = Macros::where('id', $macro_id)->where('user_id', $user->id)->first();
         if ($macro !== null) {
             $dataObj2 = $macrocontent;
             $macro->kcals = $macrocontent->kcals;
             $macro->carbs = $macrocontent->carbs;
             $macro->prot = $macrocontent->prot;
             $macro->fats = $macrocontent->fats;
             $macro->wkcals = $macrocontent->wkcals;
             $macro->wcarbs = $macrocontent->wcarbs;
             $macro->wprot = $macrocontent->wprot;
             $macro->wfats = $macrocontent->wfats;
             $macro->bulking = $macrocontent->bulking;
             $macro->current = $macrocontent->current;
             $macro->name = $macrocontent->name;
             $macro->user_id = $user->id;
             $macro->save();
             $dataObj = $macro;
         } else {
             $dataObj = "";
         }
     }
     //$dataObj = "";
     return ['data' => ['dataitem' => $dataObj2]];
 }