2012-01-27 05:08:02 +01:00
< ? php
2018-01-21 19:33:59 +01:00
/**
* @ file mod / delegate . php
*/
2017-04-30 06:07:00 +02:00
use Friendica\App ;
2018-01-21 19:33:59 +01:00
use Friendica\Core\L10n ;
2017-08-26 08:04:21 +02:00
use Friendica\Core\System ;
2017-11-08 04:57:46 +01:00
use Friendica\Database\DBM ;
2017-04-30 06:07:00 +02:00
2018-01-13 05:29:49 +01:00
require_once 'mod/settings.php' ;
2014-09-17 11:00:34 +02:00
2018-01-13 05:29:49 +01:00
function delegate_init ( App $a )
{
2014-09-17 11:00:34 +02:00
return settings_init ( $a );
}
2018-01-13 05:29:49 +01:00
function delegate_content ( App $a )
{
if ( ! local_user ()) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'Permission denied.' ) . EOL );
2012-01-27 05:08:02 +01:00
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
2018-01-13 05:29:49 +01:00
if ( x ( $_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
2018-01-13 05:29:49 +01: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 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
2018-01-13 05:29:49 +01:00
if ( x ( $_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
2018-01-13 05:29:49 +01:00
dba :: delete ( 'manage' , [ 'uid' => $a -> argv [ 2 ], 'mid' => local_user ()]);
2017-08-26 09:32:10 +02:00
goaway ( System :: baseUrl () . '/delegate' );
2012-01-27 05:08:02 +01:00
}
// These people can manage this account/page with full privilege
2018-01-13 05:29:49 +01:00
$full_managers = [];
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' ])
);
2018-01-13 05:29:49 +01:00
if ( DBM :: is_result ( $r )) {
2012-01-27 05:08:02 +01:00
$full_managers = $r ;
2018-01-13 05:29:49 +01:00
}
2012-01-27 05:08:02 +01:00
// find everybody that currently has delegated management to this account/page
2018-01-13 05:29:49 +01:00
$delegates = [];
$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 ())
);
2018-01-13 05:29:49 +01:00
if ( DBM :: is_result ( $r )) {
2012-01-27 05:08:02 +01:00
$delegates = $r ;
2018-01-13 05:29:49 +01:00
}
2012-01-27 05:08:02 +01:00
2018-01-13 05:29:49 +01:00
$uids = [];
foreach ( $full_managers as $rr ) {
$uids [] = $rr [ 'uid' ];
}
2012-01-27 05:08:02 +01:00
2018-01-13 05:29:49 +01:00
foreach ( $delegates as $rr ) {
$uids [] = $rr [ 'uid' ];
}
2012-01-27 05:08:02 +01:00
// find every contact who might be a candidate for delegation
2018-01-13 05:29:49 +01: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 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
);
2018-01-13 05:29:49 +01:00
if ( ! DBM :: is_result ( $r )) {
2018-01-21 19:33:59 +01:00
notice ( L10n :: t ( 'No potential page delegates located.' ) . EOL );
2012-01-27 05:08:02 +01:00
return ;
}
2018-01-13 05:29:49 +01:00
$nicknames = [];
foreach ( $r as $rr ) {
$nicknames [] = " ' " . dbesc ( basename ( $rr [ 'nurl' ])) . " ' " ;
2012-01-27 05:08:02 +01:00
}
2018-01-13 05:29:49 +01:00
$potentials = [];
2012-01-27 05:08:02 +01:00
2018-01-13 05:29:49 +01:00
$nicks = implode ( ',' , $nicknames );
2012-01-27 05:08:02 +01:00
// get user records for all potential page delegates who are not already delegates or managers
2018-01-13 05:29:49 +01: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 05:08:02 +01:00
$potentials [] = $rr ;
2018-01-13 05:29:49 +01:00
}
}
}
2012-01-27 05:08:02 +01:00
2014-04-24 11:49:11 +02:00
settings_init ( $a );
2018-01-13 05:29:49 +01:00
$o = replace_macros ( get_markup_template ( 'delegate.tpl' ), [
2018-01-21 19:33:59 +01:00
'$header' => L10n :: t ( 'Delegate Page Management' ),
2017-08-26 09:32:10 +02:00
'$base' => System :: baseUrl (),
2018-01-21 19:33:59 +01:00
'$desc' => L10n :: 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' => L10n :: t ( 'Existing Page Managers' ),
2012-01-27 05:08:02 +01:00
'$managers' => $full_managers ,
2018-01-21 19:33:59 +01:00
'$head_delegates' => L10n :: t ( 'Existing Page Delegates' ),
2012-01-27 05:08:02 +01:00
'$delegates' => $delegates ,
2018-01-21 19:33:59 +01:00
'$head_potentials' => L10n :: t ( 'Potential Delegates' ),
2012-01-27 05:08:02 +01:00
'$potentials' => $potentials ,
2018-01-21 19:33:59 +01:00
'$remove' => L10n :: t ( 'Remove' ),
'$add' => L10n :: t ( 'Add' ),
'$none' => L10n :: t ( 'No entries.' )
2018-01-13 05:29:49 +01:00
]);
2012-01-27 05:08:02 +01:00
return $o ;
2014-04-24 11:49:11 +02:00
}