/** 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.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())); }
public function postEditPassword(Request $request) { $data = $request->all(); if (strlen($data["pass-new"]) <= 5) { return redirect()->back()->with(UI::message(UI::MESSAGE_TYPE_ERROR, trans("msg.editPass.error.pass.new.invalid"), null, 2)); } if ($data["pass-new"] != $data["pass-rep"]) { return redirect()->back()->with(UI::message(UI::MESSAGE_TYPE_ERROR, trans("msg.editPass.error.pass.new.not.match"), null, 2)); } if (User::editPassword($data["pass"], $data["pass-new"])) { return redirect()->back()->with(UI::message(UI::MESSAGE_TYPE_SUCCESS, trans("msg.editPass.success"), null, 2)); } else { return redirect()->back()->with(UI::message(UI::MESSAGE_TYPE_ERROR, trans("msg.editPass.error.pass.current"), null, 2)); } }
function index() { /* $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); $provider->save(); //Indica el registro como procesado. Esto ocasiona que la produccion ya no se vuelva a actualizar, hasta una nueva cola. $production->date_processed = DateUtil::getCurrentTime(); $production->save(); return $production->name . " Agregado"; } return; */ $users_state = array(User::where(User::ATTR_STATE, User::STATE_UNCONFIRMED_ACCOUNT)->whereNotIn(User::ATTR_ROLE, [User::ROLE_ADMIN])->count(), User::where(User::ATTR_STATE, User::STATE_ACTIVED_ACCOUNT)->whereNotIn(User::ATTR_ROLE, [User::ROLE_ADMIN])->count()); $users_role = array(User::all()->where(User::ATTR_ROLE, User::ROLE_SUSCRIPTOR)->count(), User::all()->where(User::ATTR_ROLE, User::ROLE_SUSCRIPTOR_PREMIUM)->count()); $productions = array(Production::all()->where(Production::ATTR_STATE, Production::STATE_ACTIVE)->count(), Production::whereNotIn(Production::ATTR_STATE, array(Production::STATE_ACTIVE))->count()); $total_playbacks = DB::table("playbacks")->where(User::ATTR_PLAYBACKS_PIVOT_PARENT, 0)->where(User::ATTR_PLAYBACKS_PIVOT_VALIDATE, 2)->count(); $total_ratings = DB::table("production_ratings")->count(); $total_comments = DB::table("comments")->count(); $total_payments = Payment::all()->sum(Payment::ATTR_MOUNT); return view("manager/contents/dashboard")->with("users_state", $users_state)->with("users_role", $users_role)->with("productions", $productions)->with("total_playbacks", $total_playbacks)->with("total_ratings", $total_ratings)->with("total_comments", $total_comments)->with("total_payments", $total_payments); }
/** Indica si un correo electronico esta asociado a un usuario * * @param type $email * @return type */ public static function existEmail($email) { return User::where(User::ATTR_EMAIL, $email)->count() > 0; }
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"; }); }); }
function ajax_getComments(Request $request) { if (!$request->ajax()) { return; } $data = $request->all(); $comments = Comment::where(Comment::ATTR_PRODUCTION_ID, $data[Comment::ATTR_PRODUCTION_ID])->orderBy("id", "DESC")->skip($data["skip"])->take(10)->get(); $response = array(); if ($data["skip"] == 0) { $total_comments = Comment::where(Comment::ATTR_PRODUCTION_ID, $data[Comment::ATTR_PRODUCTION_ID])->count(); } foreach ($comments as $comment) { $user = User::findOrNew($comment->user_id); $data_comment = array("content" => $comment->content, "date" => DateUtil::calculateDifference($comment->created_at), "name" => $user->name, "avatar" => is_null($user->avatar) ? url("assets/images/user_icon.png") : $user->avatar); if ($data["skip"] == 0) { $data_comment["total"] = $total_comments; } $response[] = $data_comment; } if (count($comments) == 0) { $response[] = array("total" => 0); } return json_encode($response); }
/** Activa la cuenta del usuario dirigida desde el link con el codigo enviado por correo al usuario * * @param Request $request */ function getActivateAccount($token) { if (Auth::user()->state == User::STATE_ACTIVED_ACCOUNT) { return redirect(""); } if (!is_null(User::where(User::ATTR_EMAIL, Auth::user()->email)->where(User::ATTR_KEY_ACTIVATION, $token)->get())) { $user = User::findOrNew(Auth::user()->id); $user[User::ATTR_STATE] = User::STATE_ACTIVED_ACCOUNT; $user->save(); return redirect("user/dashboard")->with(UI::modalMessage("¡Gracias por activar tu cuenta!", view("ui/msg/contents/gracias-por-activar-tu-cuenta")->render())); } return redirect(""); }
public function postSetResetPassword(Request $request) { $data = $request->all(); if (!isset($data[PasswordReset::ATTR_TOKEN]) || !isset($data[User::ATTR_EMAIL]) || strlen($data[PasswordReset::ATTR_TOKEN]) == 0 || strlen($data[User::ATTR_EMAIL]) == 0 || !isset($data["password"])) { return redirect("user/auth/recovery?request=send-mail&form=token")->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with(UI::message(UI::MESSAGE_TYPE_ERROR, "Error: Solicitud invalida")); } $email = $data[PasswordReset::ATTR_EMAIL]; $token = $data[PasswordReset::ATTR_TOKEN]; if (is_null($pet = PasswordReset::where(PasswordReset::ATTR_EMAIL, $email)->where(PasswordReset::ATTR_TOKEN, $token)->where(PasswordReset::ATTR_ACTIVE, Util::convertBooleanToInt(true))->get())) { return redirect("user/auth/recovery?request=send-mail&form=token")->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with(UI::message(UI::MESSAGE_TYPE_ERROR, "Error: Solicitud invalida")); } if (DateUtil::difSec($pet[0]->created_at, DateUtil::getCurrentTime()) > 60 * 60 * 2) { $pet[0]->active = Util::convertBooleanToInt(false); $pet->save(); return redirect("user/auth/recovery?request=send-mail&form=token")->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL])->with(UI::message(UI::MESSAGE_TYPE_ERROR, "Error: El código de seguridad ha expirado. <a href='" . url("user/auth/recovery") . "'>¿Realizar una nueva solicitud?</a>")); } $user = User::where(User::ATTR_EMAIL, $email)->get()[0]; $user->password = bcrypt($data["password"]); $user->save(); return redirect("user/auth/login")->withInput()->with(UI::message(UI::MESSAGE_TYPE_SUCCESS, "Tu nueva contraseña ha sido establecida, ya puedes iniciar sesión"))->with(User::ATTR_EMAIL, $data[User::ATTR_EMAIL]); }
@section("title") Reporte de problemas @stop @section("content") <h1><span class='glyphicon glyphicon-alert'></span> Reportes</h1> <div class="col-xs-12 text-center"> {{Util::pagination($reports)}} </div> <div class="col-lg-12"> <table class="table table-striped table-hover"> <tr><th>ID</th><th>Usuario</th><th>Email</th><th>Problema</th><th>Tiempo</th><th>Descripción</th><th>Imagen</th></tr> @foreach($reports as $report) <?php $user = User::findOrNew($report->user_id); ?> <tr> <td>{{$report->id}}</td> <td>{{$user->name}}</td> <td>{{$user->email}}</td> <td>{{trans("attr.report.type.".$report->type)}}</td> <td>Hace {{DateUtil::calculateDifference($report->date)}}</td> <td>{{$report->description}}</td> <td>{{(!is_null($report->image))?"<a target='_blank' href='".$report->image."'>Imagen</a>":""}}</td> </tr> @endforeach </table> <div class="col-xs-12 text-center"> {{Util::pagination($reports)}}