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; } ?>