2010-07-11 13:06:30 +00:00
< ? php
2012-12-30 23:28:13 +00:00
require_once ( 'include/group.php' );
2010-07-11 13:06:30 +00:00
function group_post ( & $a ) {
if ( ! local_user ()) {
2010-08-11 08:48:43 +00:00
notice ( t ( 'Permission denied.' ) . EOL );
2010-07-11 13:06:30 +00:00
return ;
}
2012-11-15 05:27:05 +00:00
if (( argc () == 2 ) && ( argv ( 1 ) === 'new' )) {
2012-03-18 15:44:33 +00:00
check_form_security_token_redirectOnErr ( '/group/new' , 'group_edit' );
2010-07-11 13:06:30 +00:00
$name = notags ( trim ( $_POST [ 'groupname' ]));
2013-08-08 00:51:10 +00:00
$public = intval ( $_POST [ 'public' ]);
$r = group_add ( local_user (), $name , $public );
2010-07-11 13:06:30 +00:00
if ( $r ) {
2012-11-03 09:34:12 +00:00
info ( t ( 'Collection created.' ) . EOL );
2010-10-18 21:34:59 +00:00
$r = group_byname ( local_user (), $name );
2010-07-11 13:06:30 +00:00
if ( $r )
goaway ( $a -> get_baseurl () . '/group/' . $r );
}
else
2012-11-03 09:34:12 +00:00
notice ( t ( 'Could not create collection.' ) . EOL );
2010-07-13 11:18:57 +00:00
goaway ( $a -> get_baseurl () . '/group' );
2012-11-03 09:34:12 +00:00
2010-07-11 13:06:30 +00:00
}
2012-11-15 05:27:05 +00:00
if (( argc () == 2 ) && ( intval ( argv ( 1 )))) {
2012-03-18 15:44:33 +00:00
check_form_security_token_redirectOnErr ( '/group' , 'group_edit' );
2013-12-23 02:37:39 +00:00
$r = q ( " SELECT * FROM `groups` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
2012-11-15 05:27:05 +00:00
intval ( argv ( 1 )),
2010-10-18 21:34:59 +00:00
intval ( local_user ())
2010-07-13 11:05:23 +00:00
);
2012-11-15 05:27:05 +00:00
if ( ! $r ) {
2012-11-03 09:34:12 +00:00
notice ( t ( 'Collection not found.' ) . EOL );
goaway ( $a -> get_baseurl () . '/connections' );
2010-07-13 11:05:23 +00:00
}
$group = $r [ 0 ];
$groupname = notags ( trim ( $_POST [ 'groupname' ]));
2013-08-08 00:51:10 +00:00
$public = intval ( $_POST [ 'public' ]);
2013-12-05 12:44:31 +00:00
if (( strlen ( $groupname )) && (( $groupname != $group [ 'name' ]) || ( $public != $group [ 'visible' ]))) {
2013-12-23 02:37:39 +00:00
$r = q ( " UPDATE `groups` SET `name` = '%s', visible = %d WHERE `uid` = %d AND `id` = %d LIMIT 1 " ,
2010-07-13 11:05:23 +00:00
dbesc ( $groupname ),
2013-08-08 00:51:10 +00:00
intval ( $public ),
2010-10-18 21:34:59 +00:00
intval ( local_user ()),
2010-07-13 11:05:23 +00:00
intval ( $group [ 'id' ])
);
2010-07-13 11:18:57 +00:00
if ( $r )
2013-12-05 12:44:31 +00:00
info ( t ( 'Collection updated.' ) . EOL );
2010-07-13 11:05:23 +00:00
}
2011-04-12 12:37:26 +00:00
2012-11-15 05:27:05 +00:00
goaway ( z_root () . '/group/' . argv ( 1 ) . '/' . argv ( 2 ));
2010-07-13 11:05:23 +00:00
}
2010-09-09 03:14:17 +00:00
return ;
2010-07-11 13:06:30 +00:00
}
function group_content ( & $a ) {
2012-03-18 15:44:33 +00:00
$change = false ;
2012-12-30 23:28:13 +00:00
logger ( 'mod_group: ' . $a -> cmd , LOGGER_DEBUG );
2012-03-18 15:44:33 +00:00
2010-07-11 13:06:30 +00:00
if ( ! local_user ()) {
2010-08-11 08:48:43 +00:00
notice ( t ( 'Permission denied' ) . EOL );
2010-07-11 13:06:30 +00:00
return ;
}
2012-02-22 00:59:57 +00:00
// Switch to text mode interface if we have more than 'n' contacts or group members
2011-06-30 03:42:16 +00:00
$switchtotext = get_pconfig ( local_user (), 'system' , 'groupedit_image_limit' );
if ( $switchtotext === false )
$switchtotext = get_config ( 'system' , 'groupedit_image_limit' );
if ( $switchtotext === false )
$switchtotext = 400 ;
2012-02-23 15:17:36 +00:00
$tpl = get_markup_template ( 'group_edit.tpl' );
$context = array ( '$submit' => t ( 'Submit' ));
2012-11-15 05:27:05 +00:00
if (( argc () == 2 ) && ( argv ( 1 ) === 'new' )) {
2012-02-23 15:17:36 +00:00
return replace_macros ( $tpl , $context + array (
2013-08-08 00:51:10 +00:00
'$title' => t ( 'Create a collection of channels.' ),
2012-11-03 09:34:12 +00:00
'$gname' => array ( 'groupname' , t ( 'Collection Name: ' ), '' , '' ),
2012-03-02 14:40:17 +00:00
'$gid' => 'new' ,
2013-08-08 00:51:10 +00:00
'$public' => array ( 'public' , t ( 'Members are visible to other channels' ), false , '' ),
2012-03-18 15:44:33 +00:00
'$form_security_token' => get_form_security_token ( " group_edit " ),
2012-02-23 15:17:36 +00:00
));
2010-07-13 06:08:07 +00:00
}
2010-08-11 11:14:47 +00:00
2012-11-15 05:27:05 +00:00
if (( argc () == 3 ) && ( argv ( 1 ) === 'drop' )) {
2012-03-18 15:44:33 +00:00
check_form_security_token_redirectOnErr ( '/group' , 'group_drop' , 't' );
2012-11-15 05:27:05 +00:00
if ( intval ( argv ( 2 ))) {
2013-12-23 02:37:39 +00:00
$r = q ( " SELECT `name` FROM `groups` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
2012-11-15 05:27:05 +00:00
intval ( argv ( 2 )),
2010-10-18 21:34:59 +00:00
intval ( local_user ())
2010-08-11 08:48:43 +00:00
);
2012-11-15 05:27:05 +00:00
if ( $r )
2010-10-18 21:34:59 +00:00
$result = group_rmv ( local_user (), $r [ 0 ][ 'name' ]);
2010-08-11 08:48:43 +00:00
if ( $result )
2012-11-03 09:34:12 +00:00
info ( t ( 'Collection removed.' ) . EOL );
2010-08-11 08:48:43 +00:00
else
2012-11-03 09:34:12 +00:00
notice ( t ( 'Unable to remove collection.' ) . EOL );
2010-08-11 08:48:43 +00:00
}
goaway ( $a -> get_baseurl () . '/group' );
2011-05-15 23:36:49 +00:00
// NOTREACHED
2010-08-11 08:48:43 +00:00
}
2010-07-13 09:26:28 +00:00
2012-11-15 04:55:05 +00:00
if (( argc () > 2 ) && intval ( argv ( 1 )) && argv ( 2 )) {
2012-12-30 23:28:13 +00:00
2012-03-18 15:44:33 +00:00
check_form_security_token_ForbiddenOnErr ( 'group_member_change' , 't' );
2012-11-15 04:55:05 +00:00
2014-02-07 20:28:39 +00:00
$r = q ( " SELECT abook_xchan from abook where abook_xchan = '%s' and abook_channel = %d and not (xchan_flags & %d) and not (abook_flags & %d) and not (abook_flags & %d) limit 1 " ,
2012-11-15 04:55:05 +00:00
dbesc ( argv ( 2 )),
intval ( local_user ()),
2014-02-07 20:28:39 +00:00
intval ( XCHAN_FLAGS_DELETED ),
2012-11-30 07:06:03 +00:00
intval ( ABOOK_FLAG_BLOCKED ),
intval ( ABOOK_FLAG_PENDING )
2011-04-12 12:37:26 +00:00
);
if ( count ( $r ))
2012-11-15 04:55:05 +00:00
$change = argv ( 2 );
2011-04-12 12:37:26 +00:00
}
2012-11-15 05:27:05 +00:00
if (( argc () > 1 ) && ( intval ( argv ( 1 )))) {
2010-07-13 09:26:28 +00:00
2010-11-16 05:02:59 +00:00
require_once ( 'include/acl_selectors.php' );
2013-12-23 02:37:39 +00:00
$r = q ( " SELECT * FROM `groups` WHERE `id` = %d AND `uid` = %d AND `deleted` = 0 LIMIT 1 " ,
2012-11-15 05:27:05 +00:00
intval ( argv ( 1 )),
2010-10-18 21:34:59 +00:00
intval ( local_user ())
2010-07-13 06:08:07 +00:00
);
2012-11-15 05:27:05 +00:00
if ( ! $r ) {
2012-11-03 09:34:12 +00:00
notice ( t ( 'Collection not found.' ) . EOL );
2013-02-02 19:03:01 +00:00
goaway ( $a -> get_baseurl () . '/connections' );
2010-07-13 06:08:07 +00:00
}
2010-07-13 09:26:28 +00:00
$group = $r [ 0 ];
2012-11-15 04:55:05 +00:00
2013-05-03 03:51:58 +00:00
2011-04-12 05:47:16 +00:00
$members = group_get_members ( $group [ 'id' ]);
2012-11-15 04:55:05 +00:00
2010-07-13 06:08:07 +00:00
$preselected = array ();
2011-04-12 05:47:16 +00:00
if ( count ( $members )) {
foreach ( $members as $member )
2013-05-03 03:51:58 +00:00
if ( ! in_array ( $member [ 'xchan_hash' ], $preselected ))
$preselected [] = $member [ 'xchan_hash' ];
2010-07-13 06:08:07 +00:00
}
2010-07-13 09:26:28 +00:00
2011-04-12 12:37:26 +00:00
if ( $change ) {
2012-11-15 04:55:05 +00:00
2011-04-12 12:37:26 +00:00
if ( in_array ( $change , $preselected )) {
group_rmv_member ( local_user (), $group [ 'name' ], $change );
}
else {
group_add_member ( local_user (), $group [ 'name' ], $change );
}
$members = group_get_members ( $group [ 'id' ]);
2012-11-15 04:55:05 +00:00
2011-04-12 12:37:26 +00:00
$preselected = array ();
if ( count ( $members )) {
foreach ( $members as $member )
2012-11-15 04:55:05 +00:00
$preselected [] = $member [ 'xchan_hash' ];
2011-04-12 12:37:26 +00:00
}
}
2011-05-11 11:37:13 +00:00
$drop_tpl = get_markup_template ( 'group_drop.tpl' );
2010-08-11 08:48:43 +00:00
$drop_txt = replace_macros ( $drop_tpl , array (
'$id' => $group [ 'id' ],
2012-03-18 15:44:33 +00:00
'$delete' => t ( 'Delete' ),
'$form_security_token' => get_form_security_token ( " group_drop " ),
2010-08-11 08:48:43 +00:00
));
2012-02-23 15:17:36 +00:00
$context = $context + array (
2012-11-03 09:34:12 +00:00
'$title' => t ( 'Collection Editor' ),
'$gname' => array ( 'groupname' , t ( 'Collection Name: ' ), $group [ 'name' ], '' ),
2010-07-13 09:26:28 +00:00
'$gid' => $group [ 'id' ],
2010-08-11 08:48:43 +00:00
'$drop' => $drop_txt ,
2013-08-08 00:51:10 +00:00
'$public' => array ( 'public' , t ( 'Members are visible to other channels' ), $group [ 'visible' ], '' ),
2012-03-18 15:44:33 +00:00
'$form_security_token' => get_form_security_token ( 'group_edit' ),
2012-02-23 15:17:36 +00:00
);
2010-07-13 09:26:28 +00:00
2010-07-13 06:08:07 +00:00
}
2011-04-12 05:47:16 +00:00
2011-05-15 23:36:49 +00:00
if ( ! isset ( $group ))
return ;
2012-02-23 15:17:36 +00:00
$groupeditor = array (
'label_members' => t ( 'Members' ),
'members' => array (),
2012-11-03 09:34:12 +00:00
'label_contacts' => t ( 'All Connected Channels' ),
2012-03-18 15:44:33 +00:00
'contacts' => array (),
2012-02-23 15:17:36 +00:00
);
2012-03-18 15:44:33 +00:00
$sec_token = addslashes ( get_form_security_token ( 'group_member_change' ));
2011-06-30 03:42:16 +00:00
$textmode = (( $switchtotext && ( count ( $members ) > $switchtotext )) ? true : false );
2011-04-12 05:47:16 +00:00
foreach ( $members as $member ) {
2012-11-15 04:55:05 +00:00
if ( $member [ 'xchan_url' ]) {
2013-01-21 04:58:06 +00:00
$member [ 'click' ] = 'groupChangeMember(' . $group [ 'id' ] . ',\'' . $member [ 'xchan_hash' ] . '\',\'' . $sec_token . '\'); return false;' ;
2012-02-23 15:17:36 +00:00
$groupeditor [ 'members' ][] = micropro ( $member , true , 'mpgroup' , $textmode );
2011-04-12 12:37:26 +00:00
}
else
2012-11-15 04:55:05 +00:00
group_rmv_member ( local_user (), $group [ 'name' ], $member [ 'xchan_hash' ]);
2011-04-12 05:47:16 +00:00
}
2011-04-12 08:31:55 +00:00
2014-02-07 20:28:39 +00:00
$r = q ( " SELECT abook.*, xchan.* FROM `abook` left join xchan on abook_xchan = xchan_hash WHERE `abook_channel` = %d AND not (abook_flags & %d) and not (xchan_flags & %d) and not (abook_flags & %d) order by xchan_name asc " ,
2012-11-15 04:55:05 +00:00
intval ( local_user ()),
intval ( ABOOK_FLAG_BLOCKED ),
2014-02-07 20:28:39 +00:00
intval ( XCHAN_FLAGS_DELETED ),
2012-11-30 07:06:03 +00:00
intval ( ABOOK_FLAG_PENDING )
2012-02-23 15:17:36 +00:00
);
2011-04-12 08:31:55 +00:00
2012-02-23 15:17:36 +00:00
if ( count ( $r )) {
$textmode = (( $switchtotext && ( count ( $r ) > $switchtotext )) ? true : false );
foreach ( $r as $member ) {
2012-11-15 04:55:05 +00:00
if ( ! in_array ( $member [ 'xchan_hash' ], $preselected )) {
2013-01-21 04:58:06 +00:00
$member [ 'click' ] = 'groupChangeMember(' . $group [ 'id' ] . ',\'' . $member [ 'xchan_hash' ] . '\',\'' . $sec_token . '\'); return false;' ;
2012-02-23 15:17:36 +00:00
$groupeditor [ 'contacts' ][] = micropro ( $member , true , 'mpall' , $textmode );
2011-04-12 08:31:55 +00:00
}
}
2012-02-23 15:17:36 +00:00
}
2011-04-12 08:31:55 +00:00
2012-02-23 15:17:36 +00:00
$context [ '$groupeditor' ] = $groupeditor ;
2012-10-27 10:54:44 +00:00
$context [ '$desc' ] = t ( 'Click on a channel to add or remove.' );
2011-04-12 05:47:16 +00:00
2011-04-12 12:37:26 +00:00
if ( $change ) {
2012-02-23 15:17:36 +00:00
$tpl = get_markup_template ( 'groupeditor.tpl' );
echo replace_macros ( $tpl , $context );
2011-04-12 12:37:26 +00:00
killme ();
}
2012-02-23 15:17:36 +00:00
return replace_macros ( $tpl , $context );
2010-07-11 13:06:30 +00:00
2011-04-12 12:37:26 +00:00
}