2012-01-27 04:08:02 +00:00
< ? php
2017-04-30 04:07:00 +00:00
use Friendica\App ;
2017-08-26 06:04:21 +00:00
use Friendica\Core\System ;
2017-11-08 03:57:46 +00:00
use Friendica\Database\DBM ;
2017-04-30 04:07:00 +00:00
2018-01-13 04:29:49 +00:00
require_once 'mod/settings.php' ;
2014-09-17 09:00:34 +00:00
2018-01-13 04:29:49 +00:00
function delegate_init ( App $a )
{
2014-09-17 09:00:34 +00:00
return settings_init ( $a );
}
2018-01-13 04:29:49 +00:00
function delegate_content ( App $a )
{
if ( ! local_user ()) {
notice ( t ( 'Permission denied.' ) . EOL );
2012-01-27 04:08:02 +00:00
return ;
}
2016-12-20 16:43:46 +00:00
if ( $a -> argc > 2 && $a -> argv [ 1 ] === 'add' && intval ( $a -> argv [ 2 ])) {
2012-01-27 04:08:02 +00:00
// delegated admins can view but not change delegation permissions
2018-01-13 04:29:49 +00:00
if ( x ( $_SESSION , 'submanage' )) {
2017-08-26 07:32:10 +00:00
goaway ( System :: baseUrl () . '/delegate' );
2016-12-20 09:35:28 +00:00
}
2012-01-27 04:08:02 +00:00
2018-01-13 04:29:49 +00:00
$user_id = $a -> argv [ 2 ];
$user = dba :: selectFirst ( 'user' , [ 'nickname' ], [ 'uid' => $user_id ]);
if ( DBM :: is_result ( $user )) {
$condition = [
'uid' => local_user (),
'nurl' => normalise_link ( System :: baseUrl () . '/profile/' . $user [ 'nickname' ])
];
if ( dba :: exists ( 'contact' , $condition )) {
dba :: insert ( 'manage' , [ 'uid' => $user_id , 'mid' => local_user ()]);
2012-01-27 04:08:02 +00:00
}
}
2017-08-26 07:32:10 +00:00
goaway ( System :: baseUrl () . '/delegate' );
2012-01-27 04:08:02 +00:00
}
2016-12-20 16:43:46 +00:00
if ( $a -> argc > 2 && $a -> argv [ 1 ] === 'remove' && intval ( $a -> argv [ 2 ])) {
2012-01-27 04:08:02 +00:00
// delegated admins can view but not change delegation permissions
2018-01-13 04:29:49 +00:00
if ( x ( $_SESSION , 'submanage' )) {
2017-08-26 07:32:10 +00:00
goaway ( System :: baseUrl () . '/delegate' );
2016-12-20 09:35:28 +00:00
}
2012-01-27 04:08:02 +00:00
2018-01-13 04:29:49 +00:00
dba :: delete ( 'manage' , [ 'uid' => $a -> argv [ 2 ], 'mid' => local_user ()]);
2017-08-26 07:32:10 +00:00
goaway ( System :: baseUrl () . '/delegate' );
2012-01-27 04:08:02 +00:00
}
// These people can manage this account/page with full privilege
2018-01-13 04:29:49 +00:00
$full_managers = [];
2012-01-27 07:03:27 +00:00
$r = q ( " SELECT * FROM `user` WHERE `email` = '%s' AND `password` = '%s' " ,
2012-01-27 04:08:02 +00:00
dbesc ( $a -> user [ 'email' ]),
dbesc ( $a -> user [ 'password' ])
);
2018-01-13 04:29:49 +00:00
if ( DBM :: is_result ( $r )) {
2012-01-27 04:08:02 +00:00
$full_managers = $r ;
2018-01-13 04:29:49 +00:00
}
2012-01-27 04:08:02 +00:00
// find everybody that currently has delegated management to this account/page
2018-01-13 04:29:49 +00:00
$delegates = [];
$r = q ( " SELECT * FROM `user` WHERE `uid` IN (SELECT `uid` FROM `manage` WHERE `mid` = %d) " ,
2012-01-27 04:08:02 +00:00
intval ( local_user ())
);
2018-01-13 04:29:49 +00:00
if ( DBM :: is_result ( $r )) {
2012-01-27 04:08:02 +00:00
$delegates = $r ;
2018-01-13 04:29:49 +00:00
}
2012-01-27 04:08:02 +00:00
2018-01-13 04:29:49 +00:00
$uids = [];
foreach ( $full_managers as $rr ) {
$uids [] = $rr [ 'uid' ];
}
2012-01-27 04:08:02 +00:00
2018-01-13 04:29:49 +00:00
foreach ( $delegates as $rr ) {
$uids [] = $rr [ 'uid' ];
}
2012-01-27 04:08:02 +00:00
// find every contact who might be a candidate for delegation
2018-01-13 04:29:49 +00:00
$r = q ( " SELECT `nurl`
FROM `contact`
WHERE `self` = 0
AND SUBSTRING_INDEX ( `nurl` , '/' , 3 ) = '%s'
AND `uid` = % d
AND `network` = '%s' " ,
2017-08-26 07:32:10 +00:00
dbesc ( normalise_link ( System :: baseUrl ())),
2012-01-27 04:08:02 +00:00
intval ( local_user ()),
dbesc ( NETWORK_DFRN )
2017-01-09 12:12:54 +00:00
);
2018-01-13 04:29:49 +00:00
if ( ! DBM :: is_result ( $r )) {
notice ( t ( 'No potential page delegates located.' ) . EOL );
2012-01-27 04:08:02 +00:00
return ;
}
2018-01-13 04:29:49 +00:00
$nicknames = [];
foreach ( $r as $rr ) {
$nicknames [] = " ' " . dbesc ( basename ( $rr [ 'nurl' ])) . " ' " ;
2012-01-27 04:08:02 +00:00
}
2018-01-13 04:29:49 +00:00
$potentials = [];
2012-01-27 04:08:02 +00:00
2018-01-13 04:29:49 +00:00
$nicks = implode ( ',' , $nicknames );
2012-01-27 04:08:02 +00:00
// get user records for all potential page delegates who are not already delegates or managers
2018-01-13 04:29:49 +00:00
$r = q ( " SELECT `uid`, `username`, `nickname` FROM `user` WHERE `nickname` IN ( $nicks ) " );
if ( DBM :: is_result ( $r )) {
foreach ( $r as $rr ) {
if ( ! in_array ( $rr [ 'uid' ], $uids )) {
2012-01-27 04:08:02 +00:00
$potentials [] = $rr ;
2018-01-13 04:29:49 +00:00
}
}
}
2012-01-27 04:08:02 +00:00
2014-04-24 09:49:11 +00:00
settings_init ( $a );
2018-01-13 04:29:49 +00:00
$o = replace_macros ( get_markup_template ( 'delegate.tpl' ), [
2012-01-27 04:08:02 +00:00
'$header' => t ( 'Delegate Page Management' ),
2017-08-26 07:32:10 +00:00
'$base' => System :: baseUrl (),
2012-01-27 04:08:02 +00: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.' )
2018-01-13 04:29:49 +00:00
]);
2012-01-27 04:08:02 +00:00
return $o ;
2014-04-24 09:49:11 +00:00
}