2010-07-05 12:33:02 +02:00
< ? php
function group_add ( $uid , $name ) {
2010-07-13 08:08:07 +02:00
2010-07-05 12:33:02 +02:00
$ret = false ;
if ( x ( $uid ) && x ( $name )) {
$r = group_byname ( $uid , $name ); // check for dups
2011-09-18 15:20:18 +02:00
if ( $r !== false ) {
// This could be a problem.
// Let's assume we've just created a group which we once deleted
// all the old members are gone, but the group remains so we don't break any security
// access lists. What we're doing here is reviving the dead group, but old content which
// was restricted to this group may now be seen by the new group members.
$z = q ( " SELECT * FROM `group` WHERE `id` = %d LIMIT 1 " ,
intval ( $r )
);
if ( count ( $z ) && $z [ 0 ][ 'deleted' ]) {
$r = q ( " UPDATE `group` SET `deleted` = 0 WHERE `uid` = %d AND `name` = '%s' LIMIT 1 " ,
intval ( $uid ),
dbesc ( $name )
);
notice ( t ( 'A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name.' ) . EOL );
}
2010-07-05 12:33:02 +02:00
return true ;
2011-09-18 15:20:18 +02:00
}
2010-07-11 15:06:30 +02:00
$r = q ( " INSERT INTO `group` ( `uid`, `name` )
2010-07-05 12:33:02 +02:00
VALUES ( % d , '%s' ) " ,
intval ( $uid ),
dbesc ( $name )
);
$ret = $r ;
}
return $ret ;
}
function group_rmv ( $uid , $name ) {
$ret = false ;
if ( x ( $uid ) && x ( $name )) {
$r = q ( " SELECT * FROM `group` WHERE `uid` = %d AND `name` = '%s' LIMIT 1 " ,
intval ( $uid ),
dbesc ( $name )
2010-07-11 11:52:47 +02:00
);
2010-07-05 12:33:02 +02:00
if ( count ( $r ))
$group_id = $r [ 0 ][ 'id' ];
if ( ! $group_id )
return false ;
// remove all members
$r = q ( " DELETE FROM `group_member` WHERE `uid` = %d AND `gid` = %d " ,
intval ( $uid ),
intval ( $group_id )
);
// remove group
2010-08-11 13:14:47 +02:00
$r = q ( " UPDATE `group` SET `deleted` = 1 WHERE `uid` = %d AND `name` = '%s' LIMIT 1 " ,
2010-07-05 12:33:02 +02:00
intval ( $uid ),
dbesc ( $name )
);
$ret = $r ;
}
return $ret ;
}
function group_byname ( $uid , $name ) {
if (( ! $uid ) || ( ! strlen ( $name )))
return false ;
$r = q ( " SELECT * FROM `group` WHERE `uid` = %d AND `name` = '%s' LIMIT 1 " ,
intval ( $uid ),
dbesc ( $name )
);
if ( count ( $r ))
return $r [ 0 ][ 'id' ];
return false ;
}
function group_rmv_member ( $uid , $name , $member ) {
$gid = group_byname ( $uid , $name );
if ( ! $gid )
return false ;
if ( ! ( $uid && $gid && $member ))
return false ;
$r = q ( " DELETE FROM `group_member` WHERE `uid` = %d AND `gid` = %d AND `contact-id` = %d LIMIT 1 " ,
intval ( $uid ),
intval ( $gid ),
intval ( $member )
);
return $r ;
}
function group_add_member ( $uid , $name , $member ) {
$gid = group_byname ( $uid , $name );
if (( ! $gid ) || ( ! $uid ) || ( ! $member ))
return false ;
$r = q ( " SELECT * FROM `group_member` WHERE `uid` = %d AND `id` = %d AND `contact-id` = %d LIMIT 1 " ,
intval ( $uid ),
intval ( $gid ),
intval ( $member )
);
if ( count ( $r ))
return true ; // You might question this, but
// we indicate success because the group was in fact created
// -- It was just created at another time
if ( ! count ( $r ))
$r = q ( " INSERT INTO `group_member` (`uid`, `gid`, `contact-id`)
VALUES ( % d , % d , % d ) " ,
intval ( $uid ),
intval ( $gid ),
intval ( $member )
);
return $r ;
2010-07-11 11:52:47 +02:00
}
2010-07-13 08:08:07 +02:00
function group_get_members ( $gid ) {
$ret = array ();
if ( intval ( $gid )) {
$r = q ( " SELECT `group_member`.`contact-id`, `contact`.* FROM `group_member`
LEFT JOIN `contact` ON `contact` . `id` = `group_member` . `contact-id`
2011-04-12 10:31:55 +02:00
WHERE `gid` = % d AND `group_member` . `uid` = % d ORDER BY `contact` . `name` ASC " ,
2010-07-13 08:08:07 +02:00
intval ( $gid ),
2011-04-04 05:41:40 +02:00
intval ( local_user ())
2010-07-13 08:08:07 +02:00
);
if ( count ( $r ))
$ret = $r ;
}
return $ret ;
}
2011-04-04 05:41:40 +02:00
function group_public_members ( $gid ) {
$ret = 0 ;
if ( intval ( $gid )) {
$r = q ( " SELECT `contact`.`id` AS `contact-id` FROM `group_member`
LEFT JOIN `contact` ON `contact` . `id` = `group_member` . `contact-id`
2011-04-18 08:27:11 +02:00
WHERE `gid` = % d AND `group_member` . `uid` = % d
2011-09-14 00:26:47 +02:00
AND `contact` . `network` = '%s' AND `contact` . `notify` != '' " ,
2011-04-04 05:41:40 +02:00
intval ( $gid ),
2011-08-24 03:17:35 +02:00
intval ( local_user ()),
dbesc ( NETWORK_OSTATUS )
2011-04-04 05:41:40 +02:00
);
if ( count ( $r ))
$ret = count ( $r );
}
return $ret ;
}
2010-07-11 11:52:47 +02:00
2011-08-03 07:39:35 +02:00
function group_side ( $every = " contacts " , $each = " group " , $edit = false , $group_id = 0 , $cid = 0 ) {
2010-07-11 11:52:47 +02:00
2010-11-01 00:38:22 +01:00
$o = '' ;
2010-07-11 11:52:47 +02:00
if ( ! local_user ())
2010-11-01 00:38:22 +01:00
return '' ;
2010-07-28 04:27:14 +02:00
2010-11-01 00:38:22 +01:00
$createtext = t ( 'Create a new group' );
$linktext = t ( 'Everybody' );
2011-09-23 12:12:31 +02:00
$selected = (( $group_id == 0 ) ? ' group-selected' : '' );
2010-07-11 11:52:47 +02:00
$o .= <<< EOT
2011-09-25 20:20:19 +02:00
< div id = " group-sidebar " class = " widget " >
2010-07-11 11:52:47 +02:00
< h3 > Groups </ h3 >
< div id = " sidebar-group-list " >
2010-07-11 15:06:30 +02:00
< ul id = " sidebar-group-ul " >
2011-09-23 12:12:31 +02:00
< li class = " sidebar-group-li " >< a href = " $every " class = " sidebar-group-element $selected " > $linktext </ a ></ li >
2010-07-11 15:06:30 +02:00
2010-07-11 11:52:47 +02:00
EOT ;
2011-05-30 06:45:00 +02:00
$r = q ( " SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d ORDER BY `name` ASC " ,
2010-07-11 11:52:47 +02:00
intval ( $_SESSION [ 'uid' ])
);
2011-08-03 07:39:35 +02:00
if ( $cid ) {
$member_of = groups_containing ( local_user (), $cid );
}
2010-07-11 11:52:47 +02:00
if ( count ( $r )) {
2011-07-01 15:26:46 +02:00
foreach ( $r as $rr ) {
2011-09-23 12:12:31 +02:00
$selected = (( $group_id == $rr [ 'id' ]) ? ' group-selected' : '' );
2011-08-03 07:39:35 +02:00
$o .= ' <li class="sidebar-group-li">'
. (( $edit ) ? " <a href= \" group/ { $rr [ 'id' ] } \" title= \" " . t ( 'Edit' )
2011-11-11 04:53:13 +01:00
. " \" class= \" groupsideedit \" ><span class= \" icon small-pencil \" ></span></a> " : " " )
2011-08-11 06:06:35 +02:00
. (( $cid ) ? '<input type="checkbox" class="' . (( $selected ) ? 'ticked' : 'unticked' ) . '" onclick="contactgroupChangeMember(' . $rr [ 'id' ] . ',' . $cid . ');return true;" '
2011-08-03 07:39:35 +02:00
. (( in_array ( $rr [ 'id' ], $member_of )) ? ' checked="checked" ' : '' ) . '/>' : '' )
2011-09-23 12:12:31 +02:00
. " <a href= \" $each / { $rr [ 'id' ] } \" class= \" sidebar-group-element " . $selected . " \" > { $rr [ 'name' ] } </a></li> \r \n " ;
2011-07-01 15:26:46 +02:00
}
2010-07-11 11:52:47 +02:00
}
2011-07-02 11:47:01 +02:00
$o .= " </ul> \r \n </div> " ;
$o .= <<< EOT
< div id = " sidebar-new-group " >
< a href = " group/new " > $createtext </ a >
</ div >
</ div >
EOT ;
2010-07-11 11:52:47 +02:00
return $o ;
2010-07-15 08:04:10 +02:00
}
function expand_groups ( $a ) {
if ( ! ( is_array ( $a ) && count ( $a )))
return array ();
$groups = implode ( ',' , $a );
$groups = dbesc ( $groups );
$r = q ( " SELECT `contact-id` FROM `group_member` WHERE `gid` IN ( $groups ) " );
$ret = array ();
if ( count ( $r ))
foreach ( $r as $rr )
$ret [] = $rr [ 'contact-id' ];
return $ret ;
}
2011-06-01 04:24:26 +02:00
function member_of ( $c ) {
$r = q ( " SELECT `group`.`name`, `group`.`id` FROM `group` LEFT JOIN `group_member` ON `group_member`.`gid` = `group`.`id` WHERE `group_member`.`contact-id` = %d AND `group`.`deleted` = 0 ORDER BY `group`.`name` ASC " ,
intval ( $c )
);
return $r ;
}
2011-08-03 07:39:35 +02:00
function groups_containing ( $uid , $c ) {
$r = q ( " SELECT `gid` FROM `group_member` WHERE `uid` = %d AND `group_member`.`contact-id` = %d " ,
intval ( $uid ),
intval ( $c )
);
$ret = array ();
if ( count ( $r )) {
foreach ( $r as $rr )
$ret [] = $rr [ 'gid' ];
}
return $ret ;
}