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
/**
2011-12-14 17:17:48 -05:00
* Friendica admin
2011-06-13 06:52:29 -04:00
*/
2011-07-08 11:12:08 -04:00
require_once ( " include/remoteupdate.php " );
2012-04-18 03:24:47 -04:00
/**
* @ param App $a
*/
2011-06-13 12:03:06 -04:00
function admin_post ( & $a ){
2012-02-23 23:29:09 -05:00
2011-06-13 12:03:06 -04:00
if ( ! is_site_admin ()) {
2011-10-18 03:18:21 -04:00
return ;
2011-06-13 12:03:06 -04:00
}
2012-02-17 02:50:57 -05:00
2012-02-23 23:29:09 -05:00
// do not allow a page manager to access the admin panel at all.
2012-02-17 02:50:57 -05:00
if ( x ( $_SESSION , 'submanage' ) && intval ( $_SESSION [ 'submanage' ]))
return ;
2011-06-13 12:03:06 -04:00
2012-02-23 23:29:09 -05:00
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
}
}
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin/plugins/' . $a -> argv [ 2 ] );
2011-07-08 11:12:08 -04:00
return ; // NOTREACHED
2011-06-18 02:29:59 -04:00
break ;
2012-04-13 05:20:05 -04:00
case 'themes' :
$theme = $a -> argv [ 2 ];
if ( is_file ( " view/theme/ $theme /config.php " )){
require_once ( " view/theme/ $theme /config.php " );
if ( function_exists ( " theme_admin_post " )){
theme_admin_post ( $a );
}
}
info ( t ( 'Theme settings updated.' ));
if ( is_ajax ()) return ;
goaway ( $a -> get_baseurl ( true ) . '/admin/themes/' . $theme );
return ;
break ;
2011-06-14 05:54:14 -04:00
case 'logs' :
admin_page_logs_post ( $a );
break ;
2012-04-29 22:10:07 -04:00
case 'dbsync' :
admin_page_dbsync_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
}
}
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin' );
2011-06-13 12:03:06 -04:00
return ; // NOTREACHED
}
2011-06-13 06:52:29 -04:00
2012-04-18 03:24:47 -04:00
/**
* @ param App $a
* @ return string
*/
2011-06-13 06:52:29 -04:00
function admin_content ( & $a ) {
if ( ! is_site_admin ()) {
return login ( false );
}
2012-02-17 02:50:57 -05:00
if ( x ( $_SESSION , 'submanage' ) && intval ( $_SESSION [ 'submanage' ]))
2012-04-18 03:24:47 -04:00
return " " ;
2012-02-17 02:50:57 -05:00
2011-06-13 06:52:29 -04:00
/**
* Side bar links
*/
// array( url, name, extra css classes )
$aside = Array (
2012-03-15 00:20:20 -04:00
'site' => Array ( $a -> get_baseurl ( true ) . " /admin/site/ " , t ( " Site " ) , " site " ),
'users' => Array ( $a -> get_baseurl ( true ) . " /admin/users/ " , t ( " Users " ) , " users " ),
'plugins' => Array ( $a -> get_baseurl ( true ) . " /admin/plugins/ " , t ( " Plugins " ) , " plugins " ),
'themes' => Array ( $a -> get_baseurl ( true ) . " /admin/themes/ " , t ( " Themes " ) , " themes " ),
2012-04-29 22:10:07 -04:00
'dbsync' => Array ( $a -> get_baseurl ( true ) . " /admin/dbsync/ " , t ( 'DB updates' ), " dbsync " ),
2012-05-25 03:05:07 -04:00
//'update' => Array($a->get_baseurl(true)."/admin/update/", t("Software 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' ];
2012-03-15 00:20:20 -04:00
$aside [ 'plugins_admin' ][] = Array ( $a -> get_baseurl ( true ) . " /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
}
2012-03-15 00:20:20 -04:00
$aside [ 'logs' ] = Array ( $a -> get_baseurl ( true ) . " /admin/logs/ " , t ( " Logs " ), " logs " );
2011-06-13 06:52:29 -04:00
$t = get_markup_template ( " admin_aside.tpl " );
2012-05-22 06:44:03 -04:00
$a -> page [ 'aside' ] .= replace_macros ( $t , array (
2011-06-13 12:03:06 -04:00
'$admin' => $aside ,
2012-06-07 01:28:30 -04:00
'$admtxt' => t ( 'Admin' ),
'$plugadmtxt' => t ( 'Plugin Features' ),
'$logtxt' => t ( 'Logs' ),
2011-07-04 23:57:07 -04:00
'$h_pending' => t ( 'User registrations waiting for confirmation' ),
2012-03-15 00:20:20 -04:00
'$admurl' => $a -> get_baseurl ( true ) . " /admin/ "
2011-06-13 12:03:06 -04:00
));
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 ;
2012-02-23 23:29:09 -05:00
case 'themes' :
$o = admin_page_themes ( $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 ;
2012-04-29 22:10:07 -04:00
case 'dbsync' :
$o = admin_page_dbsync ( $a );
break ;
2011-07-08 11:12:08 -04:00
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 );
}
2012-04-13 05:20:05 -04:00
if ( is_ajax ()) {
echo $o ;
killme ();
2012-04-18 03:24:47 -04:00
return '' ;
2012-04-13 05:20:05 -04:00
} else {
return $o ;
}
2011-06-13 06:52:29 -04:00
}
/**
* Admin Summary Page
2012-04-18 03:24:47 -04:00
* @ param App $a
* @ return string
2011-06-13 06:52:29 -04:00
*/
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 ),
2012-07-06 01:30:13 -04:00
Array ( t ( 'Automatic Friend Account' ), 0 ),
Array ( t ( 'Blog Account' ), 0 ),
Array ( t ( 'Private Forum' ), 0 )
2011-06-13 06:52:29 -04:00
);
2012-05-22 06:44:03 -04:00
2011-06-13 06:52:29 -04:00
$users = 0 ;
2012-03-05 21:51:21 -05:00
foreach ( $r as $u ){ $accounts [ $u [ 'page-flags' ]][ 1 ] = $u [ 'count' ]; $users += $u [ 'count' ]; }
2012-07-06 01:30:13 -04:00
logger ( 'accounts: ' . print_r ( $accounts , true ), LOGGER_DATA );
2011-06-13 06:52:29 -04:00
$r = q ( " SELECT COUNT(id) as `count` FROM `register` " );
$pending = $r [ 0 ][ 'count' ];
2012-03-14 23:36:23 -04:00
2012-05-22 06:44:03 -04:00
$r = q ( " select count(*) as total from deliverq where 1 " );
$deliverq = (( $r ) ? $r [ 0 ][ 'total' ] : 0 );
$r = q ( " select count(*) as total from queue where 1 " );
$queue = (( $r ) ? $r [ 0 ][ 'total' ] : 0 );
// We can do better, but this is a quick queue status
$queues = array ( 'label' => t ( 'Message queues' ), 'deliverq' => $deliverq , 'queue' => $queue );
2011-06-13 06:52:29 -04:00
$t = get_markup_template ( " admin_summary.tpl " );
return replace_macros ( $t , array (
'$title' => t ( 'Administration' ),
'$page' => t ( 'Summary' ),
2012-05-22 06:44:03 -04:00
'$queues' => $queues ,
2011-06-13 06:52:29 -04:00
'$users' => Array ( t ( 'Registered users' ), $users ),
'$accounts' => $accounts ,
'$pending' => Array ( t ( 'Pending registrations' ), $pending ),
2011-11-24 02:17:26 -05:00
'$version' => Array ( t ( 'Version' ), FRIENDICA_VERSION ),
2011-06-13 06:52:29 -04:00
'$build' => get_config ( 'system' , 'build' ),
'$plugins' => Array ( t ( 'Active plugins' ), $a -> plugins )
));
}
2011-06-13 12:03:06 -04:00
/**
* Admin Site Page
2012-04-18 03:24:47 -04:00
* @ param App $a
2011-06-13 12:03:06 -04:00
*/
function admin_page_site_post ( & $a ){
if ( ! x ( $_POST , " page_site " )){
return ;
}
2012-08-25 17:03:16 -04:00
check_form_security_token_redirectOnErr ( '/admin/site' , 'admin_site' );
2012-04-18 03:24:47 -04:00
2012-08-25 17:03:16 -04:00
$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' ])) : '' );
$theme_mobile = (( x ( $_POST , 'theme_mobile' )) ? notags ( trim ( $_POST [ 'theme_mobile' ])) : '' );
2011-06-13 12:03:06 -04:00
$maximagesize = (( x ( $_POST , 'maximagesize' )) ? intval ( trim ( $_POST [ 'maximagesize' ])) : 0 );
2012-08-25 17:03:16 -04:00
$maximagelength = (( x ( $_POST , 'maximagelength' )) ? intval ( trim ( $_POST [ 'maximagelength' ])) : MAX_IMAGE_LENGTH );
$jpegimagequality = (( x ( $_POST , 'jpegimagequality' )) ? intval ( trim ( $_POST [ 'jpegimagequality' ])) : JPEG_QUALITY );
2011-06-16 06:05:35 -04:00
2012-08-25 17:03:16 -04:00
$register_policy = (( x ( $_POST , 'register_policy' )) ? intval ( trim ( $_POST [ 'register_policy' ])) : 0 );
$abandon_days = (( x ( $_POST , 'abandon_days' )) ? intval ( trim ( $_POST [ 'abandon_days' ])) : 0 );
2011-09-30 00:20:19 -04:00
2012-08-25 17:03:16 -04:00
$register_text = (( x ( $_POST , 'register_text' )) ? notags ( trim ( $_POST [ 'register_text' ])) : '' );
2011-06-16 06:05:35 -04:00
2012-08-25 17:03:16 -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 );
2011-06-13 12:03:06 -04:00
$global_directory = (( x ( $_POST , 'directory_submit_url' )) ? notags ( trim ( $_POST [ 'directory_submit_url' ])) : '' );
2012-08-25 17:03:16 -04:00
$thread_allow = (( x ( $_POST , 'thread_allow' )) ? True : False );
2012-09-13 22:11:07 -04:00
$newuser_private = (( x ( $_POST , 'newuser_private' )) ? True : False );
2012-08-25 17:03:16 -04:00
$no_multi_reg = (( x ( $_POST , 'no_multi_reg' )) ? True : False );
$no_openid = ! (( x ( $_POST , 'no_openid' )) ? True : False );
$no_regfullname = ! (( x ( $_POST , 'no_regfullname' )) ? True : False );
$no_utf = ! (( x ( $_POST , 'no_utf' )) ? True : False );
$no_community_page = ! (( x ( $_POST , 'no_community_page' )) ? True : False );
$verifyssl = (( x ( $_POST , 'verifyssl' )) ? True : False );
$proxyuser = (( x ( $_POST , 'proxyuser' )) ? notags ( trim ( $_POST [ 'proxyuser' ])) : '' );
$proxy = (( x ( $_POST , 'proxy' )) ? notags ( trim ( $_POST [ 'proxy' ])) : '' );
$timeout = (( x ( $_POST , 'timeout' )) ? intval ( trim ( $_POST [ 'timeout' ])) : 60 );
$delivery_interval = (( x ( $_POST , 'delivery_interval' )) ? intval ( trim ( $_POST [ 'delivery_interval' ])) : 0 );
$poll_interval = (( x ( $_POST , 'poll_interval' )) ? intval ( trim ( $_POST [ 'poll_interval' ])) : 0 );
$maxloadavg = (( x ( $_POST , 'maxloadavg' )) ? intval ( trim ( $_POST [ 'maxloadavg' ])) : 50 );
$dfrn_only = (( x ( $_POST , 'dfrn_only' )) ? True : False );
$ostatus_disabled = ! (( x ( $_POST , 'ostatus_disabled' )) ? True : False );
$diaspora_enabled = (( x ( $_POST , 'diaspora_enabled' )) ? True : False );
$ssl_policy = (( x ( $_POST , 'ssl_policy' )) ? intval ( $_POST [ 'ssl_policy' ]) : 0 );
2011-06-13 12:03:06 -04:00
2012-04-02 20:43:11 -04:00
if ( $ssl_policy != intval ( get_config ( 'system' , 'ssl_policy' ))) {
if ( $ssl_policy == SSL_POLICY_FULL ) {
q ( " update `contact` set
`url` = replace ( `url` , 'http:' , 'https:' ),
`photo` = replace ( `photo` , 'http:' , 'https:' ),
`thumb` = replace ( `thumb` , 'http:' , 'https:' ),
`micro` = replace ( `micro` , 'http:' , 'https:' ),
`request` = replace ( `request` , 'http:' , 'https:' ),
`notify` = replace ( `notify` , 'http:' , 'https:' ),
`poll` = replace ( `poll` , 'http:' , 'https:' ),
`confirm` = replace ( `confirm` , 'http:' , 'https:' ),
`poco` = replace ( `poco` , 'http:' , 'https:' )
where `self` = 1 "
);
2012-04-03 23:14:37 -04:00
q ( " update `profile` set
`photo` = replace ( `photo` , 'http:' , 'https:' ),
`thumb` = replace ( `thumb` , 'http:' , 'https:' )
where 1 "
);
2012-04-02 20:43:11 -04:00
}
elseif ( $ssl_policy == SSL_POLICY_SELFSIGN ) {
q ( " update `contact` set
`url` = replace ( `url` , 'https:' , 'http:' ),
`photo` = replace ( `photo` , 'https:' , 'http:' ),
`thumb` = replace ( `thumb` , 'https:' , 'http:' ),
`micro` = replace ( `micro` , 'https:' , 'http:' ),
`request` = replace ( `request` , 'https:' , 'http:' ),
`notify` = replace ( `notify` , 'https:' , 'http:' ),
`poll` = replace ( `poll` , 'https:' , 'http:' ),
`confirm` = replace ( `confirm` , 'https:' , 'http:' ),
`poco` = replace ( `poco` , 'https:' , 'http:' )
where `self` = 1 "
);
2012-04-03 23:14:37 -04:00
q ( " update `profile` set
`photo` = replace ( `photo` , 'https:' , 'http:' ),
`thumb` = replace ( `thumb` , 'https:' , 'http:' )
where 1 "
);
2012-04-02 20:43:11 -04:00
}
}
set_config ( 'system' , 'ssl_policy' , $ssl_policy );
2012-04-28 02:17:40 -04:00
set_config ( 'system' , 'delivery_interval' , $delivery_interval );
2012-05-07 07:21:54 -04:00
set_config ( 'system' , 'poll_interval' , $poll_interval );
2012-05-04 00:50:48 -04:00
set_config ( 'system' , 'maxloadavg' , $maxloadavg );
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 );
2012-09-06 19:24:34 -04:00
if ( $theme_mobile === '---' ) {
del_config ( 'system' , 'mobile-theme' );
} else {
set_config ( 'system' , 'mobile-theme' , $theme_mobile );
}
2011-06-13 12:03:06 -04:00
set_config ( 'system' , 'maximagesize' , $maximagesize );
2012-08-25 17:03:16 -04:00
set_config ( 'system' , 'max_image_length' , $maximagelength );
set_config ( 'system' , 'jpeg_quality' , $jpegimagequality );
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 );
}
2012-07-29 13:53:04 -04:00
set_config ( 'system' , 'thread_allow' , $thread_allow );
2012-09-14 02:01:10 -04:00
set_config ( 'system' , 'newuser_private' , $newuser_private );
2012-04-18 03:24:47 -04:00
2011-06-13 12:03:06 -04:00
set_config ( 'system' , 'block_extended_register' , $no_multi_reg );
set_config ( 'system' , 'no_openid' , $no_openid );
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 );
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin/site' );
2011-06-13 12:03:06 -04:00
return ; // NOTREACHED
}
2012-04-18 03:24:47 -04:00
/**
* @ param App $a
* @ return string
*/
2011-06-13 12:03:06 -04:00
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 ();
2012-08-15 04:16:42 -04:00
$theme_choices_mobile = array ();
2012-09-06 19:24:34 -04:00
$theme_choices_mobile [ " --- " ] = t ( " No special theme for mobile devices " );
2011-06-13 12:03:06 -04:00
$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 );
2012-09-06 19:24:34 -04:00
if ( file_exists ( $file . '/mobile' )) {
$theme_choices_mobile [ $f ] = $theme_name ;
}
else {
$theme_choices [ $f ] = $theme_name ;
}
2011-06-13 12:03:06 -04:00
}
}
/* Banner */
$banner = get_config ( 'system' , 'banner' );
if ( $banner == false )
2011-12-14 17:17:48 -05:00
$banner = '<a href="http://friendica.com"><img id="logo-img" src="images/friendica-32.png" alt="logo" /></a><span id="logo-text"><a href="http://friendica.com">Friendica</a></span>' ;
2011-07-04 23:57:07 -04:00
$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 " )
);
2012-03-14 23:36:23 -04:00
$ssl_choices = array (
SSL_POLICY_NONE => t ( " No SSL policy, links will track page SSL state " ),
SSL_POLICY_FULL => t ( " Force all links to use SSL " ),
SSL_POLICY_SELFSIGN => t ( " Self-signed certificate, use SSL for local links only (discouraged) " )
);
2012-03-17 05:26:52 -04:00
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' ),
2012-03-15 00:20:20 -04:00
'$baseurl' => $a -> get_baseurl ( true ),
2012-08-25 17:03:16 -04:00
// 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 ), " " ),
2012-08-25 17:03:16 -04:00
'$banner' => array ( 'banner' , t ( " Banner/Logo " ), $banner , " " ),
2011-06-13 12:03:06 -04:00
'$language' => array ( 'language' , t ( " System language " ), get_config ( 'system' , 'language' ), " " , $lang_choices ),
2012-08-25 17:03:16 -04:00
'$theme' => array ( 'theme' , t ( " System theme " ), get_config ( 'system' , 'theme' ), t ( " Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a> " ), $theme_choices ),
'$theme_mobile' => array ( 'theme_mobile' , t ( " Mobile system theme " ), get_config ( 'system' , 'mobile-theme' ), t ( " Theme for mobile devices " ), $theme_choices_mobile ),
'$ssl_policy' => array ( 'ssl_policy' , t ( " SSL link policy " ), ( string ) intval ( get_config ( 'system' , 'ssl_policy' )), t ( " Determines whether generated links should be forced to use SSL " ), $ssl_choices ),
2012-03-06 17:27:53 -05:00
'$maximagesize' => array ( 'maximagesize' , t ( " Maximum image size " ), get_config ( 'system' , 'maximagesize' ), t ( " Maximum size in bytes of uploaded images. Default is 0, which means no limits. " )),
2012-08-25 17:03:16 -04:00
'$maximagelength' => array ( 'maximagelength' , t ( " Maximum image length " ), get_config ( 'system' , 'max_image_length' ), t ( " Maximum length in pixels of the longest side of uploaded images. Default is -1, which means no limits. " )),
'$jpegimagequality' => array ( 'jpegimagequality' , t ( " JPEG image quality " ), get_config ( 'system' , 'jpeg_quality' ), t ( " Uploaded JPEGS will be saved at this quality setting [0-100]. Default is 100, which is full quality. " )),
2011-06-13 12:03:06 -04:00
2011-06-16 06:05:35 -04:00
'$register_policy' => array ( 'register_policy' , t ( " Register policy " ), $a -> config [ 'register_policy' ], " " , $register_choices ),
2012-05-21 19:40:11 -04:00
'$register_text' => array ( 'register_text' , t ( " Register text " ), htmlentities ( $a -> config [ 'register_text' ], ENT_QUOTES , 'UTF-8' ), t ( " Will be displayed prominently on the registration page. " )),
2012-08-25 17:03:16 -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.' )),
2012-03-06 17:27:53 -05:00
'$allowed_sites' => array ( 'allowed_sites' , t ( " Allowed friend domains " ), get_config ( 'system' , 'allowed_sites' ), t ( " 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' ), t ( " 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' ), t ( " 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' ), t ( " 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' ), t ( " URL to update the global directory. If this is not set, the global directory is completely unavailable to the application. " )),
2012-07-29 13:53:04 -04:00
'$thread_allow' => array ( 'thread_allow' , t ( " Allow threaded items " ), get_config ( 'system' , 'thread_allow' ), t ( " Allow infinite level threading for items on this site. " )),
2012-09-13 22:11:07 -04:00
'$newuser_private' => array ( 'newuser_private' , t ( " Private posts by default for new users " ), get_config ( 'system' , 'newuser_private' ), t ( " Set default post permissions for all new members to the default privacy group rather than public. " )),
2011-06-13 12:03:06 -04:00
2012-03-06 17:27:53 -05:00
'$no_multi_reg' => array ( 'no_multi_reg' , t ( " Block multiple registrations " ), get_config ( 'system' , 'block_extended_register' ), t ( " Disallow users to register additional accounts for use as pages. " )),
'$no_openid' => array ( 'no_openid' , t ( " OpenID support " ), ! get_config ( 'system' , 'no_openid' ), t ( " OpenID support for registration and logins. " )),
'$no_regfullname' => array ( 'no_regfullname' , t ( " Fullname check " ), ! get_config ( 'system' , 'no_regfullname' ), t ( " Force users to register with a space between firstname and lastname in Full name, as an antispam measure " )),
2012-08-25 17:03:16 -04:00
'$no_utf' => array ( 'no_utf' , t ( " UTF-8 Regular expressions " ), ! get_config ( 'system' , 'no_utf' ), t ( " Use PHP UTF8 regular expressions " )),
'$no_community_page' => array ( 'no_community_page' , t ( " Show Community Page " ), ! get_config ( 'system' , 'no_community_page' ), t ( " Display a Community page showing all recent public postings on this site. " )),
2012-09-14 09:04:25 -04:00
'$ostatus_disabled' => array ( 'ostatus_disabled' , t ( " Enable OStatus support " ), ! get_config ( 'system' , 'ostatus_disabled' ), t ( " 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. " )),
2012-08-25 17:03:16 -04:00
'$diaspora_enabled' => array ( 'diaspora_enabled' , t ( " Enable Diaspora support " ), get_config ( 'system' , 'diaspora_enabled' ), t ( " Provide built-in Diaspora network compatibility. " )),
'$dfrn_only' => array ( 'dfrn_only' , t ( 'Only allow Friendica contacts' ), get_config ( 'system' , 'dfrn_only' ), t ( " All contacts must use Friendica protocols. All other built-in communication protocols disabled. " )),
2012-03-06 17:27:53 -05:00
'$verifyssl' => array ( 'verifyssl' , t ( " Verify SSL " ), get_config ( 'system' , 'verifyssl' ), t ( " If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites. " )),
2011-06-13 12:03:06 -04:00
'$proxyuser' => array ( 'proxyuser' , t ( " Proxy user " ), get_config ( 'system' , 'proxyuser' ), " " ),
2012-08-25 17:03:16 -04:00
'$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 ), t ( " Value is in seconds. Set to 0 for unlimited (not recommended). " )),
'$delivery_interval' => array ( 'delivery_interval' , t ( " Delivery interval " ), ( x ( get_config ( 'system' , 'delivery_interval' )) ? get_config ( 'system' , 'delivery_interval' ) : 2 ), t ( " Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers. " )),
'$poll_interval' => array ( 'poll_interval' , t ( " Poll interval " ), ( x ( get_config ( 'system' , 'poll_interval' )) ? get_config ( 'system' , 'poll_interval' ) : 2 ), t ( " Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval. " )),
'$maxloadavg' => array ( 'maxloadavg' , t ( " Maximum Load Average " ), (( intval ( get_config ( 'system' , 'maxloadavg' )) > 0 ) ? get_config ( 'system' , 'maxloadavg' ) : 50 ), t ( " Maximum system load before delivery and poll processes are deferred - default 50. " )),
2012-04-18 03:24:47 -04:00
'$form_security_token' => get_form_security_token ( " admin_site " ),
2011-06-13 12:03:06 -04:00
));
}
2011-06-14 04:35:56 -04:00
2012-04-29 22:10:07 -04:00
function admin_page_dbsync ( & $a ) {
$o = '' ;
if ( $a -> argc > 3 && intval ( $a -> argv [ 3 ]) && $a -> argv [ 2 ] === 'mark' ) {
set_config ( 'database' , 'update_' . intval ( $a -> argv [ 3 ]), 'success' );
2012-07-23 18:57:40 -04:00
$curr = get_config ( 'system' , 'build' );
if ( intval ( $curr ) == intval ( $a -> argv [ 3 ]))
set_config ( 'system' , 'build' , intval ( $curr ) + 1 );
2012-04-29 22:10:07 -04:00
info ( t ( 'Update has been marked successful' ) . EOL );
goaway ( $a -> get_baseurl ( true ) . '/admin/dbsync' );
}
if ( $a -> argc > 2 && intval ( $a -> argv [ 2 ])) {
require_once ( 'update.php' );
$func = 'update_' . intval ( $a -> argv [ 2 ]);
if ( function_exists ( $func )) {
$retval = $func ();
if ( $retval === UPDATE_FAILED ) {
$o .= sprintf ( t ( 'Executing %s failed. Check system logs.' ), $func );
}
elseif ( $retval === UPDATE_SUCCESS ) {
$o .= sprintf ( t ( 'Update %s was successfully applied.' , $func ));
set_config ( 'database' , $func , 'success' );
}
else
$o .= sprintf ( t ( 'Update %s did not return a status. Unknown if it succeeded.' ), $func );
}
else
$o .= sprintf ( t ( 'Update function %s could not be found.' ), $func );
return $o ;
}
$failed = array ();
$r = q ( " select * from config where `cat` = 'database' " );
if ( count ( $r )) {
foreach ( $r as $rr ) {
$upd = intval ( substr ( $rr [ 'k' ], 7 ));
if ( $upd < 1139 || $rr [ 'v' ] === 'success' )
continue ;
$failed [] = $upd ;
}
}
if ( ! count ( $failed ))
return '<h3>' . t ( 'No failed updates.' ) . '</h3>' ;
$o = replace_macros ( get_markup_template ( 'failed_updates.tpl' ), array (
'$base' => $a -> get_baseurl ( true ),
'$banner' => t ( 'Failed Updates' ),
'$desc' => t ( 'This does not include updates prior to 1139, which did not return a status.' ),
'$mark' => t ( 'Mark success (if update was manually applied)' ),
'$apply' => t ( 'Attempt to execute this update step automatically' ),
'$failed' => $failed
));
return $o ;
}
2011-06-14 04:35:56 -04:00
/**
* Users admin page
2012-04-18 03:24:47 -04:00
*
* @ param App $a
2011-06-14 04:35:56 -04:00
*/
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 () );
2012-04-18 03:24:47 -04:00
check_form_security_token_redirectOnErr ( '/admin/users' , 'admin_users' );
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 )
);
}
2012-03-01 05:28:48 -05:00
notice ( sprintf ( tt ( " %s user blocked/unblocked " , " %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 );
}
}
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin/users' );
2011-06-16 08:56:43 -04:00
return ; // NOTREACHED
}
2012-04-18 03:24:47 -04:00
/**
* @ param App $a
* @ return string
*/
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 );
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin/users' );
2012-04-18 03:24:47 -04:00
return '' ; // NOTREACHED
2011-06-16 08:56:43 -04:00
}
switch ( $a -> argv [ 2 ]){
case " delete " : {
2012-04-18 03:24:47 -04:00
check_form_security_token_redirectOnErr ( '/admin/users' , 'admin_users' , 't' );
2011-06-16 08:56:43 -04:00
// delete user
require_once ( " include/Contact.php " );
user_remove ( $uid );
notice ( sprintf ( t ( " User '%s' deleted " ), $user [ 0 ][ 'username' ]) . EOL );
}; break ;
case " block " : {
2012-04-18 03:24:47 -04:00
check_form_security_token_redirectOnErr ( '/admin/users' , 'admin_users' , 't' );
2011-06-16 08:56:43 -04:00
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 ;
}
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin/users' );
2012-04-18 03:24:47 -04:00
return '' ; // NOTREACHED
2011-06-16 08:56:43 -04:00
}
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` ; " );
2012-03-01 05:28:48 -05:00
2011-06-16 06:05:35 -04:00
/* 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 );
}
2012-03-01 05:28:48 -05:00
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
2012-03-01 05:28:48 -05:00
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?' ),
2012-04-18 03:24:47 -04:00
'$form_security_token' => get_form_security_token ( " admin_users " ),
2011-06-16 06:05:35 -04:00
// values //
2012-03-15 00:20:20 -04:00
'$baseurl' => $a -> get_baseurl ( true ),
2011-06-16 06:05:35 -04:00
'$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
}
2012-04-18 03:24:47 -04:00
/**
2011-06-14 04:35:56 -04:00
* Plugins admin page
2012-04-18 03:24:47 -04:00
*
* @ param App $a
* @ return string
2011-06-14 04:35:56 -04:00
*/
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. " ) );
2012-04-18 03:24:47 -04:00
return '' ;
2011-06-14 05:16:27 -04:00
}
if ( x ( $_GET , " a " ) && $_GET [ 'a' ] == " t " ){
2012-04-18 03:36:48 -04:00
check_form_security_token_redirectOnErr ( '/admin/plugins' , 'admin_themes' , 't' );
2011-06-14 05:16:27 -04:00
// 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 ));
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin/plugins' );
2012-04-18 03:24:47 -04:00
return '' ; // NOTREACHED
2011-06-14 05:16:27 -04:00
}
// 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' ),
2012-03-15 00:20:20 -04:00
'$baseurl' => $a -> get_baseurl ( true ),
2011-06-14 05:16:27 -04:00
'$plugin' => $plugin ,
'$status' => $status ,
2011-06-14 08:21:43 -04:00
'$action' => $action ,
'$info' => get_plugin_info ( $plugin ),
2012-03-05 21:51:21 -05:00
'$str_author' => t ( 'Author: ' ),
'$str_maintainer' => t ( 'Maintainer: ' ),
2011-06-18 02:29:59 -04:00
'$admin_form' => $admin_form ,
2012-02-25 16:00:44 -05:00
'$function' => 'plugins' ,
2012-03-25 20:55:43 -04:00
'$screenshot' => '' ,
2012-04-18 03:36:48 -04:00
'$readme' => $readme ,
'$form_security_token' => get_form_security_token ( " admin_themes " ),
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' ),
2012-03-15 00:20:20 -04:00
'$baseurl' => $a -> get_baseurl ( true ),
2012-02-23 23:29:09 -05:00
'$function' => 'plugins' ,
2012-04-18 03:36:48 -04:00
'$plugins' => $plugins ,
'$form_security_token' => get_form_security_token ( " admin_themes " ),
2011-06-14 04:35:56 -04:00
));
}
2012-04-18 03:24:47 -04:00
/**
* @ param array $themes
* @ param string $th
* @ param int $result
*/
2012-02-23 23:29:09 -05:00
function toggle_theme ( & $themes , $th , & $result ) {
for ( $x = 0 ; $x < count ( $themes ); $x ++ ) {
if ( $themes [ $x ][ 'name' ] === $th ) {
if ( $themes [ $x ][ 'allowed' ]) {
$themes [ $x ][ 'allowed' ] = 0 ;
$result = 0 ;
}
else {
$themes [ $x ][ 'allowed' ] = 1 ;
$result = 1 ;
}
}
}
}
2012-04-18 03:24:47 -04:00
/**
* @ param array $themes
* @ param string $th
* @ return int
*/
2012-02-23 23:29:09 -05:00
function theme_status ( $themes , $th ) {
for ( $x = 0 ; $x < count ( $themes ); $x ++ ) {
if ( $themes [ $x ][ 'name' ] === $th ) {
if ( $themes [ $x ][ 'allowed' ]) {
return 1 ;
}
else {
return 0 ;
}
}
}
return 0 ;
}
2012-04-18 03:24:47 -04:00
/**
* @ param array $themes
* @ return string
*/
2012-02-23 23:29:09 -05:00
function rebuild_theme_table ( $themes ) {
$o = '' ;
if ( count ( $themes )) {
foreach ( $themes as $th ) {
if ( $th [ 'allowed' ]) {
if ( strlen ( $o ))
$o .= ',' ;
$o .= $th [ 'name' ];
}
}
}
return $o ;
}
2012-04-18 03:24:47 -04:00
/**
2012-02-23 23:29:09 -05:00
* Themes admin page
2012-04-18 03:24:47 -04:00
*
* @ param App $a
* @ return string
2012-02-23 23:29:09 -05:00
*/
function admin_page_themes ( & $a ){
$allowed_themes_str = get_config ( 'system' , 'allowed_themes' );
$allowed_themes_raw = explode ( ',' , $allowed_themes_str );
$allowed_themes = array ();
if ( count ( $allowed_themes_raw ))
foreach ( $allowed_themes_raw as $x )
if ( strlen ( trim ( $x )))
$allowed_themes [] = trim ( $x );
$themes = array ();
$files = glob ( 'view/theme/*' );
if ( $files ) {
foreach ( $files as $file ) {
$f = basename ( $file );
$is_experimental = intval ( file_exists ( $file . '/experimental' ));
2012-04-18 03:24:47 -04:00
$is_supported = 1 - ( intval ( file_exists ( $file . '/unsupported' ))); // Is not used yet
2012-02-23 23:29:09 -05:00
$is_allowed = intval ( in_array ( $f , $allowed_themes ));
$themes [] = array ( 'name' => $f , 'experimental' => $is_experimental , 'supported' => $is_supported , 'allowed' => $is_allowed );
}
}
if ( ! count ( $themes )) {
notice ( t ( 'No themes found.' ));
2012-04-18 03:24:47 -04:00
return '' ;
2012-02-23 23:29:09 -05:00
}
/**
* Single theme
*/
if ( $a -> argc == 3 ){
$theme = $a -> argv [ 2 ];
if ( ! is_dir ( " view/theme/ $theme " )){
notice ( t ( " Item not found. " ) );
2012-04-18 03:24:47 -04:00
return '' ;
2012-02-23 23:29:09 -05:00
}
if ( x ( $_GET , " a " ) && $_GET [ 'a' ] == " t " ){
2012-04-18 03:36:48 -04:00
check_form_security_token_redirectOnErr ( '/admin/themes' , 'admin_themes' , 't' );
2012-02-23 23:29:09 -05:00
// Toggle theme status
toggle_theme ( $themes , $theme , $result );
$s = rebuild_theme_table ( $themes );
if ( $result )
info ( sprintf ( 'Theme %s enabled.' , $theme ));
else
info ( sprintf ( 'Theme %s disabled.' , $theme ));
set_config ( 'system' , 'allowed_themes' , $s );
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin/themes' );
2012-04-18 03:24:47 -04:00
return '' ; // NOTREACHED
2012-02-23 23:29:09 -05:00
}
2012-02-26 07:17:02 -05:00
// display theme details
2012-02-23 23:29:09 -05:00
require_once ( 'library/markdown.php' );
if ( theme_status ( $themes , $theme )) {
$status = " on " ; $action = t ( " Disable " );
} else {
$status = " off " ; $action = t ( " Enable " );
}
$readme = Null ;
2012-04-13 05:20:05 -04:00
if ( is_file ( " view/theme/ $theme /README.md " )){
$readme = file_get_contents ( " view/theme/ $theme /README.md " );
2012-02-23 23:29:09 -05:00
$readme = Markdown ( $readme );
2012-04-13 05:20:05 -04:00
} else if ( is_file ( " view/theme/ $theme /README " )){
$readme = " <pre> " . file_get_contents ( " view/theme/ $theme /README " ) . " </pre> " ;
2012-02-23 23:29:09 -05:00
}
$admin_form = " " ;
2012-04-13 05:20:05 -04:00
if ( is_file ( " view/theme/ $theme /config.php " )){
require_once ( " view/theme/ $theme /config.php " );
if ( function_exists ( " theme_admin " )){
$admin_form = theme_admin ( $a );
}
}
2012-03-25 20:55:43 -04:00
$screenshot = array ( get_theme_screenshot ( $theme ), t ( 'Screenshot' ));
if ( ! stristr ( $screenshot [ 0 ], $theme ))
$screenshot = null ;
2012-02-23 23:29:09 -05:00
$t = get_markup_template ( " admin_plugins_details.tpl " );
return replace_macros ( $t , array (
'$title' => t ( 'Administration' ),
'$page' => t ( 'Themes' ),
'$toggle' => t ( 'Toggle' ),
'$settings' => t ( 'Settings' ),
2012-03-15 00:20:20 -04:00
'$baseurl' => $a -> get_baseurl ( true ),
2012-02-23 23:29:09 -05:00
'$plugin' => $theme ,
'$status' => $status ,
'$action' => $action ,
2012-02-25 03:30:14 -05:00
'$info' => get_theme_info ( $theme ),
2012-04-13 05:20:05 -04:00
'$function' => 'themes' ,
2012-02-23 23:29:09 -05:00
'$admin_form' => $admin_form ,
2012-03-05 21:51:21 -05:00
'$str_author' => t ( 'Author: ' ),
2012-04-13 05:20:05 -04:00
'$str_maintainer' => t ( 'Maintainer: ' ),
2012-03-25 20:55:43 -04:00
'$screenshot' => $screenshot ,
2012-04-18 03:36:48 -04:00
'$readme' => $readme ,
'$form_security_token' => get_form_security_token ( " admin_themes " ),
2012-02-23 23:29:09 -05:00
));
}
/**
2012-04-13 05:20:05 -04:00
* List themes
2012-02-23 23:29:09 -05:00
*/
$xthemes = array ();
if ( $themes ) {
foreach ( $themes as $th ) {
2012-02-25 03:30:14 -05:00
$xthemes [] = array ( $th [ 'name' ],(( $th [ 'allowed' ]) ? " on " : " off " ), get_theme_info ( $th [ 'name' ]));
2012-02-23 23:29:09 -05:00
}
}
$t = get_markup_template ( " admin_plugins.tpl " );
return replace_macros ( $t , array (
'$title' => t ( 'Administration' ),
'$page' => t ( 'Themes' ),
'$submit' => t ( 'Submit' ),
2012-03-15 00:20:20 -04:00
'$baseurl' => $a -> get_baseurl ( true ),
2012-02-23 23:29:09 -05:00
'$function' => 'themes' ,
2012-02-26 07:17:02 -05:00
'$plugins' => $xthemes ,
'$experimental' => t ( '[Experimental]' ),
2012-04-18 03:36:48 -04:00
'$unsupported' => t ( '[Unsupported]' ),
'$form_security_token' => get_form_security_token ( " admin_themes " ),
2012-02-23 23:29:09 -05:00
));
}
2011-06-14 05:54:14 -04:00
/**
* Logs admin page
2012-04-18 03:24:47 -04:00
*
* @ param App $a
2011-06-14 05:54:14 -04:00
*/
function admin_page_logs_post ( & $a ) {
if ( x ( $_POST , " page_logs " )) {
2012-04-18 03:24:47 -04:00
check_form_security_token_redirectOnErr ( '/admin/logs' , 'admin_logs' );
2011-06-14 05:54:14 -04:00
$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. " ) );
2012-03-15 00:20:20 -04:00
goaway ( $a -> get_baseurl ( true ) . '/admin/logs' );
2011-06-14 05:54:14 -04:00
return ; // NOTREACHED
}
2012-04-18 03:24:47 -04:00
/**
* @ param App $a
* @ return string
*/
2011-06-14 05:54:14 -04:00
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' );
$data = '' ;
2012-02-18 17:19:35 -05:00
if ( ! file_exists ( $f )) {
$data = t ( " Error trying to open <strong> $f </strong> log file. \r \n <br/>Check to see if file $f exist and is
readable . " );
}
else {
$fp = fopen ( $f , 'r' );
if ( ! $fp ) {
$data = t ( " Couldn't open <strong> $f </strong> log file. \r \n <br/>Check to see if file $f is readable. " );
}
else {
$fstat = fstat ( $fp );
$size = $fstat [ 'size' ];
if ( $size != 0 )
{
if ( $size > 5000000 || $size < 0 )
$size = 5000000 ;
$seek = fseek ( $fp , 0 - $size , SEEK_END );
if ( $seek === 0 ) {
$data = escape_tags ( fread ( $fp , $size ));
while ( ! feof ( $fp ))
$data .= escape_tags ( fread ( $fp , 4096 ));
}
}
fclose ( $fp );
}
}
2011-06-17 01:20:12 -04:00
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 ,
2012-03-15 00:20:20 -04:00
'$baseurl' => $a -> get_baseurl ( true ),
2011-06-14 05:54:14 -04:00
'$logname' => get_config ( 'system' , 'logfile' ),
// name, label, value, help string, extra data...
'$debugging' => array ( 'debugging' , t ( " Debugging " ), get_config ( 'system' , 'debugging' ), " " ),
2011-12-14 17:17:48 -05:00
'$logfile' => array ( 'logfile' , t ( " Log file " ), get_config ( 'system' , 'logfile' ), t ( " Must be writable by web server. Relative to your Friendica top-level directory. " )),
2011-06-14 05:54:14 -04:00
'$loglevel' => array ( 'loglevel' , t ( " Log level " ), get_config ( 'system' , 'loglevel' ), " " , $log_choices ),
2012-04-18 03:24:47 -04:00
'$form_security_token' => get_form_security_token ( " admin_logs " ),
2011-06-14 05:54:14 -04:00
));
}
2012-04-18 03:24:47 -04:00
/**
* @ param App $a
*/
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 ();
}
2012-04-18 03:24:47 -04:00
/**
* @ param App $a
* @ return string
*/
2011-07-08 11:12:08 -04:00
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 (
2012-03-15 00:20:20 -04:00
'$baseurl' => $a -> get_baseurl ( true ),
2011-07-08 11:12:08 -04:00
'$submit' => t ( " Update now " ),
'$close' => t ( " Close " ),
2011-11-24 02:17:26 -05:00
'$localversion' => FRIENDICA_VERSION ,
2011-07-08 11:12:08 -04:00
'$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' ], '' )
));
}