X-Git-Url: http://mop.ddnsfree.com/gitweb/?p=brisk.git;a=blobdiff_plain;f=web%2Fusermgmt.php;h=307372c94f66839b466dc3b828ebc88edcc31394;hp=22256a74d2d2cc07f5782ad45f722b5cda54c7c2;hb=8740bf85c70c984fdd5342ef4446cced16fb4e5e;hpb=ea90fe3a8a0952838a454d3613952597b1e58959 diff --git a/web/usermgmt.php b/web/usermgmt.php index 22256a7..307372c 100644 --- a/web/usermgmt.php +++ b/web/usermgmt.php @@ -24,24 +24,35 @@ $G_base = ""; -$mlang_stat_day = array( 'normal match'=> array( 'it' => 'Partite normali', - 'en' => 'Normal matches' ), - 'special match' => array( 'it' => 'Partite speciali', - 'en' => 'Special matches'), +$mlang_umgmt = array( 'nu_psubj' => array( 'it' => 'Brisk: credenziali di accesso.', + 'en' => 'Brisk: credentials.'), + 'nu_ptext' => array( 'it' => +'Ciao, sono l\' amministratore del sito di Brisk. + +La verifica del tuo indirizzo di posta elettronica e del tuo nickname è andata a buon fine, per accedere al sito +d\'ora in poi potrai utilizzare l\' utente \'%s\' e la password \'%s\'. + +Benvenuto e buone partite, mop.', + 'en' => 'EN ptext [%s] [%s]'), + 'nu_phtml' => array( 'it' => 'Ciao, sono l\' amministratore del sito di Brisk.

+La verifica del tuo indirizzo di posta elettronica e del tuo nickname è andata a buon fine.

Per accedere al sito d\'ora in poi potrai usare l\' utente \'%s\' e la password \'%s\'.

+Benvenuto e buone partite, mop.
', + 'en' => 'EN phtml [%s] [%s]') + ); - 'info_total'=> array( 'it' => 'totali', - 'en' => 'En totali') - ); ini_set("max_execution_time", "240"); require_once($G_base."Obj/brisk.phh"); require_once($G_base."Obj/user.phh"); require_once($G_base."Obj/auth.phh"); +require_once($G_base."Obj/mail.phh"); +require_once($G_base."Obj/dbase_base.phh"); require_once($G_base."Obj/dbase_${G_dbasetype}.phh"); require_once($G_base."briskin5/Obj/briskin5.phh"); require_once($G_base."briskin5/Obj/placing.phh"); require_once($G_base."spush/brisk-spush.phh"); +require_once($G_base."index_wr.php"); function check_auth() { @@ -83,111 +94,564 @@ function check_auth() return ($ret); } +$s_style = " +"; + function main() { - GLOBAL $G_dbpfx, $G_alarm_passwd, $f_mailusers, $sess, $_POST, $_SERVER; + GLOBAL $s_style, $G_dbpfx, $G_lang, $G_alarm_passwd, $G_domain, $G_webbase; + GLOBAL $mlang_umgmt, $mlang_indwr, $f_mailusers, $sess, $_POST, $_SERVER; + + + $curtime = time(); + $status = ""; if (check_auth() == FALSE) { echo "Authentication failed"; exit; } - if (isset($_POST['f_accept'])) { - $action = "accept"; + $nocheck = FALSE; + if (isset($_GET['f_nocheck'])) { + $nocheck = TRUE; } - else if (isset($_POST['f_delete'])) { - $action = "delete"; - } - - if ($action == "accept") { - if (($bdb = BriskDB::create()) == FALSE) { - log_crit("stat-day: database connection failed"); - break; + if (isset($_GET['do']) && $_GET['do'] == 'newuser') { + if (isset($_POST['f_accept'])) { + $action = "accept"; + } + else if (isset($_POST['f_delete'])) { + $action = "delete"; + } + else { + $action = "show"; } - foreach($_POST as $key => $value) { - if (substr($key, 0, 9) != "f_newuser") - continue; + if ($action == "accept") { + foreach($_POST as $key => $value) { + if (substr($key, 0, 9) != "f_newuser") + continue; - $id = (int)substr($key, 9); - if ($id <= 0) - continue; + $id = (int)substr($key, 9); + if ($id <= 0) + continue; + // check existence of username or email + $is_trans = FALSE; + $res = FALSE; + do { + if (($bdb = BriskDB::create()) == FALSE) + break; - // retrieve list of active tournaments - $usr_sql = sprintf(" + // retrieve list added users + $usr_sql = sprintf(" SELECT usr.*, guar.login AS guar_login FROM %susers AS usr JOIN %susers AS guar ON guar.code = usr.guar_code - WHERE ( (usr.type & (CAST (X'%x' as integer))) = (CAST (X'%x' as integer)) ) + WHERE usr.type & (CAST (X'%x' as integer)) = (CAST (X'%x' as integer)) AND usr.disa_reas = %d AND usr.code = %d;", $G_dbpfx, $G_dbpfx, - USER_FLAG_TY_ALL, USER_FLAG_TY_DISABLE, - USER_DIS_REA_NU_TOBECHK, $id); + USER_FLAG_TY_DISABLE, USER_FLAG_TY_DISABLE, + USER_DIS_REA_NU_ADDED, $id); + if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE) { + log_crit("stat-day: select from tournaments failed"); + break; + } + $usr_n = pg_numrows($usr_pg); + if ($usr_n != 1) { + $status .= sprintf("Inconsistency for code %d, returned %d records, skipped.
", + $id, $usr_n); + break; + } + + $usr_obj = pg_fetch_object($usr_pg, 0); + + $bdb->transaction('BEGIN'); + $is_trans = TRUE; + + + if (($bdb->user_update_flag_ty($usr_obj->code, USER_FLAG_TY_DISABLE, + TRUE, USER_DIS_REA_NU_ADDED, + TRUE, USER_DIS_REA_NU_MAILED)) == FALSE) { + echo "fail 2
"; + break; + } + + if (($mail_code = $bdb->mail_reserve_code()) == FALSE) { + fprintf(STDERR, "ERROR: mail reserve code FAILED\n"); + break; + } + $hash = md5($curtime . $G_alarm_passwd . $usr_obj->login . $usr_obj->email); + + $confirm_page = sprintf("http://%s/%s/mailmgr.php?f_act=checkmail&f_code=%d&f_hash=%s", + $G_domain, $G_webbase, $mail_code, $hash); + $subj = $mlang_indwr['nu_msubj'][$G_lang]; + if (($usr_obj->type & USER_FLAG_TY_APPR) == USER_FLAG_TY_APPR) { + $body_txt = sprintf($mlang_indwr['ap_mtext'][$G_lang], + $cli_name, $confirm_page); + $body_htm = sprintf($mlang_indwr['ap_mhtml'][$G_lang], + $cli_name, $confirm_page); + } + else { + $body_txt = sprintf($mlang_indwr['nu_mtext'][$G_lang], + $usr_obj->guar_login, $usr_obj->login, $confirm_page); + $body_htm = sprintf($mlang_indwr['nu_mhtml'][$G_lang], + $usr_obj->guar_login, $usr_obj->login, $confirm_page); + } + + $mail_item = new MailDBItem($mail_code, $usr_obj->code, MAIL_TYP_CHECK, + $curtime, $subj, $body_txt, $body_htm, $hash); + + if (brisk_mail($usr_obj->email, $subj, $body_txt, $body_htm) == FALSE) { + // mail error + fprintf(STDERR, "ERROR: mail send FAILED\n"); + break; + } + // save the mail + if ($mail_item->store($bdb) == FALSE) { + // store mail error + fprintf(STDERR, "ERROR: store mail FAILED\n"); + break; + } + $status .= sprintf("status change for %s: SUCCESS
", $usr_obj->login); + $bdb->transaction('COMMIT'); + $res = TRUE; + } while(FALSE); + if ($res == FALSE) { + $status .= sprintf("Error occurred during accept action
"); + if ($is_trans) + $bdb->transaction('ROLLBACK'); + break; + } + } + } // else if ($action == "accept") { + + + do { + if (($bdb = BriskDB::create()) == FALSE) { + log_crit("stat-day: database connection failed"); + break; + } + + // retrieve list added users + $usr_sql = sprintf(" +SELECT usr.*, guar.login AS guar_login + FROM %susers AS usr + JOIN %susers AS guar ON guar.code = usr.guar_code + WHERE usr.type & (CAST (X'%x' as integer)) = (CAST (X'%x' as integer)) + AND usr.disa_reas = %d ORDER BY usr.lintm;", + $G_dbpfx, $G_dbpfx, + USER_FLAG_TY_DISABLE, USER_FLAG_TY_DISABLE, + USER_DIS_REA_NU_ADDED); if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE) { log_crit("stat-day: select from tournaments failed"); break; } - $usr_obj = pg_fetch_object($usr_pg, 0); - - printf("KEY: %s: %s %s
\n", $id, $value, $usr_obj->login); - // change state - // send mail - // populate - } + $usr_n = pg_numrows($usr_pg); + $tab_lines = "UserGuarDate"; + for ($i = 0 ; $i < $usr_n ; $i++) { + $usr_obj = pg_fetch_object($usr_pg, $i); + + $tab_lines .= sprintf("%s%s%s\n", + $usr_obj->code, ($nocheck ? "" : "CHECKED"), + eschtml($usr_obj->login), eschtml($usr_obj->guar_login), $usr_obj->lintm); + } + + + ?> + + + +Brisk: new imported users management. + + + +

New imported users management.

+ +
+ + +
+ + +
+ + + $value) { + if (substr($key, 0, 9) != "f_newuser") + continue; + + $id = (int)substr($key, 9); + if ($id <= 0) + continue; + + $res = FALSE; + do { + if (($bdb = BriskDB::create()) == FALSE) { + $status .= "1
"; + break; + } + // retrieve list added users + $mai_sql = sprintf(" +SELECT mail.*, usr.email AS email + FROM %susers AS usr + JOIN %smails AS mail ON mail.ucode = usr.code + WHERE mail.ucode = %d AND mail.type = %d", + $G_dbpfx, $G_dbpfx, $id, MAIL_TYP_CHECK); + if (($mai_pg = pg_query($bdb->dbconn->db(), $mai_sql)) == FALSE) { + log_crit("retrieve mail failed"); + $status .= "2
"; + break; + } + $mai_n = pg_numrows($mai_pg); + if ($mai_n != 1) { + $status .= sprintf("Inconsistency for code %d, returned %d records, skipped.
", + $id, $mai_n); + break; + } + $mai_obj = pg_fetch_object($mai_pg, 0); + $mail = MailDBItem::MailDBItemFromRecord($mai_obj); + + if (brisk_mail($mai_obj->email, $mail->subj, $mail->body_txt, $mail->body_htm) == FALSE) { + // mail error + $status .= sprintf("Send mail filed for user id %d
\n", $id); + break; + } + $res = TRUE; + } while(FALSE); + if ($res == FALSE) { + $status .= sprintf("Error occurred during resend action
"); + break; + } + } // foreach + } + do { if (($bdb = BriskDB::create()) == FALSE) { log_crit("stat-day: database connection failed"); break; } - // retrieve list of active tournaments + // retrieve list added users $usr_sql = sprintf(" -SELECT usr.*, guar.login AS guar_login - FROM %susers AS usr - JOIN %susers AS guar ON guar.code = usr.guar_code - WHERE ( (usr.type & (CAST (X'%x' as integer))) = (CAST (X'%x' as integer)) ) - AND usr.disa_reas = %d;", +SELECT usr.*, guar.login AS guar_login + FROM %susers AS usr + JOIN %susers AS guar ON guar.code = usr.guar_code + WHERE usr.type & (CAST (X'%x' as integer)) = (CAST (X'%x' as integer)) + AND usr.disa_reas = %d ORDER BY usr.lintm;", $G_dbpfx, $G_dbpfx, - USER_FLAG_TY_ALL, USER_FLAG_TY_DISABLE, - USER_DIS_REA_NU_TOBECHK); + USER_FLAG_TY_DISABLE, USER_FLAG_TY_DISABLE, + USER_DIS_REA_NU_MAILED); if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE) { log_crit("stat-day: select from tournaments failed"); break; } - $usr_n = pg_numrows($usr_pg); - $tab_lines = ""; + $tab_lines = "UserGuarDate"; for ($i = 0 ; $i < $usr_n ; $i++) { $usr_obj = pg_fetch_object($usr_pg, $i); - - $tab_lines .= sprintf("%s\n", - $usr_obj->code, eschtml($usr_obj->login), eschtml($usr_obj->guar_login)); + + $tab_lines .= sprintf("%s%s%s\n", + $usr_obj->code, ($nocheck ? "" : "CHECKED"), + eschtml($usr_obj->login), eschtml($usr_obj->guar_login), $usr_obj->lintm); } ?> + + +Brisk: new mailed users management. + + -
" method="POST"> - +

New mailed users management.

+ + +
- - + +
$value) { + if (substr($key, 0, 9) != "f_newuser") + continue; -main(); + $id = (int)substr($key, 9); + if ($id <= 0) + continue; + + + // retrieve list of active tournaments + $usr_sql = sprintf(" +SELECT usr.*, guar.login AS guar_login + FROM %susers AS usr + JOIN %susers AS guar ON guar.code = usr.guar_code + WHERE usr.type & (CAST (X'%x' as integer)) = (CAST (X'%x' as integer)) + AND usr.disa_reas = %d AND usr.code = %d;", + $G_dbpfx, $G_dbpfx, + USER_FLAG_TY_DISABLE, USER_FLAG_TY_DISABLE, + USER_DIS_REA_NU_TOBECHK, $id); + if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE) { + log_crit("stat-day: select from tournaments failed"); + break; + } + $usr_obj = pg_fetch_object($usr_pg, 0); + + printf("KEY: %s: %s %s
\n", $id, $value, $usr_obj->login); + // change state + $passwd = passwd_gen(); + + if (($bdb->user_update_passwd($usr_obj->code, $passwd)) == FALSE) { + echo "fail 1.5
"; + break; + } + + if (($bdb->user_update_flag_ty($usr_obj->code, USER_FLAG_TY_DISABLE, + TRUE, USER_DIS_REA_NU_TOBECHK, + FALSE, USER_DIS_REA_NONE)) == FALSE) { + echo "fail 2
"; + break; + } + + $bdb->user_update_login_time($usr_obj->code, 0); + + // send mail + $subj = $mlang_umgmt['nu_psubj'][$G_lang]; + $body_txt = sprintf($mlang_umgmt['nu_ptext'][$G_lang], + $usr_obj->login, $passwd); + $body_htm = sprintf($mlang_umgmt['nu_phtml'][$G_lang], + $usr_obj->login, $passwd); + + log_step(sprintf("[%s], [%s], [%s], [%s]\n", $usr_obj->email, $subj, $body_txt, $body_htm)); + + + if (brisk_mail($usr_obj->email, $subj, $body_txt, $body_htm) == FALSE) { + // mail error + fprintf(STDERR, "ERROR: mail send FAILED\n"); + break; + } + } + exit; + } + + + else if ($action == "delete") { + foreach($_POST as $key => $value) { + if (substr($key, 0, 9) != "f_newuser") + continue; + + $id = (int)substr($key, 9); + if ($id <= 0) + continue; + + // check existence of username or email + $is_trans = FALSE; + $res = FALSE; + do { + if (($bdb = BriskDB::create()) == FALSE) + break; + + // retrieve list added users + $usr_sql = sprintf(" +SELECT usr.*, guar.login AS guar_login + FROM %susers AS usr + JOIN %susers AS guar ON guar.code = usr.guar_code + WHERE usr.type & (CAST (X'%x' as integer)) = (CAST (X'%x' as integer)) + AND usr.disa_reas = %d AND usr.code = %d;", + $G_dbpfx, $G_dbpfx, + USER_FLAG_TY_DISABLE, USER_FLAG_TY_DISABLE, + USER_DIS_REA_NU_TOBECHK, $id); + + + if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE) { + log_crit("stat-day: select from tournaments failed"); + break; + } + $usr_n = pg_numrows($usr_pg); + if ($usr_n != 1) { + $status .= sprintf("Inconsistency for code %d, returned %d records, skipped.
", + $id, $usr_n); + break; + } + + $usr_obj = pg_fetch_object($usr_pg, 0); + + $bdb->transaction('BEGIN'); + $is_trans = TRUE; + + $del_sql = sprintf("DELETE FROM %susers WHERE code = %d;", + $G_dbpfx, $usr_obj->code); + if (($del_pg = pg_query($bdb->dbconn->db(), $del_sql)) == FALSE) { + log_crit("stat-day: select from tournaments failed"); + break; + } -?> \ No newline at end of file + // FIXME: add to index_wr.php strings + $subj = "Brisk: nickname rifiutato"; + // the same for both cases: + // if (($usr_obj->type & USER_FLAG_TY_APPR) == USER_FLAG_TY_APPR) { + $body_txt = sprintf('Ciao, sono l\' amministratore del sito di Brisk. + +Ti volevo segnalare che il nickname \'%s\' con cui ti volevi registrare +non ha superato la fase di verifica manuale; il motivo può essere +la sua illeggibilità per gli altri utenti o il contenuto poco ortodosso +o troppo aggressivo o o ci sono troppe cifre consecutive o qualcosa del genere. + +La procedura di registrazione va ripetuta. + +Saluti e buone partite, mop.', $usr_obj->login); + + $body_htm = sprintf('Ciao, sono l\' amministratore del sito di Brisk.

+Ti volevo segnalare che il nickname \'%s\' con cui ti volevi registrare +non ha superato la fase di verifica manuale; il motivo può essere +la sua illeggibilità per gli altri utenti o il contenuto poco ortodosso +o troppo aggressivo o o ci sono troppe cifre consecutive o qualcosa del genere.

+La procedura di registrazione va ripetuta.

+Saluti e buone partite, mop.', $usr_obj->login); + /* } */ + /* else { */ + /* $body_txt = sprintf($mlang_indwr['nu_mtext'][$G_lang], */ + /* $usr_obj->guar_login, $usr_obj->login, $confirm_page); */ + /* $body_htm = sprintf($mlang_indwr['nu_mhtml'][$G_lang], */ + /* $usr_obj->guar_login, $usr_obj->login, $confirm_page); */ + /* } */ + + if (brisk_mail($usr_obj->email, $subj, $body_txt, $body_htm) == FALSE) { + // mail error + fprintf(STDERR, "ERROR: mail send FAILED\n"); + break; + } + $status .= sprintf("user delete for %s: SUCCESS
", $usr_obj->login); + $bdb->transaction('COMMIT'); + $res = TRUE; + } while(FALSE); + if ($res == FALSE) { + $status .= sprintf("Error occurred during accept action
"); + if ($is_trans) + $bdb->transaction('ROLLBACK'); + break; + } + printf("Registration %s for login %s deleted
\n", $usr_obj->code, $usr_obj->login); + } + } + else { + do { + if (($bdb = BriskDB::create()) == FALSE) { + log_crit("stat-day: database connection failed"); + break; + } + + // retrieve list of active tournaments + $usr_sql = sprintf(" +SELECT usr.*, guar.login AS guar_login + FROM %susers AS usr + JOIN %susers AS guar ON guar.code = usr.guar_code + WHERE usr.type & (CAST (X'%x' as integer)) = (CAST (X'%x' as integer)) + AND usr.disa_reas = %d ORDER BY usr.lintm;", + $G_dbpfx, $G_dbpfx, + USER_FLAG_TY_DISABLE, USER_FLAG_TY_DISABLE, + USER_DIS_REA_NU_TOBECHK); + if (($usr_pg = pg_query($bdb->dbconn->db(), $usr_sql)) == FALSE) { + log_crit("stat-day: select from tournaments failed"); + break; + } + + $usr_n = pg_numrows($usr_pg); + $tab_lines = "UserEMailGuarApprendiceDate"; + for ($i = 0 ; $i < $usr_n ; $i++) { + $usr_obj = pg_fetch_object($usr_pg, $i); + + $tab_lines .= sprintf("%s%s%s%s%s\n", + $usr_obj->code, ($nocheck ? "" : "CHECKED"), + eschtml($usr_obj->login), eschtml($usr_obj->email), eschtml($usr_obj->guar_login), + ($usr_obj->type & USER_FLAG_TY_APPR ? "Yes" : "No"), + $usr_obj->lintm); + } + ?> + + + +Brisk: email verified user management. + + + +

E-mail verified user management.

+ +
+ + +
+ + +
+ + +