2012-01-27 05:08:02 +01:00
< ? php
2017-04-30 06:07:00 +02:00
use Friendica\App ;
2017-08-26 08:04:21 +02:00
use Friendica\Core\System ;
2017-04-30 06:07:00 +02:00
2014-09-17 11:00:34 +02:00
require_once ( 'mod/settings.php' );
2017-01-09 13:12:54 +01:00
function delegate_init ( App $a ) {
2014-09-17 11:00:34 +02:00
return settings_init ( $a );
}
2017-01-09 13:12:54 +01:00
function delegate_content ( App $a ) {
2012-01-27 05:08:02 +01:00
2016-12-20 11:56:34 +01:00
if ( ! local_user ()) {
2012-01-27 05:08:02 +01:00
notice ( t ( 'Permission denied.' ) . EOL );
return ;
}
2016-12-20 17:43:46 +01:00
if ( $a -> argc > 2 && $a -> argv [ 1 ] === 'add' && intval ( $a -> argv [ 2 ])) {
2012-01-27 05:08:02 +01:00
// delegated admins can view but not change delegation permissions
2016-12-20 10:35:28 +01:00
if ( x ( $_SESSION , 'submanage' ) && intval ( $_SESSION [ 'submanage' ])) {
2017-08-26 09:32:10 +02:00
goaway ( System :: baseUrl () . '/delegate' );
2016-12-20 10:35:28 +01:00
}
2012-01-27 05:08:02 +01:00
$id = $a -> argv [ 2 ];
2017-03-21 17:02:59 +01:00
$r = q ( " select `nickname` from user where uid = %d limit 1 " ,
2012-01-27 05:08:02 +01:00
intval ( $id )
);
2016-12-14 09:41:33 +01:00
if ( dbm :: is_result ( $r )) {
2017-03-21 17:02:59 +01:00
$r = q ( " select id from contact where uid = %d and nurl = '%s' limit 1 " ,
2012-01-27 05:08:02 +01:00
intval ( local_user ()),
2017-08-26 09:32:10 +02:00
dbesc ( normalise_link ( System :: baseUrl () . '/profile/' . $r [ 0 ][ 'nickname' ]))
2012-01-27 05:08:02 +01:00
);
2016-12-14 09:41:33 +01:00
if ( dbm :: is_result ( $r )) {
2017-09-15 21:41:30 +02:00
dba :: insert ( 'manage' , array ( 'uid' => $a -> argv [ 2 ], 'mid' => local_user ()));
2012-01-27 05:08:02 +01:00
}
}
2017-08-26 09:32:10 +02:00
goaway ( System :: baseUrl () . '/delegate' );
2012-01-27 05:08:02 +01:00
}
2016-12-20 17:43:46 +01:00
if ( $a -> argc > 2 && $a -> argv [ 1 ] === 'remove' && intval ( $a -> argv [ 2 ])) {
2012-01-27 05:08:02 +01:00
// delegated admins can view but not change delegation permissions
2016-12-20 10:35:28 +01:00
if ( x ( $_SESSION , 'submanage' ) && intval ( $_SESSION [ 'submanage' ])) {
2017-08-26 09:32:10 +02:00
goaway ( System :: baseUrl () . '/delegate' );
2016-12-20 10:35:28 +01:00
}
2012-01-27 05:08:02 +01:00
2016-12-19 14:26:13 +01:00
q ( " DELETE FROM `manage` WHERE `uid` = %d AND `mid` = %d LIMIT 1 " ,
2012-01-27 05:08:02 +01:00
intval ( $a -> argv [ 2 ]),
intval ( local_user ())
);
2017-08-26 09:32:10 +02:00
goaway ( System :: baseUrl () . '/delegate' );
2012-01-27 05:08:02 +01:00
}
$full_managers = array ();
// These people can manage this account/page with full privilege
2012-01-27 08:03:27 +01:00
$r = q ( " SELECT * FROM `user` WHERE `email` = '%s' AND `password` = '%s' " ,
2012-01-27 05:08:02 +01:00
dbesc ( $a -> user [ 'email' ]),
dbesc ( $a -> user [ 'password' ])
);
2017-03-21 17:02:59 +01:00
if ( dbm :: is_result ( $r ))
2012-01-27 05:08:02 +01:00
$full_managers = $r ;
$delegates = array ();
// find everybody that currently has delegated management to this account/page
2017-03-21 17:02:59 +01:00
$r = q ( " select * from user where uid in ( select uid from manage where mid = %d ) " ,
2012-01-27 05:08:02 +01:00
intval ( local_user ())
);
2017-03-21 17:02:59 +01:00
if ( dbm :: is_result ( $r ))
2012-01-27 05:08:02 +01:00
$delegates = $r ;
$uids = array ();
2017-03-21 17:02:59 +01:00
if ( count ( $full_managers ))
foreach ( $full_managers as $rr )
2012-01-27 05:08:02 +01:00
$uids [] = $rr [ 'uid' ];
2017-03-21 17:02:59 +01:00
if ( count ( $delegates ))
foreach ( $delegates as $rr )
2012-01-27 05:08:02 +01:00
$uids [] = $rr [ 'uid' ];
// find every contact who might be a candidate for delegation
2017-03-21 17:02:59 +01:00
$r = q ( " select nurl from contact where substring_index(contact.nurl,'/',3) = '%s'
and contact . uid = % d and contact . self = 0 and network = '%s' " ,
2017-08-26 09:32:10 +02:00
dbesc ( normalise_link ( System :: baseUrl ())),
2012-01-27 05:08:02 +01:00
intval ( local_user ()),
dbesc ( NETWORK_DFRN )
2017-01-09 13:12:54 +01:00
);
2012-01-27 05:08:02 +01:00
2016-12-20 10:10:33 +01:00
if ( ! dbm :: is_result ( $r )) {
2012-01-27 05:08:02 +01:00
notice ( t ( 'No potential page delegates located.' ) . EOL );
return ;
}
$nicknames = array ();
2016-12-14 09:41:33 +01:00
if ( dbm :: is_result ( $r )) {
2016-12-20 21:15:53 +01:00
foreach ( $r as $rr ) {
2012-01-27 05:08:02 +01:00
$nicknames [] = " ' " . dbesc ( basename ( $rr [ 'nurl' ])) . " ' " ;
}
}
$potentials = array ();
$nicks = implode ( ',' , $nicknames );
// get user records for all potential page delegates who are not already delegates or managers
2017-03-21 17:02:59 +01:00
$r = q ( " select `uid`, `username`, `nickname` from user where nickname in ( $nicks ) " );
2012-01-27 05:08:02 +01:00
2017-03-21 17:02:59 +01:00
if ( dbm :: is_result ( $r ))
foreach ( $r as $rr )
if ( ! in_array ( $rr [ 'uid' ], $uids ))
2012-01-27 05:08:02 +01:00
$potentials [] = $rr ;
2014-04-24 11:49:11 +02:00
require_once ( " mod/settings.php " );
settings_init ( $a );
2012-01-27 05:08:02 +01:00
$o = replace_macros ( get_markup_template ( 'delegate.tpl' ), array (
'$header' => t ( 'Delegate Page Management' ),
2017-08-26 09:32:10 +02:00
'$base' => System :: baseUrl (),
2012-01-27 05:08:02 +01:00
'$desc' => t ( 'Delegates are able to manage all aspects of this account/page except for basic account settings. Please do not delegate your personal account to anybody that you do not trust completely.' ),
'$head_managers' => t ( 'Existing Page Managers' ),
'$managers' => $full_managers ,
'$head_delegates' => t ( 'Existing Page Delegates' ),
'$delegates' => $delegates ,
'$head_potentials' => t ( 'Potential Delegates' ),
'$potentials' => $potentials ,
'$remove' => t ( 'Remove' ),
'$add' => t ( 'Add' ),
'$none' => t ( 'No entries.' )
));
return $o ;
2016-02-07 15:11:34 +01:00
2014-04-24 11:49:11 +02:00
}