Esempio n. 1
0
 /** Recibe un peticion para crear una cuenta de usuario
  * 
  * @param Request $request
  * @return string
  */
 function postCreateAccount(Request $request)
 {
     $data = $request->all();
     // return redirect()->back()->with("error","El registro de usuarios no esta habilitado en este momento.");
     if (strlen($data[User::ATTR_NAME]) == 0 || strlen($data[User::ATTR_LASTNAME]) == 0 || !filter_var($data[User::ATTR_EMAIL], FILTER_VALIDATE_EMAIL) || strlen($data[User::ATTR_PASSWORD]) < 6) {
         return redirect()->back()->with(User::ATTR_NAME, $data[User::ATTR_NAME])->with(User::ATTR_LASTNAME, $data[User::ATTR_LASTNAME])->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with("error", trans("gen.info.error"));
     }
     //*******************************************
     //CONTROL DE CAPTCHA
     //*******************************************
     //   $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=6LdEcQ4TAAAAABgMkSCLV3iVH-sXXk5Xqb79dfNt&response=".$data["g-recaptcha-response"]."&remoteip=".$_SERVER['REMOTE_ADDR']);
     $reCaptcha = new ReCaptcha("6LdEcQ4TAAAAABgMkSCLV3iVH-sXXk5Xqb79dfNt");
     // si se detecta la respuesta como enviada
     if (!$data["g-recaptcha-response"]) {
         return redirect()->back()->with(User::ATTR_NAME, $data[User::ATTR_NAME])->with(User::ATTR_LASTNAME, $data[User::ATTR_LASTNAME])->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with("error-captcha", trans("gen.error.captcha"));
     }
     $response = $reCaptcha->verifyResponse($_SERVER["REMOTE_ADDR"], $data["g-recaptcha-response"]);
     //Valida el captcha
     if ($response == null || !$response->success) {
         return redirect()->back()->with(User::ATTR_NAME, $data[User::ATTR_NAME])->with(User::ATTR_LASTNAME, $data[User::ATTR_LASTNAME])->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with("error-captcha", trans("gen.error.captcha"));
     }
     //Verifica si el corre ingresado existe
     if (User::existEmail($data[User::ATTR_EMAIL])) {
         return redirect()->back()->with(User::ATTR_NAME, $data[User::ATTR_NAME])->with(User::ATTR_LASTNAME, $data[User::ATTR_LASTNAME])->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with("error", "El correo electrónico ingresado ya esta registrado");
     }
     $keyActivation = \hash("sha256", $data[User::ATTR_EMAIL]);
     $user = new User();
     $user->name = ucfirst($data[User::ATTR_NAME]);
     $user->lastname = ucfirst($data[User::ATTR_LASTNAME]);
     $user->email = $data[User::ATTR_EMAIL];
     $user->password = bcrypt($data[User::ATTR_PASSWORD]);
     $user->state = User::STATE_UNCONFIRMED_ACCOUNT;
     $user->role = User::ROLE_SUSCRIPTOR;
     $user->keyActivation = $keyActivation;
     $user->save();
     //Crea las carpetas de manejo de archivos del usuarios
     mkdir(public_path($user->getPathTemporal()));
     mkdir(public_path($user->getPathUploads()));
     $activationLink = url("user/confirm/email/" . $keyActivation);
     $description = "<p>Este correo electrónico ha sido asociado a una nueva cuenta en bandicot&#46;com, para poder usar esta cuenta es necesario activarla confirmando este correo electrónico.</p>" . "<p>Para confirmar este correo electrónico debes hacer clic en botón \"Activar cuenta\" que se muestra a continuación:<br/><br/>" . "<a style='display: block;padding: 10px;border: 1px black solid;width: 200px;text-align: center;color: white;background: red;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;font-style: normal;text-transform: uppercase;margin: auto;' href='" . $activationLink . "' target='_blank'>Activar cuenta</a></p>" . "<p>Si el botón no funciona, copia y pega el siguiente enlace para activar tu cuenta:<br/><br/>{$activationLink}</p>" . "<p><i><b>Atención:<b/> Si crees que se ha tratado de una equivocación, por favor ignora este mensaje.</i></p>";
     $email = new Email("Activación de cuenta", $data[User::ATTR_EMAIL], [Email::VAR_NAME => $user->name, Email::VAR_DESCRIPTION => $description]);
     $email->send();
     Auth::loginUsingId($user->id);
     return redirect("user/dashboard")->with(UI::modalMessage("¡Bienvenido a Bandicot.com!", view("ui/msg/contents/bienvenido-a-bandicot-com")->render()));
 }
Esempio n. 2
0
 public function postRecovery(Request $request)
 {
     $data = $request->all();
     $email = $data[User::ATTR_EMAIL];
     if (!User::existEmail($email)) {
         return redirect()->back()->withInput()->with(UI::message(UI::MESSAGE_TYPE_ERROR, "El correo electrónico ingresado no existe"));
     }
     $user = User::where(User::ATTR_EMAIL, $email)->get()[0];
     $token = str_random(10);
     $reset = new PasswordReset();
     $reset->user_id = $user->id;
     $reset->email = $user->email;
     $reset->token = $token;
     $reset->active = Util::convertBooleanToInt(true);
     $reset->created_at = DateUtil::getCurrentTime();
     $reset->save();
     $description = "<p>Hemos recibido una solicitud para restablecer la contraseña de tu cuenta en Bandicot, para poder reiniciar tu contraseña debes ingresar este código de seguridad:</p>" . "<p>Código:</p>" . "<p style='font-weigth:bold;font-size:15pt;'>" . $token . "</p>" . "<p>Cópialo y pégalo en el formulario donde lo solicitastes. El código tiene una vigencia de 2 horas.</p> ";
     $email_send = new Email("Recuperación de contraseña", $user->email, [Email::VAR_NAME => $user->name, Email::VAR_DESCRIPTION => $description]);
     $email_send->send();
     return redirect("user/auth/recovery?request=send-mail&form=token")->with(User::ATTR_EMAIL, $email);
 }
 private function cron()
 {
     \Event::listen('cron.collectJobs', function () {
         /**
          * CRON: Alimentación de cola de producciones
          * DESCRIPCION: Alimenta la cola de producciones que se van a procesar
          * EJECUCION: Cada 3 minutos
          */
         \Cron::add(AutoProcess::CRON_PRODUCTIONS_FEED, '*/3 * * * *', function () {
             if (!AutoProcess::isActived(AutoProcess::CRON_PRODUCTIONS_FEED)) {
                 return "Desactivado";
             }
             $productionFeed = new ProductionFeed();
             //Carga datos de producciones (peliculas) en el repositorio
             $productionFeed->loadRepository();
             //Alimenta la cola de actualizaciones de peliculas
             $productionFeed->feedQueue();
             return count($productionFeed->dataRepository) . " Producciones cargadas en cola";
         });
         /**
          * CRON: Seguimiento de produccion
          * DESCRIPCION: Toma las producciones en cola indicadas y las procesa obtienendo todos los datos de la produccion
          * EJECUCION: Cada minuto
          */
         \Cron::add(AutoProcess::CRON_PRODUCTION_TRACK, '* * * * *', function () {
             if (!AutoProcess::isActived(AutoProcess::CRON_PRODUCTION_TRACK)) {
                 return "Desactivado";
             }
             $queue = QueueProductions::where(QueueProductions::ATTR_DATE_PROCESSED, null)->orderBy(QueueProductions::ATTR_ID, "ASC")->take(1)->get();
             foreach ($queue as $production) {
                 $provider = new ProductionProvider($production->name, $production->link);
                 $production_id = $provider->save();
                 //Indica el registro como procesado. Esto ocasiona que la produccion ya no se vuelva a actualizar, hasta una nueva cola.
                 $production->production_id = $production_id;
                 $production->date_processed = DateUtil::getCurrentTime();
                 $production->save();
                 return $production->name . " Agregado";
             }
             return "Sin cola";
         });
         /**
          * CRON: Seguimiento de persona
          * DESCRIPCION: Toma las personas indicadas y las procesa para obtener todos sus datos
          * EJECUCION: Cada minuto
          */
         \Cron::add(AutoProcess::CRON_PERSON_TRACK, '* * * * *', function () {
             if (!AutoProcess::isActived(AutoProcess::CRON_PERSON_TRACK)) {
                 return "Desactivado";
             }
             $queue = QueuePersons::where(QueuePersons::ATTR_DATE_PROCESSED, null)->orderBy(QueuePersons::ATTR_ID, "DESC")->take(1)->get();
             foreach ($queue as $person) {
                 $provider = new PersonProvider($person->name, $person->link);
                 $provider->save();
                 //Indica el registro como procesado. Esto ocasiona que la produccion ya no se vuelva a actualizar, hasta una nueva cola.
                 $person->date_processed = DateUtil::getCurrentTime();
                 $person->save();
                 return $person->name . " Agregado";
             }
             return "Sin cola";
         });
         /**
          * CRON: Envio de correo de notificacion de producciones disponibles
          * DESCRIPCION: Verifica todos las producciones en seguimientos por parte de los usuarios premium y cuando esten disponibles les envia un correo notificandoles
          * EJECUCION: Cada 12 horas
          */
         \Cron::add(AutoProcess::CRON_USER_PRODUCTION_TRACK_SEND_MAIL, '0 */12 * * *', function () {
             if (!AutoProcess::isActived(AutoProcess::CRON_USER_PRODUCTION_TRACK_SEND_MAIL)) {
                 return "Desactivado";
             }
             //Obtiene todos los usuarios premium
             $users = User::where(User::ATTR_ROLE, User::ROLE_SUSCRIPTOR_PREMIUM)->get();
             foreach ($users as $user) {
                 //Obtiene las producciones que siguen que ya se encuentran disponibles y que no sean notificado por correo
                 $productions = $user->tracks()->wherePivot(User::ATTR_TRACK_PIVOT_MAILED, 0)->where(Production::ATTR_STATE, Production::STATE_ACTIVE)->get();
                 if (count($productions) == 0) {
                     continue;
                 }
                 if (count($productions) > 1) {
                     $description_email = "<p>Este mensaje es para informate que varias producciones que te gustaria ver en nuestra plataforma ya se encuentran disponibles y las puedes ver cuando quieras.</p>" . "<div style='text-align:center;'>" . "<h2>Nuevas producciones disponibles para ti</h2>" . "</div>" . "<div style='text-align:center;'>";
                 } else {
                     $description_email = "<p>Este mensaje es para informate que una producción que te gustaria ver en nuestra plataforma ya se encuentran disponible y la puede ver cuando quieras.</p>" . "<div style='text-align:center;'>" . "<h2>Nueva producción disponible para ti</h2>" . "</div>" . "<div style='text-align:center;'>";
                 }
                 foreach ($productions as $production) {
                     //Notifica las producciones disponibles asociadas
                     $description_email .= "<a href='" . AutoProcess::URL_SITE . "production/" . $production->slug . "'><img width='192px' height='289px' style='margin: 0px 10px;' src='" . $production->image . "'></a>";
                     $production->pivot->mailed = 1;
                     $production->pivot->save();
                 }
                 $description_email .= "</div>";
                 //Envia el correo de notificacion del usuario
                 $email = new Email(count($productions) > 1 ? "¡Hay varias producciones que te gustaria ver que ya estan disponible!" : "¡Una producción que te gustaria ver ya esta disponible!", $user[User::ATTR_EMAIL], [Email::VAR_NAME => $user->name, Email::VAR_DESCRIPTION => $description_email]);
                 $email->queue();
             }
             return "Notificaciones realizadas (Si aplican)";
         });
         /**
          * CRON: Genera el sitemap.xml del sitio
          * EJECUCION: Cada Semana
          */
         \Cron::add(AutoProcess::CRON_GENERATE_SITEMAP, '0 0 * * 0', function () {
             //Url standards del sitio web
             $urls = array(AutoProcess::URL_SITE, AutoProcess::URL_SITE . "doc/terms", AutoProcess::URL_SITE . "doc/privacypolicy", AutoProcess::URL_SITE . "doc/cookies-policy", AutoProcess::URL_SITE . "doc/help", AutoProcess::URL_SITE . "catalogue");
             $file = fopen(public_path("sitemap.xml"), "w");
             fwrite($file, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" . PHP_EOL);
             fwrite($file, "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"> " . PHP_EOL);
             for ($i = 0; $i < count($urls); $i++) {
                 fwrite($file, "<url><loc>" . $urls[$i] . "</loc></url>" . PHP_EOL);
             }
             //Inserta las url de cada persona
             $persons = \App\System\Models\Person::whereNotNull(Person::ATTR_BIOGRAPHY)->get();
             foreach ($persons as $person) {
                 fwrite($file, "<url><loc>" . AutoProcess::URL_SITE . "person/" . $person->slug . "</loc></url>" . PHP_EOL);
             }
             //Inserta las url de todas las producciones
             $productions = Production::all();
             foreach ($productions as $production) {
                 fwrite($file, "<url><loc>" . AutoProcess::URL_SITE . "production/" . $production->slug . "</loc></url>" . PHP_EOL);
             }
             fwrite($file, "</urlset>" . PHP_EOL);
             fclose($file);
             return "Sitemap.xml generado (" . count($persons) . " Personas) (" . count($productions) . " Producciones)";
         });
         /**
          * CRON: Publica automaticamente una produccion programada
          * EJECUCION: Cada hora
          */
         \Cron::add(AutoProcess::CRON_PRODUCTION_AUTO_PUBLISH, '0 */4 * * *', function () {
             $productions = Production::where(Production::ATTR_STATE, Production::STATE_PROGRAMMED)->orderBy(Production::ATTR_UPDATED_AT, "ASC")->take(1)->get();
             foreach ($productions as $production) {
                 $production->state = Production::STATE_ACTIVE;
                 $production->save();
                 return $production->title . " Publicado";
             }
             return "No hay producciones programadas";
         });
     });
 }
Esempio n. 4
0
 /** Envia un correo de usuario para activar su cuenta. (user/account/ajax/send/email/confirmation)
  *  
  */
 function ajaxSendConfirmation(Request $request)
 {
     if (!$request->ajax()) {
         return;
     }
     $description = "<p>Este correo electrónico ha sido asociado a una nueva cuenta en bandicot&#46;com, para poder usar esta cuenta es necesario activarla confirmando este correo electrónico.</p>" . "<p>Para confirmar este correo electrónico debes hacer clic en botón \"Activar cuenta\" que se muestra a continuación:<br/><br/>" . "<a style='display: block;padding: 10px;border: 1px black solid;width: 200px;text-align: center;color: white;background: red;-webkit-border-radius: 5px;-moz-border-radius: 5px;border-radius: 5px;font-style: normal;text-transform: uppercase;margin: auto;' href='" . Auth::user()->keyActivation . "' target='_blank'>Activar cuenta</a></p>" . "<p><i><b>Atención:<b/> Si crees que se ha tratado de una equivocación, por favor ignora este mensaje.</i></p>";
     $email = new Email("Activación de cuenta", Auth::user()->email, [Email::VAR_NAME => Auth::user()->name, Email::VAR_DESCRIPTION => $description]);
     $email->send();
     return json_encode(array());
 }
 /** Recibe la peticion del estado de la transaccion realizada
  * 
  * @return type
  */
 public function getStatus()
 {
     // Get the payment ID before session clear
     $payment_id = \Session::get('paypal_payment_id');
     $payment_quantity = Session::get('payment_quantity');
     // clear the session payment ID
     Session::forget('paypal_payment_id');
     $payerId = isset($_GET['PayerID']) ? $_GET['PayerID'] : null;
     $token = isset($_GET['token']) ? $_GET['token'] : null;
     if (is_null($payerId) || is_null($token)) {
         return redirect()->back()->with(UI::modalMessage("Pago cancelado", "<div class='text-center'><img width='150px;' src='" . url('assets/images/sad.png') . "'><p style='font-size: 15pt;margin-top:20px;'>Parece ser que has cancelado el pago. ¿Quieres intentarlo de nuevo?</p></div>", "Cerrar"));
     }
     $payment = Payment::get($payment_id, $this->_api_context);
     $execution = new PaymentExecution();
     $execution->setPayerId($payerId);
     $result = $payment->execute($execution, $this->_api_context);
     if ($result->getState() == 'approved') {
         PayM::newRecord($token, $payerId, $payment_id, $payment_quantity);
         $date = new DateUtil(Auth::user()->premium_to);
         $message = view("ui/msg/contents/muchas-gracias-usuario")->with("date_premium", $date->getDay() . " de " . $date->getMonth() . " del " . $date->getYear())->render();
         $email = new Email("¡Gracias " . Auth::user()->name . " por tu aporte!", Auth::user()->email);
         $email->setDescription($message);
         $email->setName(Auth::user()->name);
         //Envia un correo de agredecimiento
         $email->queue();
         return redirect("user/contributions")->with(UI::modalMessage("Pago realizado. ¡Muchas gracias " . Auth::user()->name . "!", $message, "De nada, es un placer"));
     }
     return redirect()->back()->with(UI::modalMessage("ERROR", "<div class='text-center'><img width='150px;' src='" . url('assets/images/alert.png') . "'><p style='font-size: 15pt;margin-top:20px;'>Parece que hubo un problema al realizar el pago. ¿No tienes fondos?</p></div>", "Cerrar"));
 }