2015-08-23 22:38:18 +02:00
< ? php
require_once ( 'include/group.php' );
function group_post ( & $a ) {
if ( ! local_channel ()) {
notice ( t ( 'Permission denied.' ) . EOL );
return ;
}
if (( argc () == 2 ) && ( argv ( 1 ) === 'new' )) {
check_form_security_token_redirectOnErr ( '/group/new' , 'group_edit' );
$name = notags ( trim ( $_POST [ 'groupname' ]));
$public = intval ( $_POST [ 'public' ]);
$r = group_add ( local_channel (), $name , $public );
if ( $r ) {
2016-02-28 12:11:12 +01:00
info ( t ( 'Privacy group created.' ) . EOL );
2015-08-23 22:38:18 +02:00
$r = group_byname ( local_channel (), $name );
if ( $r )
2016-04-17 16:29:18 +02:00
goaway ( z_root () . '/group/' . $r );
2015-08-23 22:38:18 +02:00
}
else
2016-02-28 12:11:12 +01:00
notice ( t ( 'Could not create privacy group.' ) . EOL );
2016-04-17 16:29:18 +02:00
goaway ( z_root () . '/group' );
2015-08-23 22:38:18 +02:00
}
if (( argc () == 2 ) && ( intval ( argv ( 1 )))) {
check_form_security_token_redirectOnErr ( '/group' , 'group_edit' );
$r = q ( " SELECT * FROM `groups` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( argv ( 1 )),
intval ( local_channel ())
);
if ( ! $r ) {
2016-02-28 12:11:12 +01:00
notice ( t ( 'Privacy group not found.' ) . EOL );
2016-04-17 16:29:18 +02:00
goaway ( z_root () . '/connections' );
2015-08-23 22:38:18 +02:00
}
$group = $r [ 0 ];
$groupname = notags ( trim ( $_POST [ 'groupname' ]));
$public = intval ( $_POST [ 'public' ]);
if (( strlen ( $groupname )) && (( $groupname != $group [ 'name' ]) || ( $public != $group [ 'visible' ]))) {
$r = q ( " UPDATE `groups` SET `name` = '%s', visible = %d WHERE `uid` = %d AND `id` = %d " ,
dbesc ( $groupname ),
intval ( $public ),
intval ( local_channel ()),
intval ( $group [ 'id' ])
);
if ( $r )
2016-02-28 12:11:12 +01:00
info ( t ( 'Privacy group updated.' ) . EOL );
2015-08-23 22:38:18 +02:00
}
goaway ( z_root () . '/group/' . argv ( 1 ) . '/' . argv ( 2 ));
}
return ;
}
function group_content ( & $a ) {
$change = false ;
2016-04-17 16:29:18 +02:00
logger ( 'mod_group: ' . App :: $cmd , LOGGER_DEBUG );
2015-08-23 22:38:18 +02:00
if ( ! local_channel ()) {
notice ( t ( 'Permission denied' ) . EOL );
return ;
}
// Switch to text mode interface if we have more than 'n' contacts or group members
$switchtotext = get_pconfig ( local_channel (), 'system' , 'groupedit_image_limit' );
if ( $switchtotext === false )
$switchtotext = get_config ( 'system' , 'groupedit_image_limit' );
if ( $switchtotext === false )
$switchtotext = 400 ;
$tpl = get_markup_template ( 'group_edit.tpl' );
$context = array ( '$submit' => t ( 'Submit' ));
if (( argc () == 2 ) && ( argv ( 1 ) === 'new' )) {
return replace_macros ( $tpl , $context + array (
2016-02-28 12:11:12 +01:00
'$title' => t ( 'Create a group of channels.' ),
'$gname' => array ( 'groupname' , t ( 'Privacy group name: ' ), '' , '' ),
2015-08-23 22:38:18 +02:00
'$gid' => 'new' ,
'$public' => array ( 'public' , t ( 'Members are visible to other channels' ), false , '' ),
'$form_security_token' => get_form_security_token ( " group_edit " ),
));
}
if (( argc () == 3 ) && ( argv ( 1 ) === 'drop' )) {
check_form_security_token_redirectOnErr ( '/group' , 'group_drop' , 't' );
if ( intval ( argv ( 2 ))) {
$r = q ( " SELECT `name` FROM `groups` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
intval ( argv ( 2 )),
intval ( local_channel ())
);
if ( $r )
$result = group_rmv ( local_channel (), $r [ 0 ][ 'name' ]);
if ( $result )
2016-02-28 12:11:12 +01:00
info ( t ( 'Privacy group removed.' ) . EOL );
2015-08-23 22:38:18 +02:00
else
2016-02-28 12:11:12 +01:00
notice ( t ( 'Unable to remove privacy group.' ) . EOL );
2015-08-23 22:38:18 +02:00
}
2016-04-17 16:29:18 +02:00
goaway ( z_root () . '/group' );
2015-08-23 22:38:18 +02:00
// NOTREACHED
}
if (( argc () > 2 ) && intval ( argv ( 1 )) && argv ( 2 )) {
check_form_security_token_ForbiddenOnErr ( 'group_member_change' , 't' );
2016-03-20 08:06:33 +01:00
$r = q ( " SELECT abook_xchan from abook left join xchan on abook_xchan = xchan_hash where abook_xchan = '%s' and abook_channel = %d and xchan_deleted = 0 and abook_self = 0 and abook_blocked = 0 and abook_pending = 0 limit 1 " ,
2015-08-23 22:38:18 +02:00
dbesc ( base64url_decode ( argv ( 2 ))),
intval ( local_channel ())
);
if ( count ( $r ))
$change = base64url_decode ( argv ( 2 ));
}
if (( argc () > 1 ) && ( intval ( argv ( 1 )))) {
require_once ( 'include/acl_selectors.php' );
$r = q ( " SELECT * FROM `groups` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1 " ,
intval ( argv ( 1 )),
intval ( local_channel ())
);
if ( ! $r ) {
2016-02-28 12:11:12 +01:00
notice ( t ( 'Privacy group not found.' ) . EOL );
2016-04-17 16:29:18 +02:00
goaway ( z_root () . '/connections' );
2015-08-23 22:38:18 +02:00
}
$group = $r [ 0 ];
$members = group_get_members ( $group [ 'id' ]);
$preselected = array ();
if ( count ( $members )) {
foreach ( $members as $member )
if ( ! in_array ( $member [ 'xchan_hash' ], $preselected ))
$preselected [] = $member [ 'xchan_hash' ];
}
if ( $change ) {
if ( in_array ( $change , $preselected )) {
group_rmv_member ( local_channel (), $group [ 'name' ], $change );
}
else {
group_add_member ( local_channel (), $group [ 'name' ], $change );
}
$members = group_get_members ( $group [ 'id' ]);
$preselected = array ();
if ( count ( $members )) {
foreach ( $members as $member )
$preselected [] = $member [ 'xchan_hash' ];
}
}
$drop_tpl = get_markup_template ( 'group_drop.tpl' );
$drop_txt = replace_macros ( $drop_tpl , array (
'$id' => $group [ 'id' ],
'$delete' => t ( 'Delete' ),
'$form_security_token' => get_form_security_token ( " group_drop " ),
));
$context = $context + array (
2016-02-28 12:11:12 +01:00
'$title' => t ( 'Privacy group editor' ),
'$gname' => array ( 'groupname' , t ( 'Privacy group name: ' ), $group [ 'name' ], '' ),
2015-08-23 22:38:18 +02:00
'$gid' => $group [ 'id' ],
'$drop' => $drop_txt ,
'$public' => array ( 'public' , t ( 'Members are visible to other channels' ), $group [ 'visible' ], '' ),
'$form_security_token' => get_form_security_token ( 'group_edit' ),
);
}
if ( ! isset ( $group ))
return ;
$groupeditor = array (
'label_members' => t ( 'Members' ),
'members' => array (),
'label_contacts' => t ( 'All Connected Channels' ),
'contacts' => array (),
);
$sec_token = addslashes ( get_form_security_token ( 'group_member_change' ));
$textmode = (( $switchtotext && ( count ( $members ) > $switchtotext )) ? true : false );
foreach ( $members as $member ) {
if ( $member [ 'xchan_url' ]) {
$member [ 'archived' ] = ( intval ( $member [ 'abook_archived' ]) ? true : false );
$member [ 'click' ] = 'groupChangeMember(' . $group [ 'id' ] . ',\'' . base64url_encode ( $member [ 'xchan_hash' ]) . '\',\'' . $sec_token . '\'); return false;' ;
$groupeditor [ 'members' ][] = micropro ( $member , true , 'mpgroup' , $textmode );
}
else
group_rmv_member ( local_channel (), $group [ 'name' ], $member [ 'xchan_hash' ]);
}
2016-03-20 08:06:33 +01:00
$r = q ( " SELECT abook.*, xchan.* FROM `abook` left join xchan on abook_xchan = xchan_hash WHERE `abook_channel` = %d AND abook_self = 0 and abook_blocked = 0 and abook_pending = 0 and xchan_deleted = 0 order by xchan_name asc " ,
2015-08-23 22:38:18 +02:00
intval ( local_channel ())
);
if ( count ( $r )) {
$textmode = (( $switchtotext && ( count ( $r ) > $switchtotext )) ? true : false );
foreach ( $r as $member ) {
if ( ! in_array ( $member [ 'xchan_hash' ], $preselected )) {
$member [ 'archived' ] = ( intval ( $member [ 'abook_archived' ]) ? true : false );
$member [ 'click' ] = 'groupChangeMember(' . $group [ 'id' ] . ',\'' . base64url_encode ( $member [ 'xchan_hash' ]) . '\',\'' . $sec_token . '\'); return false;' ;
$groupeditor [ 'contacts' ][] = micropro ( $member , true , 'mpall' , $textmode );
}
}
}
$context [ '$groupeditor' ] = $groupeditor ;
$context [ '$desc' ] = t ( 'Click on a channel to add or remove.' );
if ( $change ) {
$tpl = get_markup_template ( 'groupeditor.tpl' );
echo replace_macros ( $tpl , $context );
killme ();
}
return replace_macros ( $tpl , $context );
}