2011-06-13 06:52:29 -04:00
< ? php
2011-07-04 23:57:07 -04:00
2011-06-13 06:52:29 -04:00
/**
* Friendika admin
*/
2011-07-08 11:12:08 -04:00
require_once ( " include/remoteupdate.php " );
2011-06-13 06:52:29 -04:00
2011-06-13 12:03:06 -04:00
function admin_post ( & $a ){
if ( ! is_site_admin ()) {
2011-10-18 03:18:21 -04:00
return ;
2011-06-13 12:03:06 -04:00
}
// urls
if ( $a -> argc > 1 ){
switch ( $a -> argv [ 1 ]){
2011-06-14 05:54:14 -04:00
case 'site' :
2011-06-13 12:03:06 -04:00
admin_page_site_post ( $a );
break ;
2011-06-16 08:56:43 -04:00
case 'users' :
admin_page_users_post ( $a );
2011-06-18 02:29:59 -04:00
break ;
case 'plugins' :
if ( $a -> argc > 2 &&
is_file ( " addon/ " . $a -> argv [ 2 ] . " / " . $a -> argv [ 2 ] . " .php " )){
@ include_once ( " addon/ " . $a -> argv [ 2 ] . " / " . $a -> argv [ 2 ] . " .php " );
2011-06-19 09:43:10 -04:00
if ( function_exists ( $a -> argv [ 2 ] . '_plugin_admin_post' )) {
$func = $a -> argv [ 2 ] . '_plugin_admin_post' ;
$func ( $a );
2011-06-18 02:29:59 -04:00
}
}
goaway ( $a -> get_baseurl () . '/admin/plugins/' . $a -> argv [ 2 ] );
2011-07-08 11:12:08 -04:00
return ; // NOTREACHED
2011-06-18 02:29:59 -04:00
break ;
2011-06-14 05:54:14 -04:00
case 'logs' :
admin_page_logs_post ( $a );
break ;
2011-07-08 11:12:08 -04:00
case 'update' :
admin_page_remoteupdate_post ( $a );
break ;
2011-06-13 12:03:06 -04:00
}
}
goaway ( $a -> get_baseurl () . '/admin' );
return ; // NOTREACHED
}
2011-06-13 06:52:29 -04:00
function admin_content ( & $a ) {
if ( ! is_site_admin ()) {
return login ( false );
}
/**
* Side bar links
*/
// array( url, name, extra css classes )
$aside = Array (
'site' => Array ( $a -> get_baseurl () . " /admin/site/ " , t ( " Site " ) , " site " ),
'users' => Array ( $a -> get_baseurl () . " /admin/users/ " , t ( " Users " ) , " users " ),
2011-07-08 11:12:08 -04:00
'plugins' => Array ( $a -> get_baseurl () . " /admin/plugins/ " , t ( " Plugins " ) , " plugins " ),
'update' => Array ( $a -> get_baseurl () . " /admin/update/ " , t ( " Update " ) , " update " )
2011-06-13 06:52:29 -04:00
);
/* get plugins admin page */
2011-06-19 09:43:10 -04:00
$r = q ( " SELECT * FROM `addon` WHERE `plugin_admin`=1 " );
2011-06-13 06:52:29 -04:00
$aside [ 'plugins_admin' ] = Array ();
foreach ( $r as $h ){
2011-06-19 09:43:10 -04:00
$plugin = $h [ 'name' ];
2011-06-13 06:52:29 -04:00
$aside [ 'plugins_admin' ][] = Array ( $a -> get_baseurl () . " /admin/plugins/ " . $plugin , $plugin , " plugin " );
2011-06-18 02:29:59 -04:00
// temp plugins with admin
$a -> plugins_admin [] = $plugin ;
2011-06-13 06:52:29 -04:00
}
$aside [ 'logs' ] = Array ( $a -> get_baseurl () . " /admin/logs/ " , t ( " Logs " ), " logs " );
$t = get_markup_template ( " admin_aside.tpl " );
2011-06-13 12:03:06 -04:00
$a -> page [ 'aside' ] = replace_macros ( $t , array (
'$admin' => $aside ,
2011-07-04 23:57:07 -04:00
'$h_pending' => t ( 'User registrations waiting for confirmation' ),
2011-06-13 12:03:06 -04:00
'$admurl' => $a -> get_baseurl () . " /admin/ "
));
2011-06-13 06:52:29 -04:00
/**
* Page content
*/
$o = '' ;
// urls
if ( $a -> argc > 1 ){
switch ( $a -> argv [ 1 ]){
2011-06-14 04:35:56 -04:00
case 'site' :
2011-06-13 06:52:29 -04:00
$o = admin_page_site ( $a );
break ;
2011-06-14 04:35:56 -04:00
case 'users' :
$o = admin_page_users ( $a );
break ;
case 'plugins' :
$o = admin_page_plugins ( $a );
break ;
2011-06-14 05:54:14 -04:00
case 'logs' :
$o = admin_page_logs ( $a );
2011-07-08 11:12:08 -04:00
break ;
case 'update' :
$o = admin_page_remoteupdate ( $a );
break ;
2011-06-13 06:52:29 -04:00
default :
notice ( t ( " Item not found. " ) );
}
} else {
$o = admin_page_summary ( $a );
}
return $o ;
}
/**
* Admin Summary Page
*/
function admin_page_summary ( & $a ) {
$r = q ( " SELECT `page-flags`, COUNT(uid) as `count` FROM `user` GROUP BY `page-flags` " );
$accounts = Array (
Array ( t ( 'Normal Account' ), 0 ),
Array ( t ( 'Soapbox Account' ), 0 ),
Array ( t ( 'Community/Celebrity Account' ), 0 ),
Array ( t ( 'Automatic Friend Account' ), 0 )
);
$users = 0 ;
foreach ( $r as $u ){ $accounts [ $u [ 'page-flags' ]][ 1 ] = $u [ 'count' ]; $users += $u [ 'count' ]; }
$r = q ( " SELECT COUNT(id) as `count` FROM `register` " );
$pending = $r [ 0 ][ 'count' ];
$t = get_markup_template ( " admin_summary.tpl " );
return replace_macros ( $t , array (
'$title' => t ( 'Administration' ),
'$page' => t ( 'Summary' ),
'$users' => Array ( t ( 'Registered users' ), $users ),
'$accounts' => $accounts ,
'$pending' => Array ( t ( 'Pending registrations' ), $pending ),
'$version' => Array ( t ( 'Version' ), FRIENDIKA_VERSION ),
'$build' => get_config ( 'system' , 'build' ),
'$plugins' => Array ( t ( 'Active plugins' ), $a -> plugins )
));
}
2011-06-13 12:03:06 -04:00
/**
* Admin Site Page
*/
function admin_page_site_post ( & $a ){
if ( ! x ( $_POST , " page_site " )){
return ;
}
$sitename = (( x ( $_POST , 'sitename' )) ? notags ( trim ( $_POST [ 'sitename' ])) : '' );
$banner = (( x ( $_POST , 'banner' )) ? trim ( $_POST [ 'banner' ]) : false );
$language = (( x ( $_POST , 'language' )) ? notags ( trim ( $_POST [ 'language' ])) : '' );
$theme = (( x ( $_POST , 'theme' )) ? notags ( trim ( $_POST [ 'theme' ])) : '' );
$maximagesize = (( x ( $_POST , 'maximagesize' )) ? intval ( trim ( $_POST [ 'maximagesize' ])) : 0 );
2011-06-16 06:05:35 -04:00
$register_policy = (( x ( $_POST , 'register_policy' )) ? intval ( trim ( $_POST [ 'register_policy' ])) : 0 );
2011-09-30 00:20:19 -04:00
$abandon_days = (( x ( $_POST , 'abandon_days' )) ? intval ( trim ( $_POST [ 'abandon_days' ])) : 0 );
2011-06-16 06:05:35 -04:00
$register_text = (( x ( $_POST , 'register_text' )) ? notags ( trim ( $_POST [ 'register_text' ])) : '' );
2011-06-13 12:03:06 -04:00
$allowed_sites = (( x ( $_POST , 'allowed_sites' )) ? notags ( trim ( $_POST [ 'allowed_sites' ])) : '' );
$allowed_email = (( x ( $_POST , 'allowed_email' )) ? notags ( trim ( $_POST [ 'allowed_email' ])) : '' );
$block_public = (( x ( $_POST , 'block_public' )) ? True : False );
$force_publish = (( x ( $_POST , 'publish_all' )) ? True : False );
$global_directory = (( x ( $_POST , 'directory_submit_url' )) ? notags ( trim ( $_POST [ 'directory_submit_url' ])) : '' );
$no_multi_reg = (( x ( $_POST , 'no_multi_reg' )) ? True : False );
2011-06-18 02:29:59 -04:00
$no_openid = ! (( x ( $_POST , 'no_openid' )) ? True : False );
$no_gravatar = ! (( x ( $_POST , 'no_gravatar' )) ? True : False );
$no_regfullname = ! (( x ( $_POST , 'no_regfullname' )) ? True : False );
$no_utf = ! (( x ( $_POST , 'no_utf' )) ? True : False );
2011-07-04 23:57:07 -04:00
$no_community_page = ! (( x ( $_POST , 'no_community_page' )) ? True : False );
2011-06-13 12:03:06 -04:00
$verifyssl = (( x ( $_POST , 'verifyssl' )) ? True : False );
2011-08-12 07:05:20 -04:00
$proxyuser = (( x ( $_POST , 'proxyuser' )) ? notags ( trim ( $_POST [ 'proxyuser' ])) : '' );
$proxy = (( x ( $_POST , 'proxy' )) ? notags ( trim ( $_POST [ 'proxy' ])) : '' );
2011-06-13 12:29:14 -04:00
$timeout = (( x ( $_POST , 'timeout' )) ? intval ( trim ( $_POST [ 'timeout' ])) : 60 );
2011-07-07 21:25:56 -04:00
$dfrn_only = (( x ( $_POST , 'dfrn_only' )) ? True : False );
$ostatus_disabled = ! (( x ( $_POST , 'ostatus_disabled' )) ? True : False );
2011-08-22 21:52:02 -04:00
$diaspora_enabled = (( x ( $_POST , 'diaspora_enabled' )) ? True : False );
2011-06-13 12:03:06 -04:00
2011-06-16 06:05:35 -04:00
set_config ( 'config' , 'sitename' , $sitename );
2011-06-13 12:03:06 -04:00
if ( $banner == " " ){
// don't know why, but del_config doesn't work...
q ( " DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1 " ,
dbesc ( " system " ),
dbesc ( " banner " )
);
} else {
set_config ( 'system' , 'banner' , $banner );
}
set_config ( 'system' , 'language' , $language );
set_config ( 'system' , 'theme' , $theme );
set_config ( 'system' , 'maximagesize' , $maximagesize );
2011-06-16 06:05:35 -04:00
set_config ( 'config' , 'register_policy' , $register_policy );
2011-09-30 00:20:19 -04:00
set_config ( 'system' , 'account_abandon_days' , $abandon_days );
2011-06-16 06:05:35 -04:00
set_config ( 'config' , 'register_text' , $register_text );
2011-06-13 12:03:06 -04:00
set_config ( 'system' , 'allowed_sites' , $allowed_sites );
set_config ( 'system' , 'allowed_email' , $allowed_email );
set_config ( 'system' , 'block_public' , $block_public );
set_config ( 'system' , 'publish_all' , $force_publish );
if ( $global_directory == " " ){
// don't know why, but del_config doesn't work...
q ( " DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1 " ,
dbesc ( " system " ),
dbesc ( " directory_submit_url " )
);
} else {
set_config ( 'system' , 'directory_submit_url' , $global_directory );
}
set_config ( 'system' , 'directory_search_url' , $global_search_url );
set_config ( 'system' , 'block_extended_register' , $no_multi_reg );
set_config ( 'system' , 'no_openid' , $no_openid );
set_config ( 'system' , 'no_gravatar' , $no_gravatar );
set_config ( 'system' , 'no_regfullname' , $no_regfullname );
2011-07-04 23:57:07 -04:00
set_config ( 'system' , 'no_community_page' , $no_community_page );
2011-08-12 07:05:20 -04:00
set_config ( 'system' , 'no_utf' , $no_utf );
2011-06-13 12:03:06 -04:00
set_config ( 'system' , 'verifyssl' , $verifyssl );
set_config ( 'system' , 'proxyuser' , $proxyuser );
set_config ( 'system' , 'proxy' , $proxy );
set_config ( 'system' , 'curl_timeout' , $timeout );
2011-07-07 21:25:56 -04:00
set_config ( 'system' , 'dfrn_only' , $dfrn_only );
set_config ( 'system' , 'ostatus_disabled' , $ostatus_disabled );
2011-08-22 21:52:02 -04:00
set_config ( 'system' , 'diaspora_enabled' , $diaspora_enabled );
2011-06-13 12:03:06 -04:00
2011-06-18 02:29:59 -04:00
info ( t ( 'Site settings updated.' ) . EOL );
2011-06-13 12:03:06 -04:00
goaway ( $a -> get_baseurl () . '/admin/site' );
return ; // NOTREACHED
}
function admin_page_site ( & $a ) {
/* Installed langs */
$lang_choices = array ();
$langs = glob ( 'view/*/strings.php' );
if ( is_array ( $langs ) && count ( $langs )) {
if ( ! in_array ( 'view/en/strings.php' , $langs ))
$langs [] = 'view/en/' ;
asort ( $langs );
foreach ( $langs as $l ) {
$t = explode ( " / " , $l );
$lang_choices [ $t [ 1 ]] = $t [ 1 ];
}
}
/* Installed themes */
$theme_choices = array ();
$files = glob ( 'view/theme/*' );
if ( $files ) {
foreach ( $files as $file ) {
$f = basename ( $file );
$theme_name = (( file_exists ( $file . '/experimental' )) ? sprintf ( " %s - \x28 Experimental \x29 " , $f ) : $f );
$theme_choices [ $f ] = $theme_name ;
}
}
/* Banner */
$banner = get_config ( 'system' , 'banner' );
if ( $banner == false )
2011-07-04 23:57:07 -04:00
$banner = '<a href="http://project.friendika.com"><img id="logo-img" src="images/friendika-32.png" alt="logo" /></a><span id="logo-text"><a href="http://project.friendika.com">Friendika</a></span>' ;
$banner = htmlspecialchars ( $banner );
2011-06-13 12:03:06 -04:00
//echo "<pre>"; var_dump($lang_choices); die("</pre>");
2011-06-16 06:05:35 -04:00
/* Register policy */
$register_choices = Array (
REGISTER_CLOSED => t ( " Closed " ),
2011-07-04 23:57:07 -04:00
REGISTER_APPROVE => t ( " Requires approval " ),
2011-06-16 06:05:35 -04:00
REGISTER_OPEN => t ( " Open " )
);
2011-06-13 12:03:06 -04:00
$t = get_markup_template ( " admin_site.tpl " );
return replace_macros ( $t , array (
'$title' => t ( 'Administration' ),
'$page' => t ( 'Site' ),
'$submit' => t ( 'Submit' ),
2011-06-18 02:29:59 -04:00
'$registration' => t ( 'Registration' ),
'$upload' => t ( 'File upload' ),
2011-07-04 23:57:07 -04:00
'$corporate' => t ( 'Policies' ),
2011-06-18 02:29:59 -04:00
'$advanced' => t ( 'Advanced' ),
2011-06-13 12:03:06 -04:00
'$baseurl' => $a -> get_baseurl (),
// name, label, value, help string, extra data...
2011-07-04 23:57:07 -04:00
'$sitename' => array ( 'sitename' , t ( " Site name " ), htmlentities ( $a -> config [ 'sitename' ], ENT_QUOTES ), " " ),
2011-06-13 12:03:06 -04:00
'$banner' => array ( 'banner' , t ( " Banner/Logo " ), $banner , " " ),
'$language' => array ( 'language' , t ( " System language " ), get_config ( 'system' , 'language' ), " " , $lang_choices ),
'$theme' => array ( 'theme' , t ( " System theme " ), get_config ( 'system' , 'theme' ), " Default system theme (which may be over-ridden by user profiles) " , $theme_choices ),
'$maximagesize' => array ( 'maximagesize' , t ( " Maximum image size " ), get_config ( 'system' , 'maximagesize' ), " Maximum size in bytes of uploaded images. Default is 0, which means no limits. " ),
2011-06-16 06:05:35 -04:00
'$register_policy' => array ( 'register_policy' , t ( " Register policy " ), $a -> config [ 'register_policy' ], " " , $register_choices ),
2011-07-04 23:57:07 -04:00
'$register_text' => array ( 'register_text' , t ( " Register text " ), htmlentities ( $a -> config [ 'register_text' ], ENT_QUOTES ), " Will be displayed prominently on the registration page. " ),
2011-09-30 00:20:19 -04:00
'$abandon_days' => array ( 'abandon_days' , t ( 'Accounts abandoned after x days' ), get_config ( 'system' , 'account_abandon_days' ), t ( 'Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.' )),
2011-06-13 12:03:06 -04:00
'$allowed_sites' => array ( 'allowed_sites' , t ( " Allowed friend domains " ), get_config ( 'system' , 'allowed_sites' ), " Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains " ),
'$allowed_email' => array ( 'allowed_email' , t ( " Allowed email domains " ), get_config ( 'system' , 'allowed_email' ), " Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains " ),
'$block_public' => array ( 'block_public' , t ( " Block public " ), get_config ( 'system' , 'block_public' ), " Check to block public access to all otherwise public personal pages on this site unless you are currently logged in. " ),
'$force_publish' => array ( 'publish_all' , t ( " Force publish " ), get_config ( 'system' , 'publish_all' ), " Check to force all profiles on this site to be listed in the site directory. " ),
'$global_directory' => array ( 'directory_submit_url' , t ( " Global directory update URL " ), get_config ( 'system' , 'directory_submit_url' ), " URL to update the global directory. If this is not set, the global directory is completely unavailable to the application. " ),
'$no_multi_reg' => array ( 'no_multi_reg' , t ( " Block multiple registrations " ), get_config ( 'system' , 'block_extended_register' ), " Disallow users to register additional accounts for use as pages. " ),
2011-06-18 02:29:59 -04:00
'$no_openid' => array ( 'no_openid' , t ( " OpenID support " ), ! get_config ( 'system' , 'no_openid' ), " OpenID support for registration and logins. " ),
'$no_gravatar' => array ( 'no_gravatar' , t ( " Gravatar support " ), ! get_config ( 'system' , 'no_gravatar' ), " Search new user's photo on Gravatar. " ),
2011-07-04 23:57:07 -04:00
'$no_regfullname' => array ( 'no_regfullname' , t ( " Fullname check " ), ! get_config ( 'system' , 'no_regfullname' ), " Force users to register with a space between firstname and lastname in Full name, as an antispam measure " ),
2011-08-12 07:05:20 -04:00
'$no_utf' => array ( 'no_utf' , t ( " UTF-8 Regular expressions " ), ! get_config ( 'system' , 'no_utf' ), " Use PHP UTF8 regular expressions " ),
2011-07-07 21:25:56 -04:00
'$no_community_page' => array ( 'no_community_page' , t ( " Show Community Page " ), ! get_config ( 'system' , 'no_community_page' ), " Display a Community page showing all recent public postings on this site. " ),
'$ostatus_disabled' => array ( 'ostatus_disabled' , t ( " Enable OStatus support " ), ! get_config ( 'system' , 'ostatus_disable' ), " Provide built-in OStatus \x28 identi.ca, status.net, etc. \x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed. " ),
2011-08-22 21:52:02 -04:00
'$diaspora_enabled' => array ( 'diaspora_enabled' , t ( " Enable Diaspora support " ), get_config ( 'system' , 'diaspora_enabled' ), " Provide built-in Diaspora network compatibility. " ),
2011-07-07 21:25:56 -04:00
'$dfrn_only' => array ( 'dfrn_only' , t ( 'Only allow Friendika contacts' ), get_config ( 'system' , 'dfrn_only' ), " All contacts must use Friendika protocols. All other built-in communication protocols disabled. " ),
2011-06-13 12:03:06 -04:00
'$verifyssl' => array ( 'verifyssl' , t ( " Verify SSL " ), get_config ( 'system' , 'verifyssl' ), " If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites. " ),
'$proxyuser' => array ( 'proxyuser' , t ( " Proxy user " ), get_config ( 'system' , 'proxyuser' ), " " ),
'$proxy' => array ( 'proxy' , t ( " Proxy URL " ), get_config ( 'system' , 'proxy' ), " " ),
'$timeout' => array ( 'timeout' , t ( " Network timeout " ), ( x ( get_config ( 'system' , 'curl_timeout' )) ? get_config ( 'system' , 'curl_timeout' ) : 60 ), " Value is in seconds. Set to 0 for unlimited (not recommended). " ),
));
}
2011-06-14 04:35:56 -04:00
/**
* Users admin page
*/
2011-06-16 08:56:43 -04:00
function admin_page_users_post ( & $a ){
2011-08-30 21:46:34 -04:00
$pending = ( x ( $_POST , 'pending' ) ? $_POST [ 'pending' ] : Array () );
2011-06-29 06:05:09 -04:00
$users = ( x ( $_POST , 'user' ) ? $_POST [ 'user' ] : Array () );
2011-06-16 08:56:43 -04:00
if ( x ( $_POST , 'page_users_block' )){
foreach ( $users as $uid ){
q ( " UPDATE `user` SET `blocked`=1-`blocked` WHERE `uid`=%s " ,
intval ( $uid )
);
}
2011-06-18 02:29:59 -04:00
notice ( sprintf ( tt ( " %s user blocked " , " %s users blocked/unblocked " , count ( $users )), count ( $users )) );
2011-06-16 08:56:43 -04:00
}
if ( x ( $_POST , 'page_users_delete' )){
require_once ( " include/Contact.php " );
foreach ( $users as $uid ){
user_remove ( $uid );
}
notice ( sprintf ( tt ( " %s user deleted " , " %s users deleted " , count ( $users )), count ( $users )) );
}
if ( x ( $_POST , 'page_users_approve' )){
2011-06-29 06:05:09 -04:00
require_once ( " mod/regmod.php " );
2011-06-16 08:56:43 -04:00
foreach ( $pending as $hash ){
user_allow ( $hash );
}
}
if ( x ( $_POST , 'page_users_deny' )){
2011-06-29 06:05:09 -04:00
require_once ( " mod/regmod.php " );
2011-06-16 08:56:43 -04:00
foreach ( $pending as $hash ){
user_deny ( $hash );
}
}
goaway ( $a -> get_baseurl () . '/admin/users' );
return ; // NOTREACHED
}
2011-06-14 04:35:56 -04:00
function admin_page_users ( & $a ){
2011-06-16 08:56:43 -04:00
if ( $a -> argc > 2 ) {
$uid = $a -> argv [ 3 ];
$user = q ( " SELECT * FROM `user` WHERE `uid`=%d " , intval ( $uid ));
if ( count ( $user ) == 0 ){
notice ( 'User not found' . EOL );
goaway ( $a -> get_baseurl () . '/admin/users' );
return ; // NOTREACHED
}
switch ( $a -> argv [ 2 ]){
case " delete " : {
// delete user
require_once ( " include/Contact.php " );
user_remove ( $uid );
notice ( sprintf ( t ( " User '%s' deleted " ), $user [ 0 ][ 'username' ]) . EOL );
}; break ;
case " block " : {
q ( " UPDATE `user` SET `blocked`=%d WHERE `uid`=%s " ,
intval ( 1 - $user [ 0 ][ 'blocked' ] ),
intval ( $uid )
);
2011-06-18 02:29:59 -04:00
notice ( sprintf ( ( $user [ 0 ][ 'blocked' ] ? t ( " User '%s' unblocked " ) : t ( " User '%s' blocked " )) , $user [ 0 ][ 'username' ]) . EOL );
2011-06-16 08:56:43 -04:00
}; break ;
}
goaway ( $a -> get_baseurl () . '/admin/users' );
return ; // NOTREACHED
}
2011-06-16 06:05:35 -04:00
/* get pending */
$pending = q ( " SELECT `register`.*, `contact`.`name`, `user`.`email`
FROM `register`
LEFT JOIN `contact` ON `register` . `uid` = `contact` . `uid`
LEFT JOIN `user` ON `register` . `uid` = `user` . `uid` ; " );
/* get users */
2011-06-17 19:21:11 -04:00
$total = q ( " SELECT count(*) as total FROM `user` where 1 " );
if ( count ( $total )) {
$a -> set_pager_total ( $total [ 0 ][ 'total' ]);
$a -> set_pager_itemspage ( 100 );
}
2011-06-29 10:06:32 -04:00
$users = q ( " SELECT `user` . * , `contact`.`name` , `contact`.`url` , `contact`.`micro`, `lastitem`.`lastitem_date`
FROM
( SELECT MAX ( `item` . `changed` ) as `lastitem_date` , `item` . `uid`
FROM `item`
WHERE `item` . `type` = 'wall'
GROUP BY `item` . `uid` ) AS `lastitem`
RIGHT OUTER JOIN `user` ON `user` . `uid` = `lastitem` . `uid` ,
`contact`
WHERE
`user` . `uid` = `contact` . `uid`
AND `user` . `verified` = 1
AND `contact` . `self` = 1
2011-06-17 19:21:11 -04:00
ORDER BY `contact` . `name` LIMIT % d , % d
" ,
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2011-06-16 06:05:35 -04:00
2011-06-16 08:56:43 -04:00
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' ]);
2011-06-29 10:06:32 -04:00
$e [ 'lastitem_date' ] = relative_date ( $e [ 'lastitem_date' ]);
2011-06-16 08:56:43 -04:00
return $e ;
}
$users = array_map ( " _setup_users " , $users );
2011-06-16 06:05:35 -04:00
$t = get_markup_template ( " admin_users.tpl " );
2011-06-17 19:21:11 -04:00
$o = replace_macros ( $t , array (
2011-06-16 06:05:35 -04:00
// strings //
'$title' => t ( 'Administration' ),
'$page' => t ( 'Users' ),
'$submit' => t ( 'Submit' ),
'$select_all' => t ( 'select all' ),
'$h_pending' => t ( 'User registrations waiting for confirm' ),
'$th_pending' => array ( t ( 'Request date' ), t ( 'Name' ), t ( 'Email' ) ),
'$no_pending' => t ( 'No registrations.' ),
'$approve' => t ( 'Approve' ),
'$deny' => t ( 'Deny' ),
'$delete' => t ( 'Delete' ),
'$block' => t ( 'Block' ),
2011-06-16 08:56:43 -04:00
'$unblock' => t ( 'Unblock' ),
2011-06-16 06:05:35 -04:00
'$h_users' => t ( 'Users' ),
2011-06-29 10:06:32 -04:00
'$th_users' => array ( t ( 'Name' ), t ( 'Email' ), t ( 'Register date' ), t ( 'Last login' ), t ( 'Last item' ), t ( 'Account' ) ),
2011-06-16 08:56:43 -04:00
'$confirm_delete_multi' => t ( 'Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?' ),
'$confirm_delete' => t ( 'The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?' ),
2011-06-16 06:05:35 -04:00
// values //
'$baseurl' => $a -> get_baseurl (),
'$pending' => $pending ,
'$users' => $users ,
));
2011-06-17 19:21:11 -04:00
$o .= paginate ( $a );
return $o ;
2011-06-14 04:35:56 -04:00
}
/*
* Plugins admin page
*/
function admin_page_plugins ( & $a ){
2011-06-14 05:16:27 -04:00
/**
* Single plugin
*/
if ( $a -> argc == 3 ){
$plugin = $a -> argv [ 2 ];
if ( ! is_file ( " addon/ $plugin / $plugin .php " )){
notice ( t ( " Item not found. " ) );
return ;
}
if ( x ( $_GET , " a " ) && $_GET [ 'a' ] == " t " ){
// Toggle plugin status
$idx = array_search ( $plugin , $a -> plugins );
2011-11-03 18:14:33 -04:00
if ( $idx !== false ){
2011-06-14 05:16:27 -04:00
unset ( $a -> plugins [ $idx ]);
uninstall_plugin ( $plugin );
2011-06-18 02:29:59 -04:00
info ( sprintf ( t ( " Plugin %s disabled. " ), $plugin ) );
2011-06-14 05:16:27 -04:00
} else {
$a -> plugins [] = $plugin ;
install_plugin ( $plugin );
2011-06-18 02:29:59 -04:00
info ( sprintf ( t ( " Plugin %s enabled. " ), $plugin ) );
2011-06-14 05:16:27 -04:00
}
set_config ( " system " , " addon " , implode ( " , " , $a -> plugins ));
goaway ( $a -> get_baseurl () . '/admin/plugins' );
return ; // NOTREACHED
}
// display plugin details
2011-06-14 08:21:43 -04:00
require_once ( 'library/markdown.php' );
2011-06-14 05:16:27 -04:00
if ( in_array ( $plugin , $a -> plugins )){
$status = " on " ; $action = t ( " Disable " );
} else {
$status = " off " ; $action = t ( " Enable " );
}
2011-06-14 08:21:43 -04:00
$readme = Null ;
if ( is_file ( " addon/ $plugin /README.md " )){
$readme = file_get_contents ( " addon/ $plugin /README.md " );
$readme = Markdown ( $readme );
} else if ( is_file ( " addon/ $plugin /README " )){
$readme = " <pre> " . file_get_contents ( " addon/ $plugin /README " ) . " </pre> " ;
}
2011-06-18 02:29:59 -04:00
$admin_form = " " ;
2011-08-31 10:18:37 -04:00
if ( is_array ( $a -> plugins_admin ) && in_array ( $plugin , $a -> plugins_admin )){
2011-06-19 09:43:10 -04:00
@ require_once ( " addon/ $plugin / $plugin .php " );
$func = $plugin . '_plugin_admin' ;
$func ( $a , $admin_form );
2011-06-18 02:29:59 -04:00
}
2011-06-14 05:16:27 -04:00
$t = get_markup_template ( " admin_plugins_details.tpl " );
return replace_macros ( $t , array (
'$title' => t ( 'Administration' ),
'$page' => t ( 'Plugins' ),
'$toggle' => t ( 'Toggle' ),
2011-06-18 02:52:51 -04:00
'$settings' => t ( 'Settings' ),
2011-06-14 05:16:27 -04:00
'$baseurl' => $a -> get_baseurl (),
'$plugin' => $plugin ,
'$status' => $status ,
2011-06-14 08:21:43 -04:00
'$action' => $action ,
'$info' => get_plugin_info ( $plugin ),
2011-06-18 02:29:59 -04:00
'$admin_form' => $admin_form ,
2011-06-14 08:21:43 -04:00
'$readme' => $readme
2011-06-14 05:16:27 -04:00
));
}
/**
* List plugins
*/
2011-06-14 04:35:56 -04:00
$plugins = array ();
$files = glob ( " addon/*/ " );
if ( $files ) {
foreach ( $files as $file ) {
if ( is_dir ( $file )){
list ( $tmp , $id ) = array_map ( " trim " , explode ( " / " , $file ));
2011-06-14 08:21:43 -04:00
$info = get_plugin_info ( $id );
$plugins [] = array ( $id , ( in_array ( $id , $a -> plugins ) ? " on " : " off " ) , $info );
2011-06-14 04:35:56 -04:00
}
}
}
$t = get_markup_template ( " admin_plugins.tpl " );
return replace_macros ( $t , array (
'$title' => t ( 'Administration' ),
'$page' => t ( 'Plugins' ),
'$submit' => t ( 'Submit' ),
'$baseurl' => $a -> get_baseurl (),
'$plugins' => $plugins
));
}
2011-06-14 05:54:14 -04:00
/**
* Logs admin page
*/
function admin_page_logs_post ( & $a ) {
if ( x ( $_POST , " page_logs " )) {
$logfile = (( x ( $_POST , 'logfile' )) ? notags ( trim ( $_POST [ 'logfile' ])) : '' );
$debugging = (( x ( $_POST , 'debugging' )) ? true : false );
$loglevel = (( x ( $_POST , 'loglevel' )) ? intval ( trim ( $_POST [ 'loglevel' ])) : 0 );
set_config ( 'system' , 'logfile' , $logfile );
set_config ( 'system' , 'debugging' , $debugging );
set_config ( 'system' , 'loglevel' , $loglevel );
}
2011-06-18 02:29:59 -04:00
info ( t ( " Log settings updated. " ) );
2011-06-14 05:54:14 -04:00
goaway ( $a -> get_baseurl () . '/admin/logs' );
return ; // NOTREACHED
}
function admin_page_logs ( & $a ){
$log_choices = Array (
LOGGER_NORMAL => 'Normal' ,
LOGGER_TRACE => 'Trace' ,
LOGGER_DEBUG => 'Debug' ,
LOGGER_DATA => 'Data' ,
LOGGER_ALL => 'All'
);
$t = get_markup_template ( " admin_logs.tpl " );
2011-06-17 01:20:12 -04:00
$f = get_config ( 'system' , 'logfile' );
$size = filesize ( $f );
2011-09-02 00:54:04 -04:00
if ( $size > 5000000 || $size < 0 )
2011-06-17 01:20:12 -04:00
$size = 5000000 ;
$data = '' ;
$fp = fopen ( $f , 'r' );
if ( $fp ) {
$seek = fseek ( $fp , 0 - $size , SEEK_END );
if ( $seek === 0 ) {
fgets ( $fp ); // throw away the first partial line
2011-06-20 19:10:03 -04:00
$data = escape_tags ( fread ( $fp , $size ));
2011-06-17 01:20:12 -04:00
while ( ! feof ( $fp ))
2011-06-20 19:10:03 -04:00
$data .= escape_tags ( fread ( $fp , 4096 ));
2011-06-17 01:20:12 -04:00
}
fclose ( $fp );
}
2011-06-14 05:54:14 -04:00
return replace_macros ( $t , array (
'$title' => t ( 'Administration' ),
'$page' => t ( 'Logs' ),
'$submit' => t ( 'Submit' ),
'$clear' => t ( 'Clear' ),
2011-06-17 01:20:12 -04:00
'$data' => $data ,
2011-06-14 05:54:14 -04:00
'$baseurl' => $a -> get_baseurl (),
'$logname' => get_config ( 'system' , 'logfile' ),
// name, label, value, help string, extra data...
'$debugging' => array ( 'debugging' , t ( " Debugging " ), get_config ( 'system' , 'debugging' ), " " ),
2011-06-20 19:10:03 -04:00
'$logfile' => array ( 'logfile' , t ( " Log file " ), get_config ( 'system' , 'logfile' ), t ( " Must be writable by web server. Relative to your Friendika index.php. " )),
2011-06-14 05:54:14 -04:00
'$loglevel' => array ( 'loglevel' , t ( " Log level " ), get_config ( 'system' , 'loglevel' ), " " , $log_choices ),
));
}
2011-07-08 11:12:08 -04:00
function admin_page_remoteupdate_post ( & $a ) {
// this function should be called via ajax post
if ( ! is_site_admin ()) {
2011-10-18 03:18:21 -04:00
return ;
2011-07-08 11:12:08 -04:00
}
if ( x ( $_POST , 'remotefile' ) && $_POST [ 'remotefile' ] != " " ){
$remotefile = $_POST [ 'remotefile' ];
$ftpdata = ( x ( $_POST [ 'ftphost' ]) ? $_POST : false );
doUpdate ( $remotefile , $ftpdata );
} else {
echo " No remote file to download. Abort! " ;
}
killme ();
}
function admin_page_remoteupdate ( & $a ) {
if ( ! is_site_admin ()) {
return login ( false );
}
$canwrite = canWeWrite ();
$canftp = function_exists ( 'ftp_connect' );
$needupdate = true ;
$u = checkUpdate ();
if ( ! is_array ( $u )){
$needupdate = false ;
$u = array ( '' , '' , '' );
}
$tpl = get_markup_template ( " admin_remoteupdate.tpl " );
return replace_macros ( $tpl , array (
'$baseurl' => $a -> get_baseurl (),
'$submit' => t ( " Update now " ),
'$close' => t ( " Close " ),
'$localversion' => FRIENDIKA_VERSION ,
'$remoteversion' => $u [ 1 ],
'$needupdate' => $needupdate ,
'$canwrite' => $canwrite ,
'$canftp' => $canftp ,
'$ftphost' => array ( 'ftphost' , t ( " FTP Host " ), '' , '' ),
'$ftppath' => array ( 'ftppath' , t ( " FTP Path " ), '/' , '' ),
'$ftpuser' => array ( 'ftpuser' , t ( " FTP User " ), '' , '' ),
'$ftppwd' => array ( 'ftppwd' , t ( " FTP Password " ), '' , '' ),
'$remotefile' => array ( 'remotefile' , '' , $u [ '2' ], '' )
));
}