2016-09-06 04:00:00 +00:00
< ? php
namespace Zotlabs\Module\Admin ;
class Accounts {
/**
* @ brief Handle POST actions on accounts admin page .
*
* This function is called when on the admin user / account page the form was
* submitted to handle multiple operations at once . If one of the icons next
* to an entry are pressed the function admin_page_accounts () will handle this .
*
*/
function post () {
2018-01-30 01:43:11 +00:00
2016-09-06 04:00:00 +00:00
$pending = ( x ( $_POST , 'pending' ) ? $_POST [ 'pending' ] : array () );
$users = ( x ( $_POST , 'user' ) ? $_POST [ 'user' ] : array () );
$blocked = ( x ( $_POST , 'blocked' ) ? $_POST [ 'blocked' ] : array () );
check_form_security_token_redirectOnErr ( '/admin/accounts' , 'admin_accounts' );
// change to switch structure?
// account block/unblock button was submitted
2018-01-30 01:43:11 +00:00
if ( x ( $_POST , 'page_accounts_block' )) {
2016-09-06 04:00:00 +00:00
for ( $i = 0 ; $i < count ( $users ); $i ++ ) {
// if account is blocked remove blocked bit-flag, otherwise add blocked bit-flag
$op = ( $blocked [ $i ]) ? '& ~' : '| ' ;
q ( " UPDATE account SET account_flags = (account_flags $op %d) WHERE account_id = %d " ,
intval ( ACCOUNT_BLOCKED ),
intval ( $users [ $i ])
);
}
notice ( sprintf ( tt ( " %s account blocked/unblocked " , " %s account blocked/unblocked " , count ( $users )), count ( $users )) );
}
// account delete button was submitted
if ( x ( $_POST , 'page_accounts_delete' )) {
foreach ( $users as $uid ){
account_remove ( $uid , true , false );
}
notice ( sprintf ( tt ( " %s account deleted " , " %s accounts deleted " , count ( $users )), count ( $users )) );
}
// registration approved button was submitted
2018-01-30 01:43:11 +00:00
if ( x ( $_POST , 'page_accounts_approve' )) {
2016-09-06 04:00:00 +00:00
foreach ( $pending as $hash ) {
account_allow ( $hash );
}
}
// registration deny button was submitted
2018-01-30 01:43:11 +00:00
if ( x ( $_POST , 'page_accounts_deny' )) {
2016-09-06 04:00:00 +00:00
foreach ( $pending as $hash ) {
account_deny ( $hash );
}
}
goaway ( z_root () . '/admin/accounts' );
}
/**
* @ brief Generate accounts admin page and handle single item operations .
*
* This function generates the accounts / account admin page and handles the actions
* if an icon next to an entry was clicked . If several items were selected and
* the form was submitted it is handled by the function admin_page_accounts_post () .
*
* @ return string
*/
function get (){
if ( argc () > 2 ) {
$uid = argv ( 3 );
$account = q ( " SELECT * FROM account WHERE account_id = %d " ,
intval ( $uid )
);
if ( ! $account ) {
notice ( t ( 'Account not found' ) . EOL );
goaway ( z_root () . '/admin/accounts' );
}
check_form_security_token_redirectOnErr ( '/admin/accounts' , 'admin_accounts' , 't' );
switch ( argv ( 2 )){
case 'delete' :
// delete user
account_remove ( $uid , true , false );
notice ( sprintf ( t ( " Account '%s' deleted " ), $account [ 0 ][ 'account_email' ]) . EOL );
break ;
case 'block' :
q ( " UPDATE account SET account_flags = ( account_flags | %d ) WHERE account_id = %d " ,
intval ( ACCOUNT_BLOCKED ),
intval ( $uid )
);
notice ( sprintf ( t ( " Account '%s' blocked " ) , $account [ 0 ][ 'account_email' ]) . EOL );
break ;
case 'unblock' :
q ( " UPDATE account SET account_flags = ( account_flags & ~%d ) WHERE account_id = %d " ,
intval ( ACCOUNT_BLOCKED ),
intval ( $uid )
);
notice ( sprintf ( t ( " Account '%s' unblocked " ), $account [ 0 ][ 'account_email' ]) . EOL );
break ;
}
goaway ( z_root () . '/admin/accounts' );
}
/* get pending */
$pending = q ( " SELECT account.*, register.hash from account left join register on account_id = register.uid where (account_flags & %d )>0 " ,
intval ( ACCOUNT_PENDING )
);
/* get accounts */
$total = q ( " SELECT count(*) as total FROM account " );
if ( count ( $total )) {
\App :: set_pager_total ( $total [ 0 ][ 'total' ]);
\App :: set_pager_itemspage ( 100 );
}
$serviceclass = (( $_REQUEST [ 'class' ]) ? " and account_service_class = ' " . dbesc ( $_REQUEST [ 'class' ]) . " ' " : '' );
$key = (( $_REQUEST [ 'key' ]) ? dbesc ( $_REQUEST [ 'key' ]) : 'account_id' );
$dir = 'asc' ;
if ( array_key_exists ( 'dir' , $_REQUEST ))
$dir = (( intval ( $_REQUEST [ 'dir' ])) ? 'asc' : 'desc' );
$base = z_root () . '/admin/accounts?f=' ;
$odir = (( $dir === 'asc' ) ? '0' : '1' );
2018-03-17 20:52:56 +00:00
2016-10-09 23:31:04 +00:00
$users = q ( " SELECT account_id , account_email, account_lastlog, account_created, account_expires, account_service_class, ( account_flags & %d ) > 0 as blocked,
( SELECT % s FROM channel as ch WHERE ch . channel_account_id = ac . account_id and ch . channel_removed = 0 ) as channels FROM account as ac
2018-03-17 20:52:56 +00:00
where true $serviceclass and account_flags != % d order by $key $dir limit % d offset % d " ,
2016-09-06 04:00:00 +00:00
intval ( ACCOUNT_BLOCKED ),
db_concat ( 'ch.channel_address' , ' ' ),
2018-03-17 20:52:56 +00:00
intval ( ACCOUNT_BLOCKED | ACCOUNT_PENDING ),
2016-09-06 04:00:00 +00:00
intval ( \App :: $pager [ 'itemspage' ]),
intval ( \App :: $pager [ 'start' ])
);
// function _setup_users($e){
// $accounts = Array(
// t('Normal Account'),
// t('Soapbox Account'),
// t('Community/Celebrity Account'),
// t('Automatic Friend Account')
// );
// $e['page_flags'] = $accounts[$e['page-flags']];
// $e['register_date'] = relative_date($e['register_date']);
// $e['login_date'] = relative_date($e['login_date']);
// $e['lastitem_date'] = relative_date($e['lastitem_date']);
// return $e;
// }
// $users = array_map("_setup_users", $users);
$t = get_markup_template ( 'admin_accounts.tpl' );
$o = replace_macros ( $t , array (
// strings //
'$title' => t ( 'Administration' ),
'$page' => t ( 'Accounts' ),
'$submit' => t ( 'Submit' ),
'$select_all' => t ( 'select all' ),
'$h_pending' => t ( 'Registrations waiting for confirm' ),
'$th_pending' => array ( t ( 'Request date' ), t ( 'Email' ) ),
'$no_pending' => t ( 'No registrations.' ),
'$approve' => t ( 'Approve' ),
'$deny' => t ( 'Deny' ),
'$delete' => t ( 'Delete' ),
'$block' => t ( 'Block' ),
'$unblock' => t ( 'Unblock' ),
'$odir' => $odir ,
'$base' => $base ,
'$h_users' => t ( 'Accounts' ),
'$th_users' => array (
[ t ( 'ID' ), 'account_id' ],
[ t ( 'Email' ), 'account_email' ],
[ t ( 'All Channels' ), 'channels' ],
[ t ( 'Register date' ), 'account_created' ],
[ t ( 'Last login' ), 'account_lastlog' ],
[ t ( 'Expires' ), 'account_expires' ],
[ t ( 'Service Class' ), 'account_service_class' ] ),
'$confirm_delete_multi' => t ( 'Selected accounts will be deleted!\n\nEverything these accounts had posted on this site will be permanently deleted!\n\nAre you sure?' ),
'$confirm_delete' => t ( 'The account {0} will be deleted!\n\nEverything this account has posted on this site will be permanently deleted!\n\nAre you sure?' ),
'$form_security_token' => get_form_security_token ( " admin_accounts " ),
// values //
'$baseurl' => z_root (),
'$pending' => $pending ,
'$users' => $users ,
));
$o .= paginate ( $a );
return $o ;
}
2018-03-17 20:52:56 +00:00
}