From 8a293530462135b03640383a6a06edd618587c40 Mon Sep 17 00:00:00 2001 From: Riccardo Di Dato Date: Thu, 17 Mar 2016 17:56:39 +0100 Subject: [PATCH] Inserite le mail di gestione utenti ed amministratori con task annessi; Inserito stile per commenti e form commenti; Inseriti articoli home e lato destro delle pagine in base alle visualizzazioni; Bugfix vari; --- private/crontab/core.hourly.php | 2 +- private/crontab/core.minute.php | 8 +- private/lib/FDN_MailHelper.php | 54 +++++++- private/lib/PipelineHelper.php | 37 ++++++ private/lib/dao/lib.inclusion.php | 2 + .../models/PasswordRecoveryRequestModel.php | 52 ++++++++ private/lib/gui/GUIHandler.php | 21 ++- .../DeleteOldPasswordResetRequestsTask.php | 27 ++++ .../GenerateAdminPasswordRecoveryMailTask.php | 30 +++++ .../task/GenerateUserActivationMailTask.php | 30 +++++ .../GenerateUserPasswordRecoveryMailTask.php | 30 +++++ private/lib/task/lib.inclusion.php | 7 + public/admin/editConfig.php | 11 +- public/admin/listGiornalisti.php | 1 + public/admin/passwordRecovery.php | 108 +++++++++++++++ public/admin/resetPassword.php | 69 ++++++++++ public/admin/validateCommento.php | 2 + public/articolo.php | 41 +++--- public/confirmUser.php | 56 ++++++++ public/index.php | 15 ++- public/passwordForgot.php | 29 ++++- public/passwordRecovery.php | 123 ++++++++++++++++++ public/style/public.css | 73 +++++++++-- 23 files changed, 786 insertions(+), 42 deletions(-) create mode 100644 private/lib/dao/models/PasswordRecoveryRequestModel.php create mode 100644 private/lib/task/DeleteOldPasswordResetRequestsTask.php create mode 100644 private/lib/task/GenerateAdminPasswordRecoveryMailTask.php create mode 100644 private/lib/task/GenerateUserActivationMailTask.php create mode 100644 private/lib/task/GenerateUserPasswordRecoveryMailTask.php create mode 100644 public/admin/passwordRecovery.php create mode 100644 public/admin/resetPassword.php create mode 100644 public/confirmUser.php create mode 100644 public/passwordRecovery.php diff --git a/private/crontab/core.hourly.php b/private/crontab/core.hourly.php index b55c335..f283a68 100644 --- a/private/crontab/core.hourly.php +++ b/private/crontab/core.hourly.php @@ -2,7 +2,7 @@ 0){ foreach ($tasks as $taskName){ diff --git a/private/crontab/core.minute.php b/private/crontab/core.minute.php index 5d5b7cf..e69dddb 100644 --- a/private/crontab/core.minute.php +++ b/private/crontab/core.minute.php @@ -7,7 +7,13 @@ Creation Date: 12/gen/2016 require_once(dirname(__FILE__). "/../load.php"); -$tasks = array("MailSendTask","GenerateAdminActivationMailTask"); +$tasks = array( + "GenerateAdminActivationMailTask", + "GenerateUserActivationMailTask", + "GenerateAdminPasswordRecoveryMailTask", + "GenerateUserPasswordRecoveryMailTask", + "MailSendTask", +); if (sizeof($tasks)>0){ foreach ($tasks as $taskName){ diff --git a/private/lib/FDN_MailHelper.php b/private/lib/FDN_MailHelper.php index 21c374e..7bf777c 100644 --- a/private/lib/FDN_MailHelper.php +++ b/private/lib/FDN_MailHelper.php @@ -11,6 +11,7 @@ class FDN_MailHelper { $tmp = new stdClass(); $tmp->from = $config->emails->postmaster; + $tmp->fromName = "I Fatti di Napoli - Automailer"; $tmp->recipient = $admin->email; $tmp->subject = "Attivazione account I Fatti di Napoli"; @@ -22,16 +23,63 @@ class FDN_MailHelper { return new MailModel($tmp); } - public static function getAdminPasswordResetMail($admin){ + public static function getAdminPasswordResetMail(PasswordRecoveryRequestModel $request){ + $config = GlobalVariables::get("config"); + $user = GlobalVariables::get("dao")->getFirst($request->target->class,array("id"=>$request->target->id)); + + $tmp = new stdClass(); + $tmp->from = $config->emails->postmaster; + $tmp->fromName = "I Fatti di Napoli - Automailer"; + $tmp->recipient = $user->email; + $tmp->subject = "I Fatti di Napoli - Recupero password"; + + $confirmLink = GUIHandler::getBaseUrl()."admin/passwordRecovery.php?req=".$request->id."&u=".$request->target->id; + + $tmp->body = "Hai ricevuto questo messaggio perchè hai effettuato una richiesta di recupero password dal nostro sito.

"; + $tmp->body.= "Se non hai effettuato nessuna richiesta, semplicemente ignora questo messaggio.

"; + $tmp->body.= "Clicka sul seguente link per generare una nuova password.

"; + $tmp->body.=''.$confirmLink.''; + + return new MailModel($tmp); } public static function getUserConfirmMail($user){ - + $config = GlobalVariables::get("config"); + + $tmp = new stdClass(); + $tmp->from = $config->emails->postmaster; + $tmp->fromName = "I Fatti di Napoli - Automailer"; + $tmp->recipient = $user->email; + $tmp->subject = "Attivazione account I Fatti di Napoli"; + + $confirmLink = GUIHandler::getBaseUrl()."confirmUser.php?regcode=".$user->id."&email=".$user->email; + + $tmp->body = "Per attivare il tuo account clicka sul link riportato in seguito o copialo e incollalo nel tuo browser.

"; + $tmp->body.=''.$confirmLink.''; + + return new MailModel($tmp); } - public static function getUserPasswordResetMail($user){ + public static function getUserPasswordResetMail(PasswordRecoveryRequestModel $request){ + $config = GlobalVariables::get("config"); + $user = GlobalVariables::get("dao")->getFirst($request->target->class,array("id"=>$request->target->id)); + + $tmp = new stdClass(); + $tmp->from = $config->emails->postmaster; + $tmp->fromName = "I Fatti di Napoli - Automailer"; + $tmp->recipient = $user->email; + $tmp->subject = "I Fatti di Napoli - Recupero password"; + + $confirmLink = GUIHandler::getBaseUrl()."passwordRecovery.php?req=".$request->id."&u=".$request->target->id; + + $tmp->body = "Hai ricevuto questo messaggio perchè hai effettuato una richiesta di recupero password dal nostro sito.

"; + $tmp->body.= "Se non hai effettuato nessuna richiesta, semplicemente ignora questo messaggio.

"; + $tmp->body.= "Clicka sul seguente link per generare una nuova password.

"; + $tmp->body.=''.$confirmLink.''; + + return new MailModel($tmp); } } diff --git a/private/lib/PipelineHelper.php b/private/lib/PipelineHelper.php index 29e4172..2e953b3 100644 --- a/private/lib/PipelineHelper.php +++ b/private/lib/PipelineHelper.php @@ -161,6 +161,43 @@ class PipelineHelper { return $rval; } + /** + * Il risultato di questa pipeline restituisce un oggetto con _id.banner contenente l'id del banner e visualizzazioni contenente il numero + * di visualizzazioni per oggi ordinati in modo crescente per visualizzazioni + * @param unknown $position + * @return multitype:multitype:multitype:number multitype:multitype:unknown number multitype:MongoDate multitype:multitype:multitype:number multitype:multitype:string + */ + public static function getMostViewedOfLastDays($startDate,$limit = 5){ + $rval = array( + array( + '$match'=>array( + 'statType'=>StatisticModel::STAT_TYPE_NOTIZIA, + 'date'=>array( + '$gte'=>new MongoDate($startDate) + ) + ) + ), + array( + '$group'=>array( + "_id"=>array( + 'notizia'=>'$content.notizia', + ), + "visualizzazioni"=>array( + '$sum'=>1 + ) + ) + ), + array( + '$sort'=>array( + "visualizzazioni"=>-1 + ) + ), + array( + '$limit'=>$limit + ) + ); + return $rval; + } } diff --git a/private/lib/dao/lib.inclusion.php b/private/lib/dao/lib.inclusion.php index a989814..c7981cb 100644 --- a/private/lib/dao/lib.inclusion.php +++ b/private/lib/dao/lib.inclusion.php @@ -37,6 +37,8 @@ require_once(dirname(__FILE__)."/models/BannerModel.php"); require_once(dirname(__FILE__)."/models/CBSQueueModel.php"); +require_once(dirname(__FILE__)."/models/PasswordRecoveryRequestModel.php"); + $dao = new GenericDao($database->dbName,$database->connectionString); GlobalVariables::set("dao", $dao); diff --git a/private/lib/dao/models/PasswordRecoveryRequestModel.php b/private/lib/dao/models/PasswordRecoveryRequestModel.php new file mode 100644 index 0000000..984d276 --- /dev/null +++ b/private/lib/dao/models/PasswordRecoveryRequestModel.php @@ -0,0 +1,52 @@ +hasProperty("target")){ + throw new CoreException("Missing parameter 'target' while calling PasswordRecoveryRequestModel::__construct()"); + } + + if (!array_key_exists("class", $this->target)){ + throw new CoreException("Missing parameter 'target.class' while calling PasswordRecoveryRequestModel::__construct()"); + } + + if (!array_key_exists("id", $this->target)){ + throw new CoreException("Missing parameter 'target.id' while calling PasswordRecoveryRequestModel::__construct()"); + } + + if (!$this->hasProperty("date")){ + $this->date = new MongoDate(); + } + + if (!$this->hasProperty("sent")){ + $this->sent = false; + } + } + + public static function fromModel(Model $model){ + $buildObj = new stdClass(); + if ($model instanceof UserModel || $model instanceof AdminModel ){ + $buildObj->target = array(); + $buildObj->target["class"] = get_class($model); + $buildObj->target["id"] = $model->id; + + return new self($buildObj); + } + else { + throw new CoreException("Impossible to build a PasswordRecoveryRequestModel from a model of class '".get_class($model)."' in PasswordRecoveryRequestModel::fromModel()"); + } + } + + public static function getCollectionName(){ + return "passwordRecovery"; + } +} + +?> \ No newline at end of file diff --git a/private/lib/gui/GUIHandler.php b/private/lib/gui/GUIHandler.php index ad0375f..a483675 100644 --- a/private/lib/gui/GUIHandler.php +++ b/private/lib/gui/GUIHandler.php @@ -320,10 +320,27 @@ class GUIHandler { public static function generateRightBannerBlock(){ + $stats = GlobalVariables::get("dao")->aggregate("StatisticModel",PipelineHelper::getMostViewedOfLastDays(strtotime("-7 days"),5)); + $idArray = array_map(function ($ele){ return new MongoId($ele["_id"]["notizia"]);}, $stats); + $lastsNews = GlobalVariables::get("dao")->query("NotiziaModel", - array("status"=>NotiziaModel::STATUS_ACCEPTED), - array("sort"=>array("about.data"=>-1),"limit"=>5) + array("status"=>NotiziaModel::STATUS_ACCEPTED,"_id"=>array('$in'=>$idArray)), + array("sort"=>array("about.data"=>-1)) ); + + if (sizeof($lastsNews)<5){ + $missing = 5-sizeof($lastsNews); + $add = GlobalVariables::get("dao")->query("NotiziaModel", + array("status"=>NotiziaModel::STATUS_ACCEPTED,"_id"=>array('$nin'=>$idArray)), + array("sort"=>array("about.data"=>-1),"limit"=>$missing) + ); + $lastsNews = array_merge($lastsNews,$add); + } + +// $lastsNews = GlobalVariables::get("dao")->query("NotiziaModel", +// array("status"=>NotiziaModel::STATUS_ACCEPTED), +// array("sort"=>array("about.data"=>-1),"limit"=>5) +// ); if (sizeof($lastsNews)>0){ $lastsNews = array_map(function($ele){$ele->testo = strip_tags($ele->testo);$ele->sottotitolo = strip_tags($ele->sottotitolo); return $ele; }, $lastsNews); } diff --git a/private/lib/task/DeleteOldPasswordResetRequestsTask.php b/private/lib/task/DeleteOldPasswordResetRequestsTask.php new file mode 100644 index 0000000..641bcbd --- /dev/null +++ b/private/lib/task/DeleteOldPasswordResetRequestsTask.php @@ -0,0 +1,27 @@ +query("PasswordRecoveryRequestModel",array("date"=>array( '$lte'=>new MongoDate( strtotime("-10 minutes") ) ) ) ,array("limit"=>10)); + if(sizeof($requests)>0){ + foreach ($requests as $request){ + GlobalVariables::get("dao")->delete($request); + } + } + } +} + +?> \ No newline at end of file diff --git a/private/lib/task/GenerateAdminPasswordRecoveryMailTask.php b/private/lib/task/GenerateAdminPasswordRecoveryMailTask.php new file mode 100644 index 0000000..43b5fbd --- /dev/null +++ b/private/lib/task/GenerateAdminPasswordRecoveryMailTask.php @@ -0,0 +1,30 @@ +query("PasswordRecoveryRequestModel",array("sent"=>false,"target.class"=>"AdminModel"),array("limit"=>10)); + if(sizeof($requests)>0){ + foreach ($requests as $request){ + $mail = FDN_MailHelper::getAdminPasswordResetMail($request); + GlobalVariables::get("dao")->save($mail); + $request->sent = true; + GlobalVariables::get("dao")->save($request); + } + } + } +} + + +?> \ No newline at end of file diff --git a/private/lib/task/GenerateUserActivationMailTask.php b/private/lib/task/GenerateUserActivationMailTask.php new file mode 100644 index 0000000..6c57da4 --- /dev/null +++ b/private/lib/task/GenerateUserActivationMailTask.php @@ -0,0 +1,30 @@ +query("UserModel",array("activationSent"=>false),array("limit"=>10)); + if(sizeof($users)>0){ + foreach ($users as $user){ + $mail = FDN_MailHelper::getUserConfirmMail($user); + GlobalVariables::get("dao")->save($mail); + $user->activationSent = true; + GlobalVariables::get("dao")->save($user); + } + } + } +} + +?> \ No newline at end of file diff --git a/private/lib/task/GenerateUserPasswordRecoveryMailTask.php b/private/lib/task/GenerateUserPasswordRecoveryMailTask.php new file mode 100644 index 0000000..90e1a03 --- /dev/null +++ b/private/lib/task/GenerateUserPasswordRecoveryMailTask.php @@ -0,0 +1,30 @@ +query("PasswordRecoveryRequestModel",array("sent"=>false,"target.class"=>"UserModel"),array("limit"=>10)); + if(sizeof($requests)>0){ + foreach ($requests as $request){ + $mail = FDN_MailHelper::getUserPasswordResetMail($request); + GlobalVariables::get("dao")->save($mail); + $request->sent = true; + GlobalVariables::get("dao")->save($request); + } + } + } +} + +?> \ No newline at end of file diff --git a/private/lib/task/lib.inclusion.php b/private/lib/task/lib.inclusion.php index 98ad145..8d9157b 100644 --- a/private/lib/task/lib.inclusion.php +++ b/private/lib/task/lib.inclusion.php @@ -12,4 +12,11 @@ require_once(dirname(__FILE__)."/NewsletterCheckTask.php"); require_once(dirname(__FILE__)."/SendBackupTask.php"); require_once(dirname(__FILE__)."/GenerateAdminActivationMailTask.php"); + +require_once(dirname(__FILE__)."/GenerateUserPasswordRecoveryMailTask.php"); +require_once(dirname(__FILE__)."/GenerateAdminPasswordRecoveryMailTask.php"); + +require_once(dirname(__FILE__)."/DeleteOldPasswordResetRequestsTask.php"); + +require_once(dirname(__FILE__)."/GenerateUserActivationMailTask.php"); ?> \ No newline at end of file diff --git a/public/admin/editConfig.php b/public/admin/editConfig.php index 9134764..a4242d4 100644 --- a/public/admin/editConfig.php +++ b/public/admin/editConfig.php @@ -20,7 +20,16 @@ MenuGenerator::generateMenu(); HTMLHelper::generateAdminHead(); -$taskList = array("MailSendTask","NewsletterCheckTask","SendBackupTask","GenerateAdminActivationMailTask"); +$taskList = array( + "MailSendTask", + "NewsletterCheckTask", + "SendBackupTask", + "GenerateAdminActivationMailTask", + "GenerateUserPasswordRecoveryMailTask", + "GenerateAdminPasswordRecoveryMailTask", + "DeleteOldPasswordResetRequestsTask", + "GenerateUserActivationMailTask" +); $saved = false; $action = PostHandler::get("action"); diff --git a/public/admin/listGiornalisti.php b/public/admin/listGiornalisti.php index 380b427..f785920 100644 --- a/public/admin/listGiornalisti.php +++ b/public/admin/listGiornalisti.php @@ -26,6 +26,7 @@ $columns = array( $buttons = array( array("icon"=>"icon-medium-blue icon-editmed","page"=>"editGiornalisti.php"), + array("icon"=>"icon-medium-blue icon-lockmed","page"=>"resetPassword.php"), array("icon"=>"icon-medium-blue icon-remove","page"=>"deleteGiornalisti.php") ); diff --git a/public/admin/passwordRecovery.php b/public/admin/passwordRecovery.php new file mode 100644 index 0000000..1cf7146 --- /dev/null +++ b/public/admin/passwordRecovery.php @@ -0,0 +1,108 @@ +getFirst("AdminModel",array("id"=>$adminId)); + if (is_null($admin)){ + GUIHandler::redirect("admin/login.php"); + } + $request = GlobalVariables::get("dao")->getFirst("PasswordRecoveryRequestModel",array("id"=>$requestCode,"target.id"=>$adminId,"target.class"=>"AdminModel")); + if (is_null($request)){ + GUIHandler::redirect("admin/login.php"); + } + + $action = PostHandler::get("action"); + if (!is_null($action) && strcmp("", $action)!=0){ + if (strcmp("change", $action)==0){ + $err = false; + $exc = new GUIException(array()); + + // Validate Password + $pass = trim(PostHandler::get("password")); + if (strcmp($pass,"")==0){ + $err = true; + $exc->addMessage("Inserire una nuova password"); + } + if (strcmp($pass,PostHandler::get("password_confirm"))!=0){ + $err = true; + $exc->addMessage("Le password inserite non coincidono"); + } + $admin->password = sha1($pass); + + if ($err){ + throw $exc; + } + + GlobalVariables::get("dao")->delete($request); + GlobalVariables::get("dao")->save($admin); + $changed = true; + GUIHandler::redirect("admin/login.php"); + } + } +}catch(GUIException $ex){ + $error = $ex->getMessageMerged("
"); +}catch (Exception $exec){ + LoggingFacilityManager::getLogger("gui")->log(LoggingFacility::$LEVEL_ERROR, $exec->getMessage()); + $error = "Si è verificato un errore inaspettato durante l'esecuzione della pagina. Se l'errore persiste contattare il supporto tecnico."; +} + +if ($changed){ + ?> +
+ La password è stata modificata con successo. +
+ Login +
+
+ +
+ '.$error.'
'; + } + ?> +
+ +
+ Password + +
+
+ Conferma Password + +
+
+
+ Conferma +
+ + + \ No newline at end of file diff --git a/public/admin/resetPassword.php b/public/admin/resetPassword.php new file mode 100644 index 0000000..44553b6 --- /dev/null +++ b/public/admin/resetPassword.php @@ -0,0 +1,69 @@ +hasRole(AdminModel::ADMIN_TYPE_SUPERADMIN)){ + GUIHandler::redirect("admin/index.php"); +} + +MenuGenerator::generateMenu(); + +HTMLHelper::generateAdminHead(); + +$id = PostHandler::get("id"); +if (is_null($id) || strcmp("", $id)==0){ + GUIHandler::redirect("admin/listAmministratori.php"); +} + +$giornalista = GlobalVariables::get("dao")->getFirst("AdminModel",array("id"=>$id)); +if (is_null($giornalista)){ + GUIHandler::redirect("admin/listAmministratori.php"); +} + +$confirm = PostHandler::get("confirm"); +if (!is_null($confirm) && strcmp("", $confirm)!=0){ + if (strcmp("true", $confirm)==0){ + $oldOne = GlobalVariables::get("dao")->getFirst("PasswordRecoveryRequestModel",array("target.class"=>"AdminModel","target.id"=>$giornalista->id)); + if (!is_null($oldOne)){ + GlobalVariables::get("dao")->delete($oldOne); + } + $request = PasswordRecoveryRequestModel::fromModel($giornalista); + GlobalVariables::get("dao")->save($request); + } + GUIHandler::redirect("admin/listAmministratori.php"); +} + +?> +
+nome." ".$giornalista->cognome."?"; +?> +
+ + +
+ Conferma + Annulla +
+ \ No newline at end of file diff --git a/public/admin/validateCommento.php b/public/admin/validateCommento.php index 9f93e7a..faad3ea 100644 --- a/public/admin/validateCommento.php +++ b/public/admin/validateCommento.php @@ -49,10 +49,12 @@ try{ if (strcmp($validation, "accept")==0){ $commento->status = CommentoModel::STATUS_ACCEPTED; GlobalVariables::get("dao")->save($commento); + GUIHandler::redirect("admin/unacceptedCommenti.php"); } else if (strcmp($validation, "reject")==0){ $commento->status = CommentoModel::STATUS_REJECTED; GlobalVariables::get("dao")->save($commento); + GUIHandler::redirect("admin/unacceptedCommenti.php"); } } diff --git a/public/articolo.php b/public/articolo.php index 6330a5b..a9409e1 100644 --- a/public/articolo.php +++ b/public/articolo.php @@ -80,7 +80,7 @@ try { // var_dump($articolo->sondaggio); } - if(array_key_exists("sendCommento", $_POST) && strcmp($_POST["sendCommento"] ,"Send")==0){ + if(array_key_exists("sendCommento", $_POST) && strcmp($_POST["sendCommento"] ,"Invia")==0){ if(UserLoginManager::isLogged()){ $saveable = new stdClass(); @@ -191,6 +191,12 @@ GUIHandler::generateHtmlHeaders(array("additionalHeaders"=>$additionalHeaders));
+
+
+ Commenti dei nostri lettori +
+
+
0){ ?>
@@ -201,8 +207,7 @@ GUIHandler::generateHtmlHeaders(array("additionalHeaders"=>$additionalHeaders));
titolo;?>
testo;?>
-
nome." ".$utonto->cognome;?>
-
date->sec)?>
+
Inviato da nome." ".$utonto->cognome;?> il date->sec)?>
$additionalHeaders));
'; if($sendComment){ ?> -
Il tuo commento è stato inviato alla redazione ed è in attesa di essere accettato.
+
Il tuo commento è stato inviato alla redazione ed è in attesa di essere accettato.
-
-
-
Titolo commento:
- -
Commento:
- - - -
+
+
+ Aggiungi il tuo commento per questa notizia +
+
+
+ + + +
+ +
+
+
-
Effettua il login per commentare o se non hai ancora un account registrati
+
Per commentare questa notizia accedi all'applicazione o registrati se non hai ancora un account
diff --git a/public/confirmUser.php b/public/confirmUser.php new file mode 100644 index 0000000..d5ce3bc --- /dev/null +++ b/public/confirmUser.php @@ -0,0 +1,56 @@ +getFirst("UserModel",array("id"=>$regCode,"email"=>$email,"active"=>false)); + + if (is_null($user)){ + GUIHandler::redirect("index.php"); + } + + $user->active = true; + GlobalVariables::get("dao")->save($user); + +}catch(GUIException $ex){ + $error = $ex->getMessageMerged("
"); +}catch (Exception $exec){ + LoggingFacilityManager::getLogger("gui")->log(LoggingFacility::$LEVEL_ERROR, $exec->getMessage()); + $error = "Si è verificato un errore inaspettato durante l'esecuzione della pagina. Se l'errore persiste contattare il supporto tecnico."; +} +?> +
+ +
+
+
+ Il tuo account è stato attivato con successo +
+
+ Home +
+
+
+ +
\ No newline at end of file diff --git a/public/index.php b/public/index.php index 4127050..f0a999f 100644 --- a/public/index.php +++ b/public/index.php @@ -73,10 +73,21 @@ try { $ristorantiNews = array_map(function($ele){$ele->testo = strip_tags($ele->testo);$ele->sottotitolo = strip_tags($ele->sottotitolo); return $ele; }, $ristorantiNews); } + $stats = GlobalVariables::get("dao")->aggregate("StatisticModel",PipelineHelper::getMostViewedOfLastDays(strtotime("-7 days"),5)); + $idArray = array_map(function ($ele){ return new MongoId($ele["_id"]["notizia"]);}, $stats); + $lastsNews = GlobalVariables::get("dao")->query("NotiziaModel", - array("status"=>NotiziaModel::STATUS_ACCEPTED), - array("sort"=>array("about.data"=>-1),"limit"=>5) + array("status"=>NotiziaModel::STATUS_ACCEPTED,"_id"=>array('$in'=>$idArray)), + array("sort"=>array("about.data"=>-1)) ); + if (sizeof($lastsNews)<5){ + $missing = 5-sizeof($lastsNews); + $add = GlobalVariables::get("dao")->query("NotiziaModel", + array("status"=>NotiziaModel::STATUS_ACCEPTED,"_id"=>array('$nin'=>$idArray)), + array("sort"=>array("about.data"=>-1),"limit"=>$missing) + ); + $lastsNews = array_merge($lastsNews,$add); + } if (sizeof($lastsNews)>0){ $lastsNews = array_map(function($ele){$ele->testo = strip_tags($ele->testo);$ele->sottotitolo = strip_tags($ele->sottotitolo); return $ele; }, $lastsNews); } diff --git a/public/passwordForgot.php b/public/passwordForgot.php index d24477c..cbcbf9b 100644 --- a/public/passwordForgot.php +++ b/public/passwordForgot.php @@ -22,7 +22,15 @@ try { } else { $sent = true; - $mail = FDN_MailHelper::getUserPasswordResetMail($user); + + $oldOne = GlobalVariables::get("dao")->getFirst("PasswordRecoveryRequestModel",array("target.class"=>"UserModel","target.id"=>$user->id)); + if (!is_null($oldOne)){ + GlobalVariables::get("dao")->delete($oldOne); + } + $request = PasswordRecoveryRequestModel::fromModel($user); + GlobalVariables::get("dao")->save($request); + +// $mail = FDN_MailHelper::getUserPasswordResetMail($user); // GlobalVariables::get("dao")->save($mail); } @@ -32,15 +40,22 @@ try { $msg = $ex->getMessage(); $err = true; }catch (Exception $exec){ - $msg = LogModel::fromException($exec); - GlobalVariables::get("dao")->save($msg); + $model = LogModel::fromException($exec); + GlobalVariables::get("dao")->save($model); + $msg = "Si è verificato un errore inatteso durante l'operazione. Se il problema persiste contattaci comunicandoci il seguente codice " . $model->getCode() . ""; } if ($sent){ - ?> -
A breve riceverai una email per modificare la password!
- - +
+ +
A breve riceverai una email per modificare la password!
+ diff --git a/public/passwordRecovery.php b/public/passwordRecovery.php new file mode 100644 index 0000000..58e2f6c --- /dev/null +++ b/public/passwordRecovery.php @@ -0,0 +1,123 @@ +getFirst("UserModel",array("id"=>$userId)); + if (is_null($user)){ + GUIHandler::redirect("index.php"); + } + $request = GlobalVariables::get("dao")->getFirst("PasswordRecoveryRequestModel",array("id"=>$requestCode,"target.id"=>$userId,"target.class"=>"UserModel")); + if (is_null($request)){ + GUIHandler::redirect("index.php"); + } + + $action = PostHandler::get("action"); + if (!is_null($action) && strcmp("", $action)!=0){ + if (strcmp("change", $action)==0){ + $err = false; + $exc = new GUIException(array()); + + // Validate Password + $pass = trim(PostHandler::get("password")); + if (strcmp($pass,"")==0){ + $err = true; + $exc->addMessage("Inserire una nuova password"); + } + if (strcmp($pass,PostHandler::get("password_confirm"))!=0){ + $err = true; + $exc->addMessage("Le password inserite non coincidono"); + } + $user->password = sha1($pass); + + if ($err){ + throw $exc; + } + + GlobalVariables::get("dao")->delete($request); + GlobalVariables::get("dao")->save($user); + $changed = true; + } + } +}catch(GUIException $ex){ + $error = $ex->getMessageMerged("
"); +}catch (Exception $exec){ + LoggingFacilityManager::getLogger("gui")->log(LoggingFacility::$LEVEL_ERROR, $exec->getMessage()); + $error = "Si è verificato un errore inaspettato durante l'esecuzione della pagina. Se l'errore persiste contattare il supporto tecnico."; +} +?> +
+ +
+
+ La password è stata modificata con successo. +
+
+ Home +
+
+ +
+
+ Inserire la nuova password da utilizzare per utilizzare l'applicazione +
+ '.$error.'
'; + } + ?> +
+ +
+ Password + +
+
+ Conferma Password + +
+
+
+ Conferma +
+
+ + +
\ No newline at end of file diff --git a/public/style/public.css b/public/style/public.css index 9b4c2ff..2233c00 100644 --- a/public/style/public.css +++ b/public/style/public.css @@ -178,7 +178,7 @@ display: inline-block; .ansaTesto > p{margin:0px;text-align:justify;} -.socialBarAnsa{margin-top:3px;border:solid #d6d6d6 1px;border-left:0px;border-right:0px;border-top:0px;padding-left:10px;} +.socialBarAnsa{margin-top:3px;border:solid #d6d6d6 1px;border-left:0px;border-right:0px;border-top:0px;padding-left:20px;} .socialBarAnsa > a{margin-right:3px;display:inline-block;} .socialBarAnsa > a > div{display:inline-block;width:22px;height:22px;background-repeat:no-repeat;background-position:center;} @@ -352,14 +352,30 @@ display: inline-block; .carosImage > img {vertical-align:middle; } .commentiContainer{padding:5px;} -.oldCommentiContainer{border-radius:10px;margin:5px 0px;} -.commento{border:solid #ddd 1px;border-radius:10px;padding:5px;margin:5px 0px;} -.userCommento{/* display:inline-block; */} -.userCommento span {color:#5847c1;} -.userInfo{text-align:right;padding:5px;} -.dataCommento{font-size:14px;} + +.oldCommentiContainer{margin:5px 0px; padding-left: 30px;} +.commento{border: 4px solid #CFCFCF;border-radius: 15px;padding: 12px 5px 5px 20px;margin: 5px 0px;background-color: #e6e6e6;} .commentoTitle{font-weight:bold;} -.commentoTesto{padding:2px 5px;} +.commentoTesto{padding: 5px 26px;text-align: justify;} + +.commentiLabel{display: inline-block;background-color: #cfdbe9;padding: 10px 20px;border-radius: 10px;font-style: italic;color: #222;font-weight: bold;font-size: 11pt;} + +.userCommento{/* display:inline-block; */} +/* .userCommento span {color:#5847c1;} */ +.userInfo{text-align: right;padding: 0 26px 3px;font-size: 9pt;font-style: italic;} +.dataCommento{font-size:14px;} +.userInfo .user{font-weight:bold;} + +.commento form{width:100%;} +.commento input[type="text"]{width: 90%;padding: 5px 10px;font-weight: bold;} +.commento textarea{margin-left:5%;width:85%;padding: 5px 10px;resize:none;font-size: 11pt;} +.commento form .sendBtnDiv{text-align: right;padding-right: 6%;} +.commento form .sendBtnDiv input{padding:5px 20px;} +.commento.noLogin{font-size: 14pt;padding-bottom: 15px;background-color: rgb(252, 252, 198);} +.commento.noLogin a {color:#1C89C3; font-weight:bold;} + +#commentoArea{background-color:#E0F6E5;} +#commentoArea .commentoTitle{font-size: 10pt;padding: 0px 0px 10px;text-align: center;font-style: italic;} .newCommento{padding:10px 5px;} .newCommento div{padding:5px 0px;} @@ -381,9 +397,9 @@ display: inline-block; .summaryRightBar{width:370px;padding:5px;vertical-align:top;display:inline-block;} .rightBarContainer{width:100%;height:100%;} -.commentoInviato, .noLogin{padding:10px;border:solid #C0C0C0 2px;margin:5px;border-radius:10px;} +.commentoInviato{padding:10px;border:solid #C0C0C0 2px;margin:5px;border-radius:10px;} + .commentoInviato{color:green;text-align:center;} -.noLogin a {color:#68A2C1;} .newCommento textarea{resize:none;} @@ -410,3 +426,40 @@ display: inline-block; .contattiRedazione{text-align:center;font-size:23px;padding:10px 5px;} + + +/* +Password Recovery +*/ +.passwordChange{padding:20px 80px; + background: rgb(206,236,244); /* Old browsers */ + background: -moz-linear-gradient(top, rgba(206,236,244,1) 65%, rgba(135,220,242,1) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(top, rgba(206,236,244,1) 65%,rgba(135,220,242,1) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, rgba(206,236,244,1) 65%,rgba(135,220,242,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ceecf4', endColorstr='#87dcf2',GradientType=0 ); /* IE6-9 */ +} + +.passwordChange .title{padding:0 0 25px; color:#444;} +.passwordChange .row{padding:3px 0;} +.passwordChange span.label{display: inline-block;text-align: right;padding-right: 5px;text-transform: uppercase;font-size: 10pt;width: 300px;color: rgb(68, 68, 68);font-weight: bold;} +.passwordChange .row input{padding:9px 6px;} + +.passwordChange div.formBtns{padding: 15px 0px 0px 370px;} + +.passwordChange div.formBtns a{background: rgb(115,216,245); /* Old browsers */ + background: -moz-linear-gradient(top, rgba(115,216,245,1) 53%, rgba(66,196,239,1) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(top, rgba(115,216,245,1) 53%,rgba(66,196,239,1) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, rgba(115,216,245,1) 53%,rgba(66,196,239,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#73d8f5', endColorstr='#42c4ef',GradientType=0 ); /* IE6-9 */ + padding: 5px 20px; + border-radius: 2px 2px 2px 2px; + color: rgb(0, 133, 185); + font-weight: bold; + box-shadow: 0px 0px 2px 0px; + text-transform: uppercase; + font-size: 12px; + display: inline-block; +} + + +