cat_tbl = 'group_categories';
$this->gp_tbl = 'groups';
$this->gp_mem_tbl = 'group_members';
//We will using CB Commenting system as posts
//$this->gp_post_tbl = 'group_posts';
$this->gp_topic_tbl = 'group_topics';
$this->gp_invite_tbl = 'group_invitations';
$this->gp_vdo_tbl = 'group_videos';
//Adding Actions such Report, share,fav etc
$this->action = new cbactions();
$this->action->type = 'g';
$this->action->name = 'group';
$this->action->obj_class = 'cbgroup';
$this->action->check_func = 'group_exists';
$this->action->type_tbl = $this->gp_tbl;
$this->action->type_id_field = 'group_id';
if (isSectionEnabled('groups'))
$Cbucket->search_types['groups'] = "cbgroup";
}
function init()
{
register_object('g','cbgroup');
register_object('group','cbgroup');
}
/**
* Function used to check if the provided URL is taken or not
* @param = $url { URL of group provided by user }
*/
function group_url_exists($url) {
global $db;
$result = $db->count(tbl($this->gp_tbl), "*", " group_url='$url'");
if ($result[0] > 0)
return true;
else
return false;
}
/**
* Function used to get group details
* @param $ID { groupid }
*/
function get_group($id,$cond=NULL) {
global $db;
$gp_details = $db->select(tbl($this->gp_tbl), "*", "group_id='$id'");
if ($db->num_rows > 0) {
return $gp_details[0];
} else {
return false;
}
}
function get($id,$cond=NULL)
{
return $this->get_group($id,$cond);
}
function get_group_details($id) {
return $this->get_group($id);
}
function get_details($id) {
return $this->get_group($id);
}
/**
* Funtion used to get gorup details
* @param, $URL { group url }
*/
function get_group_with_url($url) {
global $db;
$gp_details = $db->select(tbl($this->gp_tbl), "*", "group_url='$url'");
if ($db->num_rows > 0) {
return $gp_details[0];
} else {
return false;
}
}
function get_group_details_with_url($id) {
return $this->get_group_with_url($id);
}
function get_details_with_url($id) {
return $this->get_group_with_url($id);
}
function group_details_url($id) {
return $this->get_group_with_url($id);
}
/**
* Function used to make user a member of group
* @param = $userid { ID of user who is going to Join Group }
* @param = $gpid { ID of group which is being joined }
*/
function join_group($gpid, $userid, $createFeed = true) {
global $db;
//Getting group details
$group = $this->get_group_details($gpid);
if (!$group)
e(lang("grp_exist_error"));
elseif (!$this->is_joinable($group, $userid, TRUE))
return false;
elseif (!$userid)
e(lang('group_join_login_err'));
else {
if ($group['group_privacy'] == 1 && $group['userid'] != $userid)
$active = 'no';
else
$active = 'yes';
$db->insert(tbl($this->gp_mem_tbl), array("group_id", "userid", "date_added", "active"), array($gpid, $userid, now(), $active));
//Count total members
$total_members = $this->total_members($gpid);
//Adding Feed
if ($createFeed)
addFeed(array('action' => 'join_group', 'object_id' => $gpid, 'object' => 'group', 'userid' => $userid));
//Update Stats
$db->update(tbl($this->gp_tbl), array("total_members"), array($total_members), "group_id='$gpid'");
e(lang('grp_join_msg_succ'), 'm');
}
}
/**
* Creating Group Required Fields
*/
function load_required_fields($default = NULL, $is_update = FALSE) {
if ($default == NULL)
$default = $_POST;
$gptitle = $default['group_name'];
$gpdescription = $default['group_description'];
if (is_array($default['category']))
$cat_array = array($default['category']);
else {
preg_match_all('/#([0-9]+)#/', $default['category'], $m);
$cat_array = array($m[1]);
}
$tags = $default['group_tags'];
$gpurl = $default['group_url'];
if (!$is_update)
$url_form = array(
'title' => lang('grp_url_title'),
'type' => 'textfield',
'name' => 'group_url',
'id' => 'group_url',
'value' => cleanForm($gpurl),
'hint_1' => '',
'hint_2' => lang('grp_url_msg'),
'db_field' => 'group_url',
'required' => 'yes',
'invalid_err' => lang('grp_url_error'),
'syntax_type' => 'field_text',
'function_error_msg' => lang('user_contains_disallow_err'),
'db_value_check_func' => 'group_url_exists',
'db_value_exists' => false,
'db_value_err' => lang('grp_url_error2'),
'min_length' => 3,
'max_length' => 18,
);
else
$url_form = array(
'title' => lang('grp_url_title'),
'type' => 'textfield',
'name' => 'group_url',
'id' => 'group_url',
'value' => cleanForm($gpurl),
'hint_1' => '',
'hint_2' => lang('grp_url_msg'),
'db_field' => 'group_url',
'required' => 'yes',
'invalid_err' => lang('grp_url_error'),
'syntax_type' => 'field_text',
'function_error_msg' => lang('user_contains_disallow_err'),
'min_length' => 3,
'max_length' => 18,
);
$fields = array
(
'name' => array(
'title' => lang('grp_name_title'),
'type' => "textfield",
'name' => "group_name",
'id' => "group_name",
'value' => $gptitle,
'db_field' => 'group_name',
'required' => 'yes',
'invalid_err' => lang('grp_name_error'),
'max_length' => config('grp_max_title')
),
'tags' => array(
'title' => lang('tag_title'),
'type' => 'textfield',
'name' => 'group_tags',
'id' => 'group_tags',
'value' => (genTags($tags)),
'hint_1' => '',
'hint_2' => lang('grp_tags_msg1'),
'db_field' => 'group_tags',
'required' => 'yes',
'invalid_err' => lang('grp_tags_error'),
'validate_function' => 'genTags'
),
'desc' => array(
'title' => lang('vdo_desc'),
'type' => 'textarea',
'name' => 'group_description',
'id' => 'group_description',
'value' => cleanForm($gpdescription),
'size' => '35',
'extra_params' => ' rows="4" ',
'db_field' => 'group_description',
'invalid_err' => lang('grp_des_error'),
'required' => 'yes',
'max_length' => config('grp_max_desc')
),
$url_form,
'cat' => array(
'title' => lang('grp_cat_tile'),
'type' => 'checkbox',
'name' => 'category[]',
'id' => 'category',
'value' => array('category', $cat_array),
'hint_1' => sprintf(lang('vdo_cat_msg'), ALLOWED_GROUP_CATEGORIES),
'db_field' => 'category',
'required' => 'yes',
'validate_function' => 'validate_group_category',
'invalid_err' => lang('grp_cat_error'),
'display_function' => 'convert_to_categories',
'category_type' => 'group',
),
);
return $fields;
}
/**
* Function used to load other group option fields
*/
function load_other_fields($default = NULL) {
global $LANG, $uploadFormOptionFieldsArray;
if (!$default)
$default = $_POST;
$gpprivacy = $default['group_privacy'];
$gpposting = $default['post_type'];
$group_option_fields = array
(
'privacy' => array('title' => lang('privacy'),
'type' => 'radiobutton',
'name' => 'group_privacy',
'id' => 'group_privacy',
'value' => array('0' => lang('grp_join_opt1'), '1' => lang('grp_join_opt2'), 2 => lang('grp_join_opt3')),
'checked' => $gpprivacy,
'db_field' => 'group_privacy',
'required' => 'no',
'display_function' => 'display_sharing_opt',
),
'posting' => array('title' => lang('grp_forum_posting'),
'type' => 'radiobutton',
'name' => 'post_type',
'id' => 'post_type',
'value' => array('0' => lang('vdo_br_opt1'), '1' => lang('vdo_br_opt2'), 2 => lang('grp_join_opt3')),
'checked' => $gpposting,
'db_field' => 'post_type',
'required' => 'no',
'display_function' => 'display_sharing_opt',
),
);
return $group_option_fields;
}
/**
* Function used to validate Signup Form
*/
function validate_form_fields($array = NULL, $update = false) {
$fields = $this->load_required_fields($array, $update);
if ($array == NULL)
$array = $_POST;
if (is_array($_FILES))
$array = array_merge($array, $_FILES);
//Mergin Array
$group_fields = array_merge($fields, $this->load_other_fields());
validate_cb_form($group_fields, $array);
}
/**
* Function used to create new groups
* @Author : Fawaz Tahir, Arslan Hassan
* @Params : array { Group Input Details }
* @since : 15 December 2009
*/
function create_group($array, $user = false, $redirect_to_group = false) {
global $db;
if ($array == NULL)
$array = $_POST;
if (is_array($_FILES))
$array = array_merge($array, $_FILES);
$this->validate_form_fields($array);
if (!error()) {
$group_fields = $this->load_required_fields($array);
$group_fields = array_merge($group_fields, $this->load_other_fields());
//Adding Custom Signup Fields
if (count($this->custom_group_fields) > 0)
$group_fields = array_merge($group_fields, $this->custom_group_fields);
foreach ($group_fields as $field) {
$name = formObj::rmBrackets($field['name']);
$val = $array[$name];
if ($field['use_func_val'])
$val = $field['validate_function']($val);
if (!empty($field['db_field']))
$query_field[] = $field['db_field'];
if (is_array($val)) {
$new_val = '';
foreach ($val as $v) {
$new_val .= "#" . $v . "# ";
}
$val = $new_val;
}
if (!$field['clean_func'] || (!function_exists($field['clean_func']) && !is_array($field['clean_func'])))
$val = ($val);
else
$val = apply_func($field['clean_func'], sql_free('|no_mc|' . $val));
if (!empty($field['db_field']))
$query_val[] = $val;
}
}
if (!error()) {
//UID
$query_field[] = "userid";
$query_val[] = $user;
//DATE ADDED
$query_field[] = "date_added";
$query_val[] = now();
$query_field[] = "total_members";
$query_val[] = 1;
//Inserting IN Database now
$db->insert(tbl($this->gp_tbl), $query_field, $query_val);
$insert_id = $db->insert_id();
//Owner Joiing Group
ignore_errors();
$db->insert(tbl($this->gp_mem_tbl), array("group_id", "userid", "date_added", "active"), array($insert_id, $user, now(), 'yes'));
//$this->join_group($insert_id,$user,false);
//Updating User Total Groups
$this->update_user_total_groups($user);
//Adding Feed
addFeed(array('action' => 'create_group', 'object_id' => $insert_id, 'object' => 'group'));
if ($redirect_to_group) {
$grp_details = $this->get_details($insert_id);
redirect_to(group_link(array('details' => $grp_details)));
}
//loggin Upload
$log_array = array
(
'success' => 'yes',
'action_obj_id' => $insert_id,
'details' => "created new group");
insert_log('add_group', $log_array);
return $insert_id;
}
}
/**
* Function used to update group
* @Author : Fawaz Tahir, Arslan Hassan
* @Params : array { Group Input Details }
* @since : 15 December 2009
*/
function update_group($array = NULL) {
global $db;
if ($array == NULL)
$array = $_POST;
if (is_array($_FILES))
$array = array_merge($array, $_FILES);
$this->validate_form_fields($array, true);
$gid = $array['group_id'];
if (!error()) {
$group_fields = $this->load_required_fields($array);
$group_fields = array_merge($group_fields, $this->load_other_fields());
//Adding Custom Signup Fields
if (count($this->custom_group_fields) > 0)
$group_fields = array_merge($group_fields, $this->custom_group_fields);
foreach ($group_fields as $field) {
$name = formObj::rmBrackets($field['name']);
$val = $array[$name];
if ($field['use_func_val'])
$val = $field['validate_function']($val);
if (!empty($field['db_field']))
$query_field[] = $field['db_field'];
if (is_array($val)) {
$new_val = '';
foreach ($val as $v) {
$new_val .= "#" . $v . "# ";
}
$val = $new_val;
}
if (!$field['clean_func'] || (!function_exists($field['clean_func']) && !is_array($field['clean_func'])))
$val = ($val);
else
$val = apply_func($field['clean_func'], sql_free('|no_mc|' . $val));
if (!empty($field['db_field']))
$query_val[] = $val;
}
}
if (has_access('admin_access', TRUE)) {
if (!empty($array['total_views'])) {
$query_field[] = 'total_views';
$query_val[] = $array['total_views'];
}
if (!empty($array['total_videos'])) {
$query_field[] = 'total_videos';
$query_val[] = $array['total_videos'];
}
if (!empty($array['total_members'])) {
$query_field[] = 'total_members';
$query_val[] = $array['total_members'];
}
if (!empty($array['total_topics'])) {
$query_field[] = 'total_topics';
$query_val[] = $array['total_topics'];
}
}
//Getting Group URL value
$gp_url = $this->get_gp_field_only($gid, "group_url");
//Checking Group URL
if ($array['group_url'] != $gp_url)
if (group_url_exists($array['group_url']))
e(lang('grp_url_error2'));
if (!error()) {
if (!userid()) {
e(lang("you_not_logged_in"));
} elseif (!$this->group_exists($gid)) {
e(lang("grp_exist_error"));
} elseif (!$this->is_owner($gid, userid()) && !has_access('admin_access', TRUE)) {
e(lang("you_cant_edit_group"));
} else {
$db->update(tbl($this->gp_tbl), $query_field, $query_val, " group_id='$gid'");
e(lang("grp_details_updated"), 'm');
//Updating Group Thumb
if (!empty($array['thumb_file']['tmp_name']))
$this->create_group_image($gid, $array['thumb_file']);
}
}
}
/**
* Function used to get default image for group.
*/
function get_default_thumb($size = NULL) {
if ($size == "small" && file_exists(TEMPLATEDIR . '/images/thumbs/group_thumb-small.png')) {
return TEMPLATEURL . '/images/thumbs/group_thumb-small.png';
} elseif (file_exists(TEMPLATEDIR . '/images/thumbs/group_thumb.png') && !$size) {
return TEMPLATEURL . '/images/thumbs/group_thumb.png';
} else {
if ($size == 'small')
$this->get_default_thumb = GP_THUMB_URL . '/no_thumb-small.png';
else
$this->get_default_thumb = GP_THUMB_URL . '/no_thumb.png';
return $this->get_default_thumb;
}
}
/**
* Function used to create group thumbnail
* @param = $gpid {ID of group for which thumbnail is being created }
* @param = $file { Source of image file $_FILES }
*/
function create_group_image($gpid, $file) {
global $imgObj;
$file_ext = strtolower(getext($file['name']));
$exts = array('jpg', 'png', 'gif', 'jpeg');
foreach ($exts as $ext) {
if ($ext == $file_ext) {
$thumb_name = $gpid . '.' . $ext;
$small_thumb_name = $gpid . '-small.' . $ext;
$path = GP_THUMB_DIR . '/' . $thumb_name;
$small_path = GP_THUMB_DIR . '/' . $small_thumb_name;
foreach ($exts as $unlink_ext)
if (file_exists(GP_THUMB_DIR . '/' . $gpid . '.' . $unlink_ext))
unlink(GP_THUMB_DIR . '/' . $gpid . '.' . $unlink_ext);
move_uploaded_file($file['tmp_name'], $path);
if (!$imgObj->ValidateImage($path, $ext))
e(lang('pic_upload_vali_err'));
else {
$imgObj->CreateThumb($path, $path, $this->gp_thumb_width, $ext, $this->gp_thumb_height, true);
$imgObj->CreateThumb($path, $small_path, $this->gp_small_thumb_width, $ext, $this->gp_small_thumb_height, true);
}
}
}
}
/**
* Function used to get group thumb.
* @param Group Details array
*/
function get_gp_thumb($grp_details, $size = NULL) {
$exts = array('jpg', 'png', 'gif', 'jpeg');
$gpid = $grp_details['group_id'];
foreach ($exts as $ext) {
if ($size == 'small')
$file_size = "-small";
if (file_exists(GP_THUMB_DIR . '/' . $gpid . "$file_size." . $ext))
return GP_THUMB_URL . '/' . $gpid . "$file_size." . $ext;
}
return $this->get_default_thumb($size);
}
function get_group_thumb($grp_details, $size = NULL) {
return $this->get_gp_thumb($grp_details, $size);
}
/**
* function used to get group icon
*/
function get_topic_icon($topic) {
$file = TOPIC_ICON_DIR . '/' . $topic['topic_icon'];
if (file_exists($file) && !empty($topic['topic_icon'])) {
return TOPIC_ICON_URL . '/' . $topic['topic_icon'];
}else
return TOPIC_ICON_URL . '/dot.gif';
}
/**
* Function used add new topic in group
* @param ARRAY details
*/
function add_topic($array, $redirect_to_topic = false) {
global $db;
if ($array == NULL)
$array = $_POST;
if (is_array($_FILES))
$array = array_merge($array, $_FILES);
$fields = $this->load_add_topic_form_fields($array);
validate_cb_form($fields, $array);
$user = userid();
$gp_details = $this->get_group_details($array['group_id']);
//Checking for weather user is allowed to post topics or not
if (!$this->validate_posting_previlige($gp_details))
return false;
if (!error()) {
foreach ($fields as $field) {
$name = formObj::rmBrackets($field['name']);
$val = $array[$name];
if ($field['use_func_val'])
$val = $field['validate_function']($val);
if (!empty($field['db_field']))
$query_field[] = $field['db_field'];
if (is_array($val)) {
$new_val = '';
foreach ($val as $v) {
$new_val .= "#" . $v . "# ";
}
$val = $new_val;
}
if (!$field['clean_func'] || (!apply_func($field['clean_func'], $val) && !is_array($field['clean_func'])))
$val = $val;
else
$val = apply_func($field['clean_func'], sql_free($val));
if (empty($val) && !empty($field['default_value']))
$val = $field['default_value'];
if (!empty($field['db_field']))
$query_val[] = $val;
}
}
if (!error()) {
//Adding Topic icon
$query_field[] = "topic_icon";
$query_val[] = $array['topic_icon'];
//UID
$query_field[] = "userid";
$query_val[] = $user;
//DATE ADDED
$query_field[] = "date_added";
$query_val[] = now();
$query_field[] = "last_post_time";
$query_val[] = now();
//GID
$query_field[] = "group_id";
$query_val[] = $array['group_id'];
//Checking If posting requires approval or not
$query_field[] = "approved";
if ($gp_details['post_type'] == 1)
$query_val[] = "no";
else
$query_val[] = "yes";
//Inserting IN Database now
$db->insert(tbl($this->gp_topic_tbl), $query_field, $query_val);
$insert_id = $db->insert_id();
//Increasing Group Topic Counts
$count_topics = $this->count_group_topics($array['group_id']);
$db->update(tbl($this->gp_tbl), array("total_topics"), array($count_topics), " group_id='" . $array['group_id'] . "'");
//leaving msg
e(lang("grp_tpc_msg"), "m");
//Redirecting to topic
if ($redirect_to_topic) {
$grp_details = $this->get_details($insert_id);
redirect_to(group_link($grp_details));
}
return $insert_id;
}
}
/**
* Function used to delete group topic
*/
function delete_topic($tid) {
global $db;
$topic = $this->get_topic_details($tid);
$group = $this->get_group_details($topic['group_id']);
if (!$topic)
e(lang("grp_tpc_err4"));
elseif (!$group)
e(lang("grp_exist_error"));
elseif (userid() != $topic['userid'] && userid() != $group['userid'])
e(lang("you_cant_del_topic"));
else {
$db->delete(tbl($this->gp_topic_tbl), array("topic_id", "group_id"), array($tid, $topic['group_id']));
//Deleting Topic Posts
$this->delete_comments($tid);
//Counting Total Topics
$count_topics = $this->count_topics($topic['group_id']);
//Updating Total Number
$db->update(tbl($this->gp_tbl), array('total_topics'), array($count_topics), " group_id = '" . $topic['group_id'] . "'");
e(lang("grp_tpc_msg1"), "m");
}
}
/**
* Function used to delete all user topics
*/
function delete_user_topics($uid, $gid) {
global $db;
$group = $this->get_group_details($gid);
if (!$group)
e(lang("grp_exist_error"));
elseif (userid() != $group['userid'] && userid() != $uid && !has_access('admin_access', true))
e(lang("you_cant_del_user_topics"));
else {
$usr_topics = $this->get_topics(array('group' => $gid, 'user' => $uid));
if (is_array($usr_topics))
foreach ($usr_topics as $topic)
$this->delete_topic($topic['topic_id']);
e(lang("topics_deleted"), "m");
}
}
/**
* Function used to delete all group topics
*/
function delete_group_topics($gid) {
global $db;
$group = $this->get_group_details($gid);
if (!$group)
e(lang("grp_exist_error"));
elseif (userid() != $group['userid'] && !has_access('admin_access', true))
e(lang("you_cant_delete_grp_topics"));
else {
$topics = $this->get_topics(array('group' => $gid));
if (is_array($topics))
foreach ($topics as $topic)
$this->delete_topic($topic['topic_id']);
e(lang("deleted"), "m");
}
}
/**
* Function used to check weather posting is allowed or not
*/
function validate_posting_previlige($gdetails) {
if (is_numeric($gdetails))
$gdetails = $this->get_group_details($gdetails);
if (!$gdetails || empty($gdetails['group_id']))
e(lang("grp_exist_error"));
if (!userid())
e(lang("grp_please_login"));
elseif (!$this->is_member(userid(), $gdetails['group_id'], TRUE))
e(lang("you_not_grp_mem_or_approved"));
elseif ($gdetails['post_type'] == 2 && userid() != $gdetails['userid'] && !has_access('admin_access', true))
e(lang("you_not_allowed_post_topics"));
else {
return true;
}
return false;
}
/**
* Function used to get group topics
* INPUT Group ID
*/
function get_group_topics($params) {
global $db;
$gid = $params['group'] ? $params['group'] : $params;
$limit = $params['limit'];
$order = $params['order'] ? $params['order'] : " last_post_time DESC ";
if ($params['approved'])
$approved_query = " AND " . tbl('group_topics') . ".approved='yes' ";
if ($params['user'])
$user_query = " AND " . tbl('group_topics') . ".userid='" . $params['user'] . "'";
//user fields
$fields = array(
'email', 'username'
);
$fields = apply_filters($fields, 'group_topic_user_fields');
foreach ($fields as $field)
$uquery .= ',' . tbl('users.' . $field);
if ($limit)
$limit_query = " LIMIT " . $limit;
else
$limit_query = '';
$order = ' ORDER BY ' . $order;
$results = db_select("SELECT " . tbl('group_topics') . ".*$uquery FROM "
. tbl('group_topics') . " LEFT JOIN " . tbl('users') . " ON " . tbl('users.userid')
. "=" . tbl('group_topics.userid') . " WHERE " . tbl('group_topics')
. ".group_id='$gid' $user_query $order $limit_query ");
if ($db->num_rows > 0)
return $results;
else
return false;
}
function GetTopics($params) {
return $this->get_group_topics($params);
}
function get_topics($params) {
return $this->get_group_topics($params);
}
/**
* Function used to check weather topic exists or not
* @param TOPIC ID {id of topic}
*/
function topic_exists($tid) {
global $db;
$count = $db->count(tbl($this->gp_topic_tbl), 'topic_id', " topic_id='$tid' ");
if ($count[0] > 0)
return true;
else
return false;
}
/**
* Function used to get topic details
* @param TOPIC ID {id of topic}
*/
function get_topic_details($topic) {
global $db;
//user fields
$fields = array(
'email', 'username'
);
$fields = apply_filters($fields, 'group_topic_user_fields');
foreach ($fields as $field)
$uquery .= ',' . tbl('users.' . $field);
$result = db_select("SELECT " . tbl($this->gp_topic_tbl)
. ".* $uquery FROM " . tbl($this->gp_topic_tbl)
. " LEFT JOIN " . tbl("users") . " ON " . tbl('users.userid')
. '=' . tbl($this->gp_topic_tbl . '.userid')
. " WHERE topic_id='$topic'");
//$result = $db->select(tbl($this->gp_topic_tbl),"*"," topic_id='$topic' ");
if ($db->num_rows > 0)
return $result[0];
else
return false;
}
function gettopic($topic) {
return $this->get_topic_details($topic);
}
function get_topic($topic) {
return $this->get_topic_details($topic);
}
/**
* Function used to check weather user is invited or not
*/
function is_invited($uid, $gid, $owner, $gen_err = FALSE) {
global $db;
$count = $db->count(tbl($this->gp_invite_tbl), 'invitation_id', " invited='$uid' AND group_id='$gid' AND userid='$owner' ");
if ($count[0] > 0)
return true;
else {
if ($gen_err)
e(lang('grp_prvt_err1'));
return false;
}
}
function is_userinvite($uid, $gid, $owner) {
return $this->is_invited($uid, $gid, $owner);
}
/**
* Function used to check whether user is already a member or not
* @param = $user { User to check }
* @param = $gpid { ID of group in which we will check }
*/
function is_member($user, $gpid, $active = false) {
global $db;
$active_query = "";
if ($active)
$active_query = " AND active='yes' ";
$data = $db->count(tbl($this->gp_mem_tbl), "*", "group_id='$gpid' AND userid='$user' $active_query");
//echo $db->db_query;
if ($data[0] > 0) {
return true;
} else {
return false;
}
}
function joined_group($user, $gpid) {
return $this->is_member($user, $gpid);
}
/**
* Function use to check weather user is owner or not of the group
* @param GID {group id}
* @param UID {logged in user or just user}
*/
function is_owner($gid, $uid = NULL) {
if (!$uid)
$uid = userid();
if (!is_array($gid))
$group = $this->get_group_details($gid);
else
$group = $gid;
if ($group['userid'] == $uid)
return true;
else
return false;
}
/**
* Function used to count total number of members in a group.
* @param = $gpid { ID of group whose members are going to be counted }
*/
function total_members($gpid, $active = true) {
global $db;
if ($active)
$activeQuery = "AND active = 'yes'";
$totalmem = $db->count(tbl("group_members"), "*", "group_id='$gpid' $activeQuery");
return $totalmem[0];
}
/**
* Function used to get group members
*/
function get_members($gid, $limit = NULL, $approved = NULL) {
global $db;
$app_query = "";
if ($approved)
$app_query = " AND " . tbl($this->gp_mem_tbl) . ".active='$approved'";
//List of fields we need from a user table
$user_fields = array(
'email', 'username', 'status', 'ban_status'
);
$user_fields = apply_filters($user_fields, 'get_group_members');
$fields_query = '';
foreach ($user_fields as $field)
$fields_query .= ',' . tbl('users') . '.' . $field;
$result = $db->select(tbl($this->gp_mem_tbl)
. " LEFT JOIN " . tbl('users')
. " ON " . tbl($this->gp_mem_tbl)
. ".userid=" . tbl('users') . ".userid"
, tbl($this->gp_mem_tbl) . ".*" . $fields_query
, " group_id='$gid' $app_query", $limit);
if ($db->num_rows > 0)
return $result;
else
return false;
}
/**
* Function used to check weather member is active or not
*/
function is_active_member($uid, $gid) {
global $db;
$count = $db->count(tbl($this->gp_mem_tbl), "userid", " userid='$uid' AND group_id='$gid' AND active='yes'");
if ($count[0] > 0)
return true;
else
return false;
}
/**
* function used to count number of topics in a group
*/
function count_group_topics($group) {
global $db;
$totaltopics = $db->count(tbl($this->gp_topic_tbl), "*", "group_id='$group'");
return $totaltopics;
}
function CountTopics($group) {
return $this->count_group_topics($group);
}
function count_topics($group) {
return $this->count_group_topics($group);
}
/**
* Function used to add video to group
*/
function add_group_video($vid, $gid, $update_group = false) {
global $db, $cbvid;
$group = $this->get_details($gid);
$video = $cbvid->get_video_details($vid);
if (!$group)
e(lang("grp_exist_error"));
elseif (!$video)
e(lang("class_vdo_del_err"));
elseif ($video['userid'] != userid())
e(lang("you_cant_add_this_vdo"));
elseif ($this->is_group_video($vid, $gid))
return false;
else {
if (!$this->is_active_member(userid(), $group['group_id'])) {
$approved = "no";
e(lang("your_video_send_in_modetation"), "w");
}
else
$approved = "yes";
$db->insert(tbl($this->gp_vdo_tbl), array("videoid", "group_id", "userid", "approved"), array($vid, $gid, userid(), $approved));
e(lang("video_added"), "m");
if ($update_group)
$this->update_group_videos_count($gid);
}
}
/**
* Removing video gro group
*/
function remove_group_video($vid, $gid, $update_group = false) {
global $db, $cbvid;
$group = $this->get_details($gid);
$video = $cbvid->get_video_details($vid);
if (!$group)
e(lang("grp_exist_error"));
elseif (!$video)
e(lang("class_vdo_del_err"));
elseif ($video['userid'] != userid())
e(lang("you_cant_del_this_vdo"));
elseif (!$this->is_group_video($vid, $gid))
return false;
else {
$db->delete(tbl($this->gp_vdo_tbl), array("videoid", "group_id"), array($vid, $gid));
e(lang("video_removed"), "m");
if ($update_group)
$this->update_group_videos_count($gid);
}
}
/**
* Function used to check weather video is already in group or not
*/
function is_group_video($vid, $gid) {
global $db;
$count = $db->count(tbl($this->gp_vdo_tbl), "group_video_id", " videoid='$vid' AND group_id='$gid'");
if ($count[0] > 0)
return true;
else
return false;
}
/**
* Function used to count videos of group
* @param GID {group ID}
*/
function count_videos($gpid, $approved = true) {
global $db;
if ($approved)
$appQuery = "AND approved = 'yes'";
$totalmem = $db->count(tbl("group_videos"), "*", "group_id='$gpid' $appQuery");
return $totalmem;
}
function total_videos($gid) {
return $this->count_videos($gid);
}
/**
* Function used to update number of videos of group
*/
function update_group_videos_count($gid) {
global $db;
$total = $this->count_videos($gid);
$db->update(tbl($this->gp_tbl), array('total_videos'), array($total), " group_id='$gid'");
}
/**
* Function used to get group videos
*/
function get_group_videos($gid, $approved = NULL, $limit = NULL) {
global $db, $cbvid;
if ($approved)
$approved_query = "AND approved='$approved'";
if ($limit != 'count') {
$result = $db->select(tbl($this->gp_vdo_tbl) . " LEFT JOIN " . tbl('video') . "
ON " . tbl($this->gp_vdo_tbl) . ".videoid=" . tbl('video') . ".videoid", "*", " group_id='$gid' $approved_query AND " . tbl('video') . ".active='yes' AND status='Successful'", $limit);
} else {
return $db->count(tbl($this->gp_vdo_tbl) . " LEFT JOIN " . tbl('video') . "
ON " . tbl($this->gp_vdo_tbl) . ".videoid=" . tbl('video') . ".videoid", "videoid", " group_id='$gid' $approved_query AND " . tbl('video') . ".active='yes' AND status='Successful'", $limit);
}
if ($db->num_rows > 0)
return $result;
else
return false;
}
/**
* Function used to activate or detactivate or delete group member
*/
function member_actions($gid, $memuid, $case, $deleting_group = FALSE) {
global $db;
//getting group details
$group = $this->get_group_details($gid);
if (!$group)
e(lang("grp_exist_error"));
elseif (!$this->is_member($memuid, $gid))
e(lang("user_not_grp_mem"));
elseif (userid() != $group['userid'] && !has_access("admin_access", true))
e(lang("grp_owner_err1"));
elseif ($group['userid'] == $memuid && !$deleting_group)
e(lang("you_cant_perform_actions_on_grp_own"));
else
switch ($case) {
case "activate":
case "active": {
$db->update(tbl($this->gp_mem_tbl), array("active"), array("yes"), "userid='$memuid' AND group_id='$gid'");
e(lang("usr_ac_msg"), "m");
}
break;
case "deactivate":
case "deactive":
case "unactivate":
case "unactive": {
$db->update(tbl($this->gp_mem_tbl), array("active"), array("no"), "userid='$memuid' AND group_id='$gid'");
e(lang("usr_dac_msg"), "m");
}
break;
case "delete": {
//Delete All Videos oF member
$db->delete(tbl($this->gp_vdo_tbl), array("userid", "group_id"), array($memuid, gid));
//Deleting ALl Topics Of
$this->delete_user_topics($memuid, $gid);
//Delete Member
$db->delete(tbl($this->gp_mem_tbl), array("userid", "group_id"), array($memuid, $gid));
$total_members = $this->total_members($gid);
$total_videos = $this->total_videos($gid);
$count_topics = $this->count_group_topics($gid);
//Update Stat
$db->update(tbl($this->gp_tbl), array("total_topics", "total_members", "total_videos"), array($count_topics, $total_members, $total_videos), " group_id='" . $gid . "'");
e(lang("usr_del_msg"), "m");
}
break;
case "ban": {
$db->update(tbl($this->gp_mem_tbl), array("ban"), array("yes"), "userid='$memuid' AND group_id='$gid'");
e(lang("User has been banned from this group"), "m");
}
break;
case "unban": {
$db->update(tbl($this->gp_mem_tbl), array("ban"), array("no"), "userid='$memuid' AND group_id='$gid'");
e(lang("User ban has been removed"), "m");
}
break;
}
}
/**
* Function will update number of members in the group in groups table
*
* @Author Arslan
* @param GID
* @return BOOLEAN
*/
function update_group_members($gid) {
global $db;
$total_members = $this->total_members($gid);
$db->update(tbl($this->gp_tbl), array("total_members"), array($total_members), " group_id='" . $gid . "'");
return true;
}
/**
* Function used to perform actions on videos
*/
function video_actions($gid, $vid, $case) {
global $db;
//getting group details
$group = $this->get_group_details($gid);
if (!$group)
e(lang("grp_exist_error"));
elseif (!$this->is_group_video($vid, $gid))
e(lang("class_vdo_del_err"));
elseif (userid() != $group['userid'] && !has_access("admin_access"))
e(lang("grp_owner_err1"));
else
switch ($case) {
case "activate":
case "active": {
$db->update(tbl($this->gp_vdo_tbl), array("approved"), array("yes"), "videoid ='$vid' AND group_id='$gid'");
$this->update_group_videos_count($gid);
e(lang("class_vdo_act_msg"), "m");
}
break;
case "deactivate":
case "deactive":
case "unactivate":
case "unactive": {
$db->update(tbl($this->gp_vdo_tbl), array("approved"), array("no"), "videoid ='$vid' AND group_id='$gid'");
$this->update_group_videos_count($gid);
e(lang("class_vdo_act_msg1"), "m");
}
break;
case "delete": {
//Delete video
$db->delete(tbl($this->gp_vdo_tbl), array("videoid", "group_id"), array($vid, $gid));
$total_videos = $this->total_videos($gid);
//Update Stat
$db->update(tbl($this->gp_tbl), array("total_videos"), array($total_videos), " group_id='" . $gid . "'");
e(lang("class_vdo_del_msg"), "m");
}
break;
}
}
/**
* Function used to invite members to group
*/
function invite_member($user, $gid, $owner = NULL) {
global $cbemail, $db, $userquery;
$group = $this->get_group_details($gid);
if (!$owner)
$owner = userid();
$sender = $userquery->get_user_details($owner);
$reciever = $userquery->get_user_details($user);
if (!$group)
e(lang("grp_exist_error"));
elseif (!$sender)
e(lang("unknown_sender"));
elseif (!$reciever)
e(lang("unknown_reciever"));
elseif ($this->is_member($user, $gid))
e(lang("user_already_group_mem"));
elseif ($owner != $group['userid'])
e(lang("grp_owner_err1"));
else {
//Inserting Invitation Code in database
$db->insert(tbl($this->gp_invite_tbl), array('group_id', 'userid', 'invited', 'date_added'), array($gid, $owner, $reciever['userid'], now()));
e(lang("grp_inv_msg"), "m");
//Now Sending Email To User
$tpl = $cbemail->get_template('group_invitation');
$more_var = array
(
'{reciever}' => $reciever['username'],
'{sender}' => $sender['username'],
'{group_url}' => group_link(array('details' => $group)),
'{group_name}' => $group['group_name'],
'{group_description}' => $group['group_description']
);
if (!is_array($var))
$var = array();
$var = array_merge($more_var, $var);
$subj = $cbemail->replace($tpl['email_template_subject'], $var);
$msg = nl2br($cbemail->replace($tpl['email_template'], $var));
//Now Finally Sending Email
cbmail(array('to' => $reciever['email'], 'from' => WEBSITE_EMAIL, 'subject' => $subj, 'content' => $msg));
}
}
/**
* Function used to invite members to group
*/
function invite_members($user_array, $group, $owner = NULL) {
global $eh;
$total = count($user_array);
for ($i = 0; $i < $total; $i++) {
$this->invite_member($user_array[$i], $group, $owner);
}
$eh->flush();
e(lang("invitations_sent"), "m");
}
/**
* Function used to leave group
*/
function leave_group($gid, $uid) {
global $db;
if (!$this->is_member($uid, $gid))
e(lang("you_not_grp_mem"));
elseif ($this->is_owner($gid, $uid))
e(lang("grp_owner_err2"));
else {
$db->delete(tbl($this->gp_mem_tbl), array("userid", "group_id"), array($uid, $gid));
e(lang("grp_leave_succ_msg"), "m");
}
}
/**
* Function used to delete group
*/
function delete_group($gid) {
global $db;
$group = $this->get_group_details($gid);
if (!$group)
e(lang("grp_exist_error"));
elseif (userid() != $group['userid'] && !has_access('admin_access', true))
e(lang("you_cant_delete_this_grp"));
else {
//Deleting Everything Related To This Group
$this->delete_group_topics($gid);
$this->delete_group_videos($gid);
$this->delete_group_members($gid);
$db->delete(tbl($this->gp_tbl), array("group_id"), array($gid));
$this->update_user_total_groups($group['userid']);
e(lang("grp_deleted"), "m");
}
}
/**
* Functin used to delete all memebrs of group
*/
function delete_group_members($gid) {
global $db;
$group = $this->get_group_details($gid);
if (!$group)
e(lang("grp_exist_error"));
elseif (userid() != $group['userid'] && !has_access('admin_access', true))
e(lang("you_cant_del_grp_mems"));
else {
$db->delete(tbl($this->gp_mem_tbl), array("group_id"), array($gid));
e(lang("mems_deleted"), "m");
}
}
/**
* Functin used to delete all videos of group
*/
function delete_group_videos($gid) {
global $db;
$group = $this->get_group_details($gid);
if (!$group)
e(lang("grp_exist_error"));
elseif (userid() != $group['userid'] && !has_access('admin_access', true))
e(lang("you_cant_del_grp_vdos"));
else {
$db->delete(tbl($this->gp_vdo_tbl), array("group_id"), array($gid));
e(lang("vdo_multi_del_erro"), "m");
}
}
/**
* Function used to check weather group exists or not
*/
function group_exists($gid) {
global $db;
$result = $db->count(tbl($this->gp_tbl), "group_id", " group_id='$gid'");
if ($result > 0)
return true;
else
return false;
}
/**
* Function used to perform gorups actions
*/
function grp_actions($type, $gid) {
global $db;
$gdetails = $this->get_details($gid);
if (!$gdetails)
e(lang("grp_exist_error"));
else {
switch ($type) {
case "activate":
case "active": {
$db->update(tbl($this->gp_tbl), array("active"), array("yes"), " group_id='$gid' ");
e(lang("grp_av_msg"), "m");
}
break;
case "deactivate":
case "deactive": {
$db->update(tbl($this->gp_tbl), array("active"), array("no"), " group_id='$gid' ");
e(lang("grp_da_msg"), "m");
}
break;
case "featured":
case "feature": {
$db->update(tbl($this->gp_tbl), array("featured"), array("yes"), " group_id='$gid' ");
e(lang("grp_fr_msg"), "m");
}
break;
case "unfeatured":
case "unfeature": {
$db->update(tbl($this->gp_tbl), array("featured"), array("no"), " group_id='$gid' ");
e(lang("grp_fr_msg2"), "m");
}
break;
case "delete": {
$this->delete_group($gid);
e(lang("grp_del_msg"), "m");
}
break;
}
}
}
/**
* Function used to get all topic icons
*/
function get_topic_icons() {
$dir = TOPIC_ICON_DIR;
$icons = glob($dir . '/*.png');
$new_icons = '';
foreach ($icons as $icon) {
$icon_parts = explode('/', $icon);
$icon_file = $icon_parts[count($icon_parts) - 1];
$new_icons[] = array('file' => $icon_file, 'path' => $icon, 'url' => TOPIC_ICON_URL . '/' . $icon_file);
}
if (count($new_icons) > 0)
return $new_icons;
else
return false;
}
/**
* Function used to load ADD Topic Form
*/
function load_add_topic_form_fields($array = NULL) {
if ($array == NULL)
$array = $_POST;
$topic_title = $_POST['topic_title'];
$topic_post = $_POST['topic_post'];
$fields = array
(
'title' => array(
'title' => lang('topic_title'),
'type' => 'textfield',
'name' => 'topic_title',
'id' => 'topic_title',
'value' => cleanForm($topic_title),
'size' => '45',
'db_field' => 'topic_title',
'required' => 'yes',
'min_length' => 1,
'max_length' => config('max_topic_title'),
),
'topic_post' => array(
'title' => lang("topic_post"),
'type' => 'textarea',
'name' => 'topic_post',
'id' => 'topic_post',
'value' => cleanForm($topic_post),
'size' => '45',
'db_field' => 'topic_post',
'required' => 'yes',
'min_length' => 4,
'max_length' => config('max_topic_length'),
'anchor_before' => 'before_topic_post_box',
'anchor_after' => 'after_topic_post_box',
)
);
return $fields;
}
/**
* Function used to add video comment
*/
function add_comment($comment, $obj_id, $reply_to = NULL) {
global $myquery, $db;
if (!$this->topic_exists($obj_id))
e(lang("grp_tpc_err4"));
else {
$owner = $this->get_group_owner_from_topic($obj_id);
$add_comment = $myquery->add_comment($comment, $obj_id, $reply_to, 't', $owner);
if ($add_comment) {
//Loggin Comment
$log_array = array
(
'success' => 'yes',
'details' => "comment on a topic",
'action_obj_id' => $obj_id,
'action_done_id' => $add_comment,
);
insert_log('topic_comment', $log_array);
//Updating Number of comments of topics
$this->update_comments_count($obj_id);
}
return $add_comment;
}
}
/**
* Function used to delete comment
*/
function delete_comment($cid, $objid) {
global $myquery;
$tdetails = $this->get_topic_details($objid);
$gdetails = $this->get_group_details($tdetails['group_id']);
$forceDelete = false;
if (userid() == $gdetails['userid'])
$forceDelete = true;
$myquery->delete_comment($cid, 't', false, $forceDelete);
$this->update_comments_count($objid);
}
/**
* Function delete all comments of topic
*/
function delete_comments($tid) {
global $myquery;
$tdetails = $this->get_topic_details($tid);
$gdetails = $this->get_group_details($tdetails['group_id']);
$forceDelete = false;
if (userid() == $gdetails['userid']) {
$forceDelete = true;
$myquery->delete_comments($tid, 't', $forceDelete);
$this->update_comments_count($objid);
}
}
/**
* Function used to update video comments count
*/
function update_comments_count($id) {
global $db;
$total_comments = $this->count_topic_comments($id);
if (!userid())
$userid = 0;
else
$userid = userid();
$db->update(tbl($this->gp_topic_tbl), array("total_replies", "last_poster", "last_post_time"), array($total_comments, $userid, now()), " topic_id='$id'");
}
/**
* Function used to count total video comments
*/
function count_topic_comments($id) {
global $db;
$total_comments = $db->count(tbl('comments'), "comment_id", "type='t' AND type_id='$id'");
return $total_comments;
}
/**
* Function used to crearte view topic link
*/
function topic_link($tdetails) {
if (SEO == yes)
return BASEURL . '/view_topic/' . SEO($tdetails['topic_title']) . '_tid_' . $tdetails['topic_id'];
else
return BASEURL . '/view_topic.php?tid=' . $tdetails['topic_id'];
}
/**
* function and show otpion links
*/
function group_opt_link($group, $type) {
global $userquery;
$gArray =
array
(
'group' => $group,
'groupid' => $group['group_id'],
'uid' => userid(),
'user' => $userquery->udetails,
'checkowner' => 'yes'
);
switch ($type) {
case 'join': {
if ($this->is_joinable($group)) {
if (SEO == "yes")
return '' . lang('join') . '';
else
return '' . lang('join') . '';
}else
return false;
}
break;
case 'invite': {
if ($this->is_owner($group)) {
return '' . lang('invite') . '';
}
}
break;
case 'leave': {
if ($this->is_member(userid(), $group['group_id']) && !$this->is_owner($group)) {
if (SEO == "yes")
return '' . lang('leave') . '';
else
return '' . lang('leave') . '';
}
}
break;
case 'remove_group': {
if ($this->is_owner($group)) {
$gpID = $group['group_id'];
$message = lang('are_you_sure_del_grp');
$url = BASEURL . '/manage_groups.php?mode=manage&gid_delete=' . $gpID;
return "" . lang('grp_remove_group') . "";
}
}
break;
case 'manage_members': {
if ($this->is_admin($gArray)) {
return '' . lang('grp_manage_mems') . '';
}
}
break;
case 'manage_videos': {
if ($this->is_admin($gArray)) {
return '' . lang('com_manage_vids') . '';
}
}
break;
case 'add_videos': {
if ($this->is_member(userid(), $group['group_id'])) {
return '' . lang('grp_add_vdos') . '';
}
}
break;
case 'edit_group': {
if ($this->is_admin($gArray)) {
return '' . lang('grp_edit_grp_title') . '';
}
}
break;
}
return false;
}
/**
* returns group links that are displayed in left column of default
* template
*
* @param ARRAY $group
* @param INT $uid
*
* @return ARRAY $group_links
*/
function group_links($group, $uid = NULL) {
global $userquery;
if (!$uid)
$uid = userid();
$group_links = array();
$group_array =
array
(
'group' => $group,
'groupid' => $group['group_id'],
'uid' => $uid,
'user' => $userquery->udetails,
'checkowner' => 'yes'
);
$group_owner_links = array();
if ($this->is_owner($group)) {
$group_owner_links =
array(
'invite_members' => array(
'name' => lang('Invite members'),
'link' => BASEURL . '/invite_group.php?url=' . $group['group_url'],
'icon' => 'icon-star'
)
);
}
$group_admin_links = array();
if ($this->is_admin($group_array)) {
$group_admin_links = array(
'edit_group' => array(
'name' => lang('Edit group'),
'link' => BASEURL . '/edit_group.php?gid=' . $group['group_id'],
'icon' => 'icon-edit'
),
'manage_videos' => array(
'name' => lang('Manage videos'),
'link' => BASEURL . '/manage_groups.php?mode=manage_videos&gid=' . $group['group_id'],
'icon' => 'icon-tasks'
),
'manage_members' => array(
'name' => lang('Manage members'),
'link' => BASEURL . '/manage_groups.php?mode=manage_members&gid=' . $group['group_id'],
'icon' => 'icon-tasks'
),
);
}
$group_members_link = array();
if ($this->is_member($uid, $group['group_id'])) {
$group_members_link = array(
'add_videos' => array(
'name' => lang('Add videos'),
'link' => BASEURL . '/add_group_videos.php?url=' . $group['group_url'],
'icon' => 'icon-plus'
)
);
}
$group_links = array_merge($group_owner_links, $group_admin_links, $group_members_link);
$group_links = apply_filters($group_links, 'group_links');
return $group_links;
}
/**
* Function used to check weather
* this group is joinable or not
* it will check
* - user is logged in or not
* - if user is logged in , check is he member or not
* - if he is not a member, check is he invited
* - if is invited then show the link
*/
function is_joinable($group, $uid = NULL, $gen_err = FALSE) {
if (!$uid)
$uid = userid();
$group_id = $group['group_id'];
if ($this->is_member($uid, $group['group_id'])) {
if ($gen_err)
e(lang('grp_join_error'));
return false;
}elseif ($group['group_privacy'] != 2 || $this->is_invited($uid, $group_id, $group['userid'], $gen_err))
return true;
else
return false;
}
/**
* Function used to check weather to view
* group details ot user or not.
* We need to check following things and display Message Accordingly
* First - we to save group privacy into variables
* Second - $privacy == 1 and user is not member of group. Display group but with warning message.
* Third - $privacy == 1 and user is member of group. Display group but with warning message about pending approval.
* Fourth - $privacy == 2 and user is not member. Dont display group with error message
*/
function is_viewable($group, $uid = NULL) {
if (!$uid)
$uid = userid();
$privacy = $group['group_privacy'];
$isMember = $this->is_member($uid, $group['group_id']);
if ($privacy == 1 && !$isMember) {
e(lang("you_need_owners_approval_to_view_group"), "w");
return true;
} elseif ($privacy == 1 && !$this->is_active_member($uid, $group['group_id'])) {
e(lang("grp_inactive_account"), "w");
return true;
} elseif ($privacy == 2 && !$isMember && !$this->is_invited($uid, $group['group_id'], $group['userid'])) {
e(lang("grp_prvt_err1"));
return false;
} else {
return true;
}
/* $group_id = $group['group_id'];
$is_Member = $this->is_member($uid,$group['group_id'],true);
if($group['group_privacy'] == 2 && !$is_Member)
return array("privacy"=>$group['group_privacy'],"isMember"=>$is_Member);
elseif($group['group_privacy'] == 1 && !$is_Member)
return array("privacy"=>$group['group_privacy'],"isMember"=>$is_Member);
else
return true; */
}
/**
* Function used to get groups
* @parma ARRAY
* group_id => {id of group} INT
* user => {all groups of the user INT
* category => {all groups in specified category INT,INT,INT
* featured => {get featured groups only} yes,no
* limit => {number of results including offset}
* order => {soring by}
* date_margin => {date span}
*/
function get_groups($params = NULL, $force_admin = FALSE) {
global $db;
$limit = $params['limit'];
$order = $params['order'];
$cond = "";
if (!has_access('admin_access', TRUE) && !$force_admin)
$cond .= " " . tbl("groups.active") . "='yes' ";
else {
if ($params['active'])
$cond .= " " . tbl("groups.active") . "='" . $params['active'] . "'";
}
//Setting Category Condition
if (!is_array($params['category']))
$is_all = strtolower($params['category']);
if ($params['category'] && $is_all != 'all') {
if ($cond != '')
$cond .= ' AND ';
$cond .= " (";
if (!is_array($params['category'])) {
$cats = explode(',', $params['category']);
}else
$cats = $params['category'];
$count = 0;
foreach ($cats as $cat_params) {
$count++;
if ($count > 1)
$cond .=" OR ";
$cond .= " " . tbl("groups.category") . " LIKE '%#$cat_params#%' ";
}
$cond .= ")";
}
//date span
if ($params['date_span']) {
if ($cond != '')
$cond .= ' AND ';
$cond .= " " . cbsearch::date_margin("date_added", $params['date_span']);
}
//uid
if ($params['user']) {
if ($cond != '')
$cond .= ' AND ';
$cond .= " " . tbl("groups.userid") . "='" . $params['user'] . "'";
}
$tag_n_title = '';
//Tags
if ($params['tags']) {
//checking for commas ;)
$tags = explode(",", $params['tags']);
if (count($tags) > 0) {
if ($tag_n_title != '')
$tag_n_title .= ' OR ';
$total = count($tags);
$loop = 1;
foreach ($tags as $tag) {
$tag_n_title .= " " . tbl("groups.group_tags") . " LIKE '%" . $tag . "%'";
if ($loop < $total)
$tag_n_title .= " OR ";
$loop++;
}
}else {
if ($tag_n_title != '')
$tag_n_title .= ' OR ';
$tag_n_title .= " " . tbl("groups.group_tags") . " LIKE '%" . $params['tags'] . "%'";
}
}
//TITLE
if ($params['title']) {
if ($tag_n_title != '')
$tag_n_title .= ' OR ';
$tag_n_title .= " " . tbl("groups.group_name") . " LIKE '%" . $params['title'] . "%'";
}
if ($tag_n_title) {
if ($cond != '')
$cond .= ' AND ';
$cond .= " ($tag_n_title) ";
}
//FEATURED
if ($params['featured']) {
if ($cond != '')
$cond .= ' AND ';
$cond .= " " . tbl("groups.featured") . " = '" . $params['featured'] . "' ";
}
//GROUP ID
if ($params['group_id']) {
if ($cond != '')
$cond .= ' AND ';
$cond .= " group_id = '" . $params['group_id'] . "' ";
}
//Exclude Vids
if ($params['exclude']) {
if ($cond != '')
$cond .= ' AND ';
$cond .= " " . tbl("groups.group_id") . " <> '" . $params['exclude'] . "' ";
}
if (!$params['count_only']) {
if (!empty($cond))
$cond .= " AND ";
$result = $db->select(tbl($this->gp_tbl . ",users"), '' . tbl($this->gp_tbl) . '.*, ' . tbl("users") . '.username, ' . tbl("users") . '.userid', $cond . " " . tbl("groups.userid") . " = " . tbl("users.userid") . " ", $limit, $order);
}
// echo $db->db_query;
if ($params['count_only'])
return $result = $db->count(tbl($this->gp_tbl), '*', $cond);
if ($params['assign'])
assign($params['assign'], $result);
else
return $result;
}
/**
* Function used to get group field
* @ param INT gid
* @ param FIELD name
*/
function get_gp_field($gid, $field) {
global $db;
$results = $db->select(tbl($this->gp_tbl), $field, "group_id='$gid'");
if ($db->num_rows > 0) {
return $results[0];
} else {
return false;
}
}
function get_gp_fields($gid, $field) {
return $this->get_gp_field($gid, $field);
}
/**
* This function will return
* group field without array
*/
function get_gp_field_only($gid, $field) {
$fields = $this->get_gp_field($gid, $field);
return $fields[$field];
}
/**
* Function used to get groups joined by user
*/
function user_joined_groups($uid, $limit = NULL) {
global $db;
# REF QUERY : SELECT * FROM group_members,groups WHERE group_members.userid = '1' AND group_members.group_id = groups.group_id AND groups_members.userid != groups.userid
$result = $db->select(tbl($this->gp_tbl) . ',' . tbl($this->gp_mem_tbl), "*", tbl($this->gp_mem_tbl) . ".userid='$uid' AND
" . tbl($this->gp_mem_tbl) . ".group_id = " . tbl($this->gp_tbl) . ".group_id", $limit, tbl($this->gp_tbl) . ".group_name");
if ($db->num_rows > 0)
return $result;
else
return false;
}
/* * *
* Function used to update user total number of groups
*/
function update_user_total_groups($user) {
global $db;
$count = $db->count(tbl($this->gp_tbl), "group_id", " userid='$user' ");
$db->update(tbl("users"), array("total_groups"), array($count), " userid='$user' ");
}
/**
* Function used to use to initialize search object for video section
* op=>operator (AND OR)
*/
function init_search() {
$this->search = new cbsearch;
$this->search->db_tbl = "groups";
$this->search->columns = array(
array('field' => 'group_name', 'type' => 'LIKE', 'var' => '%{KEY}%'),
);
$this->search->cat_tbl = $this->cat_tbl;
$this->search->display_template = LAYOUT . '/blocks/group.html';
$this->search->template_var = 'group';
$this->search->multi_cat = true;
$this->search->results_per_page = config('grps_items_search_page');
$this->search->has_user_id = true;
/**
* Setting up the sorting thing
*/
$sorting = array(
'date_added' => lang("date_added"),
'total_views' => lang("views"),
'total_comments' => lang("comments"),
'total_videos' => lang("videos"),
'total_members' => lang("total members"),
);
$this->search->sorting = array(
'date_added' => " date_added DESC",
'total_views' => " total_views DESC",
'total_comments' => " total_comments DESC ",
'total_videos' => " total_videos DESC",
'total_members' => " total_members DESC",
);
/**
* Setting Up The Search Fields
*/
$default = $_GET;
if (is_array($default['category']))
$cat_array = array($default['category']);
$uploaded = $default['datemargin'];
$sort = $default['sort'];
$this->search->search_type['groups'] = array('title' => 'Groups');
$fields = array(
'query' => array(
'title' => lang('keywords'),
'type' => 'textfield',
'name' => 'query',
'id' => 'query',
'value' => cleanForm($default['query'])
),
'category' => array(
'title' => lang('category'),
'type' => 'checkbox',
'name' => 'category[]',
'id' => 'category',
'value' => array('category', $cat_array),
'category_type' => 'group',
),
'date_margin' => array(
'title' => lang('created'),
'type' => 'dropdown',
'name' => 'datemargin',
'id' => 'datemargin',
'value' => $this->search->date_margins(),
'checked' => $uploaded,
),
'sort' => array(
'title' => lang('sort_by'),
'type' => 'dropdown',
'name' => 'sort',
'value' => $sorting,
'checked' => $sort
)
);
$this->search->search_type['groups']['fields'] = $fields;
}
/**
* Function used to validate group category
* @param input array
*/
function validate_group_category($array = NULL) {
if ($array == NULL)
$array = $_POST['category'];
if (count($array) == 0)
return false;
else {
foreach ($array as $arr) {
if ($this->category_exists($arr))
$new_array[] = $arr;
}
}
if (count($new_array) == 0) {
e(lang('vdo_cat_err3'));
return false;
} elseif (count($new_array) > ALLOWED_GROUP_CATEGORIES) {
e(sprintf(lang('vdo_cat_err2'), ALLOWED_GROUP_CATEGORIES));
return false;
}
return true;
}
/**
* Get group owner from topic
*/
function get_group_owner_from_topic($tid) {
global $db;
$results = $db->select(tbl("group_topics") . "," . tbl("groups"), tbl("group_topics") . ".group_id," . tbl("group_topics") . ".topic_id," . tbl("groups") . "userid," . tbl("groups") . ".group_id", tbl("group_topics") . ".group_id = " . tbl("groups") . ".group_id AND " . tbl("group_topics") . ".topic_id='$tid'");
if ($db->num_rows > 0)
return $results[0]['userid'];
else
return false;
}
/**
* Function used to make member admin of the group
* input ARRAY
* INDEX gid => groupid
* INDEX group => groupdetails
* INDEX uid => Userid
* INDEX user => userdtails
* return error() | return true on success makeAdmin
*/
function make_admin($array) {
return $this->makeAdmin($array);
}
function makeAdmin($array) {
global $userquery, $db;
extract($array);
if (!@$groupid)
e(lang('Unknown group'));
elseif (!@$group) {
$group = $this->get_group($groupid);
}
if (!@$uid)
e(lang('Unknown group user'));
elseif (!@$user) {
$user = $userquery->get_user_details($uid);
}
if (!$group)
e(lang("Unknown group"));
if (!$user)
e(lang("Unknown user"));
//if(!$this->is_member($uid,$groupid))
// e(sprintf(lang("%s is not a member of %s"),$user['username'],$group['group_name']));
if (!$this->is_active_member($uid, $groupid))
e(sprintf(lang("%s is not active member of %s"), $user['username'], $group['group_name']));
//Checking if is owner or already an admin
$this->is_admin(array(
'group' => $group,
'groupid' => $groupid,
'uid' => $uid,
'user' => $user,
'error' => true,
'checkowner' => true));
if (!error()) {
$groupAdmins = $group['group_admins'];
$groupAdmins = json_decode($groupAdmins, true);
$groupAdmins[] = $uid;
$groupAdmins = json_encode($groupAdmins);
$db->update(tbl("groups"), array("group_admins"), array('|no_mc|' . $groupAdmins), " group_id='" . $groupid . "'");
e(sprintf(lang("%s has been made adminstrator of %s"), $user['username'], $group['group_name']), "m");
$db->update(tbl($this->gp_mem_tbl), array("is_admin"), array("yes"), "userid='" . $user['userid'] . "' AND group_id='$groupid'");
return true;
}
return false;
}
/**
* Function used to get weather user is admin of the group or not
* input ARRAY
* INDEX gid => groupid
* INDEX group => groupdetails
* INDEX uid => Userid
* INDEX user => userdtails
* return error() | return true on success makeAdmin
*/
function is_admin($array) {
global $userquery;
extract($array);
if (!@$groupid)
e(lang('Unknown group'));
elseif (!@$group) {
$group = $this->get_group($groupid);
}
if (!@$uid)
e(lang('Unknown group user'));
elseif (!@$user) {
$user = $userquery->get_user_details($uid);
}
if (!$group)
e(lang("Unknown group"));
if (!$user)
e(lang("Unknown user"));
//Moving group admins into an array
$groupAdmins = $group['group_admins'];
$groupAdmins = json_decode($groupAdmins, true);
if ($group['userid'] == $uid && $checkowner) {
if (@$error)
e(sprintf(lang('%s is owner of %s'), $user['username'], $group['group_name']));
return true;
}elseif (@in_array($uid, $groupAdmins)) {
if (@$error)
e(sprintf(lang('%s is admin of %s'), $user['username'], $group['group_name']));
return true;
}
return false;
}
function is_group_admin($uid, $group) {
global $db;
if (is_numeric($group))
$group = $this->get_group($group);
$groupAdmins = $group['group_admins'];
$groupAdmins = json_decode($groupAdmins, true);
if ($group['userid'] == $uid || in_array($uid, $groupAdmins)) {
return true;
} else {
return false;
}
}
/**
* Removing admin from group
*/
function remove_admin($array) {
return $this->removeAdmin($array);
}
function removeAdmin($array) {
global $userquery, $db;
extract($array);
if (!@$groupid)
e(lang('Unknown group'));
elseif (!@$group) {
$group = $this->get_group($groupid);
}
if (!@$uid)
e(lang('Unknown group user'));
elseif (!@$user) {
$user = $userquery->get_user_details($uid);
}
if (!$group)
e(lang("Unknown group"));
if (!$uid)
e(lang("Unknown user"));
//Checking if is owner or already an admin
if (!$this->is_admin(array(
'group' => $group,
'groupid' => $groupid,
'uid' => $uid,
'user' => $user))) {
e(sprintf(lang('%s is not admin of %s'), $user['username'], $group['group_name']));
return false;
} else {
$groupAdmins = $group['group_admins'];
$groupAdmins = json_decode($groupAdmins, true);
$newAdmins = array();
foreach ($groupAdmins as $gadmin)
if ($gadmin != $uid)
$newAdmins[] = $gadmin;
$groupAdmins = json_encode($newAdmins);
$db->update(tbl("groups"), array("group_admins"), array('|no_mc|' . $groupAdmins), " group_id='" . $groupid . "'");
e(sprintf(lang("%s has been removed from adminstrators of %s"), $user['username'], $group['group_name']), "m");
$db->update(tbl($this->gp_mem_tbl), array("is_admin"), array("no"), "userid='" . $user['userid'] . "' AND group_id='$groupid'");
return true;
}
}
/**
*
* @global type $cbgroup
* @param type $array
* @return type
*/
function add_feed($array) {
global $userquery;
$group_id = $array['group_id'];
if (!$group_id)
return false;
$group = $array['group'];
if (!$group)
$group = $this->get_group_details($group_id);
if (!$group)
return false;
$userid = $array['userid'];
if (!$userid)
{
if(userid())
{
$userid = userid();
$user = $userquery->udetails;
}
}
if(!$userid)
return false;
if(!$user)
$user = $array['user'];
if(!$user)
$user = get_user_details($user);
if(!$user)
return false;
if($array['message'])
$message = apply_filters($array['message'],'feed_message');
if($array['type'])
$type = $array['type'];
else
$type = 'message';
$content_id = '';
$content = '';
$content_type = '';
if($array['content_id'])
{
$content_id = $array['content_id'];
$content = $array['content'];
$content_type = $array['content_type'];
}
$action = $array['action'];
if($array['icon'])
$icon = $array['icon'];
else
$icon = '';
if($array['action_group_id'])
$action_group_id = $array['action_group_id'];
$array = array(
'message' => $message,
'message_attributes' => array(),
'userid' => userid(),
'user' => $userquery->udetails,
'content_id' => $content_id,
'content' => $content,
'content_type' => $content_type,
'object_id' => $group_id,
'object' => $group,
'object_type' => 'group',
'action_group_id' => $action_group_id,
'action' => $action,
'icon' => $icon,
);
global $cbfeeds;
$cbfeeds->add_feed($array);
}
/**
* Add Group Status..
*
* @global type $cbgroup
* @param type $array
* @return type
*/
function add_group_status($gid,$status)
{
$array = array(
'group_id' => $gid,
'message' => $status,
'action' => 'post_message'
);
$this->add_feed($array);
}
/**
* Function used to add a video in a group...
*/
function add_group_video_feed($feed)
{
global $cbfeeds;
$gid = $feed['group_id'];
$msg = $feed['message'];
$content = $cbfeeds->get_content('v',$feed['videoid'],$feed['video']);
$array = array(
'group_id' => $gid,
'message' => $msg,
'content' => $content,
'content_type' => 'video',
'content_id' => $feed['videoid'],
'action' => 'share_video'
);
$this->add_feed($array);
}
/**
* Getting group feeds..
*
* @global type $cbgroup
* @param type $array
* @return type
*/
function get_group_feeds($gid)
{
global $cbfeeds;
$feeds = $cbfeeds->get_feeds(array('type'=>'group','id'=>$gid));
return $feeds;
}
/**
* Get group link
*/
function get_link($group,$cond=NULL)
{
return group_link(array('details'=>$group));
}
}
function isGroupAdmin($array) {
global $cbgroup;
$return = $cbgroup->is_admin($array);
if ($array['assign'])
assign($array['assign'], $return); else
return $return;
}
function removeGroupAdmin($array) {
global $cbgroup;
$return = $cbgroup->removeAdmin($array);
if ($array['assign'])
assign($array['assign'], $return); else
return $return;
}
function makeGroupAdmin($array) {
global $cbgroup;
$return = $cbgroup->make_admin($array);
if ($array['assign'])
assign($array['assign'], $return); else
return $return;
}
?>