/**
  * Descarrega un fitxer associat a una aportació
  * @param string [$id] numero de l'aportacio on es adjunt el fitxer
  */
 public function download($id)
 {
     try {
         $aportacio = Aportacio::find($id);
     } catch (ModelNotFoundException $e) {
         return Redirect::route('grups.meus');
     }
     $assignatura = $aportacio->assignatura;
     $grup = $assignatura->grup;
     $grups = Auth::user()->grups()->lists('id_grup');
     /*Comprovació de que l'estudiant estigui matriculat
     	 al grup d'aquesta assignatura i el grup estigui actiu*/
     if (in_array($grup->getID(), $grups) && $grup->getActiu()) {
         $file = $aportacio->getFitxer();
         if (file_exists($file)) {
             header('Content-Description: File Transfer');
             header('Content-Type: application/octet-stream');
             header('Content-Disposition: attachment; filename=' . basename($file));
             header('Content-Transfer-Encoding: binary');
             header('Expires: 0');
             header('Cache-Control: must-revalidate');
             header('Pragma: public');
             header('Content-Length: ' . filesize($file));
             ob_clean();
             flush();
             readfile($file);
             exit;
         } else {
             return Redirect::route('assignatura.info', array('slug' => $assignatura->getSlug()))->with('descarrega', 'error');
         }
     } else {
         return Redirect::route('grups.meus');
     }
 }
 /**
  * Cerca comentaris anteriors a un donat
  * @param integer [$id] identificador de l'aportació
  * @param integer [$last] identificador del darrer comentari mostrat
  */
 public function mesComentaris($id, $last)
 {
     try {
         $aportacio = Aportacio::findOrFail($id);
     } catch (ModelNotFoundException $e) {
         return Response::json(array('error' => 'Esta aportación ha sido eliminada.'));
     }
     $comentaris = $aportacio->getComentarisSince($last);
     return View::make('assignatura/comentaris', array('comentaris' => $comentaris));
 }
 /**
  * Crea una aportació a un esdeveniment.
  * @param int [$id] identificador de l'esdeveniment
  */
 public function crearAportacioEsdeveniment($id)
 {
     try {
         try {
             $esdeveniment = Esdeveniment::findOrFail($id);
         } catch (ModelNotFoundException $e) {
             return Response::json(array('error' => 'Este evento ha sido eliminado por su creador'));
         }
         $grup = $esdeveniment->grup;
         $grups = Auth::user()->grups()->lists('id_grup');
         date_default_timezone_set("Europe/Madrid");
         $ara = date("Y-m-d H:i:s");
         $esdeveniment_actiu = $esdeveniment->data_esdeveniment > $ara;
         /*Comprovació de que l'estudiant estigui matriculat
         	 al grup d'aquesta assignatura i el grup estigui actiu*/
         if (!in_array($grup->getID(), $grups)) {
             if (Request::ajax()) {
                 return Response::json(array('error' => 'No estás matriculado en este grupo.'));
             } else {
                 return Redirect::route('grups.meus');
             }
         }
         if (!$grup->getActiu()) {
             if (Request::ajax()) {
                 return Response::json(array('error' => 'El grupo ha sido eliminado por su moderador.'));
             } else {
                 return Redirect::route('grups.meus');
             }
         }
         if (!$esdeveniment_actiu) {
             if (Request::ajax()) {
                 return Response::json(array('error' => 'El evento no está activo.'));
             } else {
                 return Redirect::route('grups.meus');
             }
         }
         $aport = Input::get('aportacio');
         $validator = Validator::make(array('Aportación' => $aport), array('Aportación' => array('required', 'max:500')));
         if ($validator->fails()) {
             throw new ModelException("Debes escribir algo... (máx. 500 caracteres)");
         }
         $aportacio = new Aportacio();
         //Elimina TAGs HTML
         $aport = strip_tags($aport);
         //Elimina els espais en blanc del començament i del final
         $aport = trim($aport);
         $aportacio->info_aportacio = $aport;
         date_default_timezone_set("Europe/Madrid");
         $ara = date("Y-m-d H:i:s");
         $aportacio->data_aportacio = $ara;
         $aportacio->id_esdeveniment = $esdeveniment->getID();
         $aportacio->estudiant_email = Auth::user()->email_estudiant;
         //si fitxer pujat correctament
         if (Input::hasFile('file')) {
             $file = Input::file('file');
             $validator2 = Validator::make(array('Fichero' => $file), array('Fichero' => array('max:25600')));
             if ($validator2->fails()) {
                 return Redirect::route('esdeveniment.missatges', array('slug' => $esdeveniment->getSlug()))->withErrors($validator2);
             }
             //extensió del fitxer
             $extension = $file->getClientOriginalExtension();
             //No es permeten pujar fitxers amb extensio exe
             if ($extension == 'exe') {
                 return Redirect::route('esdeveniment.missatges', array('slug' => $esdeveniment->getSlug()))->with('fitxer', 'error');
             }
             $aleatori = str_random(8);
             $destinationPath = 'uploads/files/' . $aleatori;
             $filename = $file->getClientOriginalName();
             //Lleva tags HTML
             $filename = strip_tags($filename);
             //Reemplaça caràcters amb accents per es seus homònims
             //per evitar problemes demostrats amb rutes amb accents
             $filename = str_replace(array('á', 'à', 'â', 'ã', 'ª', 'ä'), 'a', $filename);
             $filename = str_replace(array('Á', 'À', 'Â', 'Ã', 'Ä'), 'A', $filename);
             $filename = str_replace(array('Í', 'Ì', 'Î', 'Ï'), 'I', $filename);
             $filename = str_replace(array('í', 'ì', 'î', 'ï'), 'i', $filename);
             $filename = str_replace(array('é', 'è', 'ê', 'ë'), 'e', $filename);
             $filename = str_replace(array('É', 'È', 'Ê', 'Ë'), 'E', $filename);
             $filename = str_replace(array('ó', 'ò', 'ô', 'õ', 'ö', 'º'), 'o', $filename);
             $filename = str_replace(array('Ó', 'Ò', 'Ô', 'Õ', 'Ö'), 'O', $filename);
             $filename = str_replace(array('ú', 'ù', 'û', 'ü'), 'u', $filename);
             $filename = str_replace(array('Ú', 'Ù', 'Û', 'Ü'), 'U', $filename);
             $filename = str_replace(array('[', '^', '´', '`', '¨', '~', ']'), '', $filename);
             $filename = str_replace('ç', 'c', $filename);
             $filename = str_replace('Ç', 'C', $filename);
             $filename = str_replace('ñ', 'n', $filename);
             $filename = str_replace('Ñ', 'N', $filename);
             $filename = str_replace('Ý', 'Y', $filename);
             $filename = str_replace('ý', 'y', $filename);
             $uploadSuccess = Input::file('file')->move($destinationPath, $filename);
             if ($uploadSuccess) {
                 $aportacio->fitxer_aportacio = $destinationPath . '/' . $filename;
             } else {
                 return Redirect::route('esdeveniment.missatges', array('slug' => $esdeveniment->getSlug()))->with('upload', 'error');
             }
         }
         $aportacio->save();
         if (Request::ajax()) {
             return View::make('esdeveniments/aportacio', array('aportacio' => $aportacio));
         } else {
             return Redirect::route('esdeveniment.missatges', array('slug' => $esdeveniment->getSlug()));
         }
     } catch (ModelException $exception) {
         if (Request::ajax()) {
             return Response::json(array('error' => $exception->getMessage()));
         } else {
             return Redirect::route('esdeveniment.missatges', array('slug' => $esdeveniment->getSlug()))->withErrors($validator);
         }
     }
 }