Files
easystream-main/f_core/f_classes/class.contacts.php
SamiAhmed7777 0b7e2d0a5b feat: Add comprehensive documentation suite and reorganize project structure
- Created complete documentation in docs/ directory
- Added PROJECT_OVERVIEW.md with feature highlights and getting started guide
- Added ARCHITECTURE.md with system design and technical details
- Added SECURITY.md with comprehensive security implementation guide
- Added DEVELOPMENT.md with development workflows and best practices
- Added DEPLOYMENT.md with production deployment instructions
- Added API.md with complete REST API documentation
- Added CONTRIBUTING.md with contribution guidelines
- Added CHANGELOG.md with version history and migration notes
- Reorganized all documentation files into docs/ directory for better organization
- Updated README.md with proper documentation links and quick navigation
- Enhanced project structure with professional documentation standards
2025-10-21 00:39:45 -07:00

807 lines
55 KiB
PHP

<?php
/*******************************************************************************************************************
| Software Name : EasyStream
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
| Software Author : (c) Sami Ahmed
|*******************************************************************************************************************
|
|*******************************************************************************************************************
| This source file is subject to the EasyStream Proprietary License Agreement.
|
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|*******************************************************************************************************************
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|*******************************************************************************************************************/
defined('_ISVALID') or header('Location: /error');
class VContacts
{
/* general contacts layout */
public function contactsLayout()
{
global $class_filter;
$_s = substr($class_filter->clr_str($_GET["s"]), 0, 23);
$html = '
<div class="left-float wdmax">' . ($_POST ? self::cbActions($_GET["do"], 1) : null) . '</div>
<div class="wdmax left-float ct-master-wrap">
<div class="left-float wd200 ct-entry-list">
<div class="vs-column thirds">
<form id="ct-entry-selection" method="post" action="">
' . self::leftContactsList() . '
<input type="hidden" name="ct-entry-selection-hfe" value="1" />
</form>
</div>
<div class="vs-column two_thirds fit">
<div id="ct-details-wrap">' . self::contactDetails() . '</div>
</div>
</div>
</div>';
$html .= VGenerate::declareJS('$(document).ready(function(){
var clone = $("#paging-top").clone(true); $("#paging-top").detach(); $(clone).prependTo(".page-actions");
var add = $("#add-new-entry").clone(true); $("#add-new-entry").detach(); $(add).insertBefore(".section-top-bar"); $(\'<div class="clearfix"></div>\').insertAfter(add);
var c = $("#ct-contact-add-wrap").clone(true); $("#ct-contact-add-wrap").detach(); $(c).insertAfter("#add-new-entry");
' . ($_GET["do"] == 'add' ? '$(".section-top-bar").removeClass("section-top-bar").addClass("section-top-bar-add");' : null) . '
' . ($_s == 'message-menu-entry7-sub' ? '$("#new-contact, #ct-contact-add-wrap, #new-label, #add-new-label").detach();' : null) . '
});');
return $html;
}
/* editing a contact */
public function ctEdit()
{
$validate = self::ctValidation('edit');
echo $notify = VGenerate::noticeTpl('', $validate[0], $validate[1]);
}
/* adding a contact */
public function addNew()
{
global $smarty;
$validate = self::ctValidation('new');
echo $notify = VGenerate::noticeTpl(' top-padding5', $validate[0], $validate[1]);
$smarty->display('tpl_frontend/tpl_msg/tpl_contact_add.tpl');
}
/* validating add/edit */
public function ctValidation($mode = '')
{
global $cfg, $class_database, $class_filter, $db, $language;
$notice_message = null;
$email_check = new VValidation;
$ct_name = $class_filter->clr_str($_POST["frontend_global_name"]);
$ct_user = $class_filter->clr_str($_POST["frontend_global_username"]);
$ct_mail = $class_filter->clr_str($_POST["frontend_global_email"]);
$update_id = $mode == 'edit' ? intval($_POST["section_entry_value"]) : null;
$error_message = ($mode == 'new' and $ct_user == '' and $ct_mail == '') ? $language["err.new.contacts"] : (($mode == 'edit' and self::getContactUsername($update_id) == '' and $ct_mail == '') ? $language["err.new.contacts"] : null);
$error_message = ($error_message == '' and $mode == 'new' and $ct_user != '' and $class_database->singleFieldValue('db_usercontacts', 'ct_username', 'usr_id', intval($_SESSION["USER_ID"])) == $ct_user) ? $language["notif.contacts.present"] : $error_message;
$error_message = ($error_message == '' and $mode == 'new' and $ct_mail != '' and $class_database->singleFieldValue('db_usercontacts', 'ct_email', 'usr_id', intval($_SESSION["USER_ID"])) == $ct_mail) ? $language["notif.contacts.present"] : $error_message;
$error_message = ($error_message == '' and ($ct_user == $_SESSION["USER_NAME"] or $ct_mail == $class_database->singleFieldValue('db_accountuser', 'usr_email', 'usr_id', intval($_SESSION["USER_ID"])))) ? $language["err.self.contacts"] : $error_message;
$error_message = ($error_message == '' and $ct_user != '' and !VUserinfo::existingUsername($ct_user)) ? $language["err.new.inv.user"] : $error_message;
$error_message = ($error_message == '' and $ct_mail != '' and !$email_check->checkEmailAddress($ct_mail)) ? $language["frontend.signup.email.invalid"] : $error_message;
if ($error_message == '') {
switch ($mode) {
case "new":
$notice_message = $language["notif.contacts.added"];
$block_db = serialize(array("bl_files" => 1, "bl_channel" => 1, "bl_comments" => 1, "bl_messages" => 1, "bl_subscribe" => 1));
$update_ar = array("usr_id" => intval($_SESSION["USER_ID"]), "pwd_id" => VUserinfo::generateRandomString(10), "ct_name" => $ct_name, "ct_username" => $ct_user, "ct_email" => $ct_mail, "ct_datetime" => date("Y-m-d H:i:s"), "ct_block_cfg" => $block_db);
$update_do = $class_database->doInsert('db_usercontacts', $update_ar);
$update_id = $db->Insert_ID();
echo $update_js = $update_id > 0 ? VGenerate::declareJS('wrapLoad(current_url + menu_section + "?s=' . $class_filter->clr_str($_GET["s"]) . '&n=' . $update_id . '");') : null;
break;
case "edit":
$notice_message = $language["notif.contacts.updated"];
$update_ar = array("ct_name" => $ct_name, "ct_email" => $ct_mail);
foreach ($update_ar as $dbf => $val) {$q .= "`" . $dbf . "` = '" . $val . "', ";}
$update_do = $db->execute(sprintf("UPDATE `db_usercontacts` SET %s WHERE `ct_id`='%s' LIMIT 1;", (substr($q, 0, -2)), $update_id));
$update_js = $db->Affected_Rows() > 0 ? self::updatedContactJS($update_id) : null;
break;
}
if ($update_id > 0) {
if (is_array($_POST["contact-add-to-label"]) and count($_POST["contact-add-to-label"]) > 0) {
foreach ($_POST["contact-add-to-label"] as $lb_id) {
VMessages::addToLabelActions('contact-add', 1, $update_id, $lb_id);
}
}
if (is_array($_POST["contact-del-from-label"]) and count($_POST["contact-del-from-label"]) > 0) {
foreach ($_POST["contact-del-from-label"] as $lb_id) {
VMessages::addToLabelActions('contact-del', 1, $update_id, $lb_id);
}
}
} else {
$error_message = $language["notif.contacts.present"];
}
}
return array($error_message, $notice_message);
}
/* friends/block actions [for cb selected]*/
public function ctAction($action, $force = '', $channels = '')
{
global $cfg, $db, $class_database, $language;
$f_check = $force == '' ? $_POST["current_entry_id"] : $force;
if (count($f_check) > 0) {
$bl_db = null;
switch ($action) {
case "cb-block":
$bl_fld = 'ct_blocked';
$bl_val = 1;
break;
case "cb-unblock":
$bl_fld = 'ct_blocked';
$bl_val = 0;
break;
case "cb-addfr":
$bl_db = "`ct_datetime`='" . date("Y-m-d H:i:s") . "', ";
$bl_fld = 'ct_friend';
$bl_val = $cfg["approve_friends"] == 1 ? 0 : 1;
break;
case "cb-remfr":
$bl_fld = 'ct_friend';
$bl_val = 0;
break;
default:
$bl_val = 0;
break;
}
foreach ($f_check as $ct_id) {
$me_frdb = $action == 'cb-addfr' ? $db->execute(sprintf("SELECT `ct_friend` from `db_usercontacts` WHERE `usr_id`='%s' AND `ct_username`='%s' LIMIT 1;", VUserinfo::getUserID($class_database->singleFieldValue('db_usercontacts', 'ct_username', 'ct_id', $ct_id)), $_SESSION["USER_NAME"])) : null;
$me_fr = $action == 'cb-addfr' ? ($me_frdb->fields["ct_friend"] != 1 ? 0 : 1) : 0;
$is_fr = $action == 'cb-addfr' ? $class_database->singleFieldValue('db_usercontacts', 'ct_friend', 'ct_id', $ct_id) : null;
$bl_val = (($bl_val == 0 and $is_fr == 1) or $me_fr == 1) ? 1 : $bl_val;
$bl_stat = $action == 'cb-addfr' ? self::getBlockStatus(VUserinfo::getUserID($class_database->singleFieldValue('db_usercontacts', 'ct_username', 'ct_id', $ct_id)), $_SESSION["USER_NAME"]) : null;
$bl_opt = $action == 'cb-addfr' ? self::getBlockCfg('bl_messages', VUserinfo::getUserID($class_database->singleFieldValue('db_usercontacts', 'ct_username', 'ct_id', $ct_id)), $_SESSION["USER_NAME"]) : null;
if ($action == 'cb-addfr' and $bl_stat == 1 and $bl_opt == 1) {
if ($channels != '') {
echo VGenerate::noticeTpl('', $language["notif.error.blocked.request"], '');
return false;
} else {
return false;
}
}
$bl_val = ($action == 'cb-addfr' and $bl_val == 1 and $bl_stat == 1 and $bl_opt == 1) ? 0 : $bl_val;
echo $bl_js = ($action == 'cb-addfr' and $bl_val == 0 and $bl_stat == 1 and $bl_opt == 1) ? ($channels == '' ? VGenerate::declareJS('$(".notice-message-text").html("' . $language["notif.error.blocked.request"] . '")') : VGenerate::noticeTpl('', $language["notif.error.blocked.request"], '')) : null;
$invite = ($action == 'cb-addfr' and $is_fr == 0 and $me_fr != 1 and (($bl_stat == 1 and $bl_opt == 0) or $bl_stat == 0)) ? self::inviteContact($ct_id) : null;
$db->execute(sprintf("UPDATE `db_usercontacts` SET %s `%s`='%s' WHERE `ct_id`='%s' AND `ct_username`!='' AND `usr_id`='%s' AND `ct_active`='1' LIMIT 1;", $bl_db, $bl_fld, $bl_val, $ct_id, intval($_SESSION["USER_ID"])));
if ($channels != '') {
echo VGenerate::noticeTpl('', '', $language["notif.success.request"]);
}
}
}
}
/* invite contacts */
public function inviteContact($ct_id)
{
global $db, $cfg, $class_database, $notifier, $language;
$mail_arr = array();
$cts = $db->execute(sprintf("SELECT `ct_username`, `ct_email`, `ct_blocked` FROM `db_usercontacts` WHERE `ct_id`='%s' AND `ct_friend`='0' LIMIT 1;", $ct_id));
$ct_user = $cts->fields["ct_username"];
$ct_mail = $cts->fields["ct_email"];
$ct_blk = $cts->fields["ct_blocked"];
$ct_not = $class_database->singleFieldValue('db_accountuser', 'usr_mail_friendinv', 'usr_id', intval(VUserinfo::getUserID($ct_user)));
$bl_stat = self::getBlockStatus(VUserinfo::getUserId($ct_user), $_SESSION["USER_NAME"]);
$bl_opt = self::getBlockStatus('bl_messages', VUserinfo::getUserId($ct_user), $_SESSION["USER_NAME"]);
if ($ct_blk == 0 and (($bl_stat == 1 and $bl_opt == 0) or $bt_stat == 0)) {
if ($ct_user != '' and $ct_mail != '' and $cfg["approve_friends"] == 1) {
$notify_type = 'invite_user';
$mail_arr[0] = $ct_mail;
$notifier->dst_mail = $ct_mail;
$notifier->dst_name = $ct_user;
} elseif ($ct_user != '' and $ct_mail == '' and $cfg["approve_friends"] == 1) {
$notify_type = 'invite_user';
$mail_arr[0] = $class_database->singleFieldValue('db_accountuser', 'usr_email', 'usr_user', $ct_user);
$notifier->dst_mail = $mail_arr[0];
$notifier->dst_name = $ct_user;
} elseif ($ct_user == '' and $ct_mail != '') {
$notify_type = 'invite_contact';
$mail_arr[0] = $ct_mail;
$notifier->dst_mail = $ct_mail;
}
$mail_do = VNotify::queInit($notify_type, $mail_arr, $ct_id);
}
}
/* check invite owner */
public function inviteCheck()
{
global $class_database, $class_filter, $db, $language, $smarty;
$exp = 24 * 7; //expires in 7 days
$db_id = $class_filter->clr_str($_GET["sid"]);
$db_q = sprintf("SELECT A.`usr_id`, A.`ct_username`, A.`ct_email`, B.`usr_id`, B.`create_date`, B.`code_used`, B.`code_active` FROM `db_usercontacts` A, `db_usercodes` B WHERE A.`pwd_id`=B.`pwd_id` AND B.`pwd_id`='%s' AND B.`code_active`='1';", $db_id);
$db_r = $db->execute($db_q);
if ($db_r->fields["usr_id"] == '') {
return 'tpl_error_max';
}
if ($_SESSION["USER_ID"] == $db_r->fields["usr_id"]) {
$own_text = str_replace('##INV##', ($db_r->fields["ct_username"] != '' ? '<a href="' . $cfg["main_url"] . '/' . VHref::getKey("user") . '/' . $db_r->fields["ct_username"] . '" class="font14pt">' . $db_r->fields["ct_username"] . '</a>' : $db_r->fields["ct_email"]), $language["contacts.friends.h1.your"]);
$own_info = str_replace(array('##DATE##', '##TIME##'), array('<span class="bold">' . date('M. d, Y H:i A', strtotime($db_r->fields["create_date"])) . '</span>', ($exp / 24) . ' ' . $language["frontend.global.days"]), $language["contacts.friends.your.text"]);
$smarty->assign('invite_text_h1', $own_text);
$smarty->assign('invite_text_info', $own_info);
$smarty->assign('my_invite', 1);
} else {
if ($_SESSION["USER_ID"] > 0 and $_SESSION["USER_ID"] != $db_r->fields["usr_id"] and $db_r->fields["ct_username"] == '') {return 'tpl_error_max';}
$smarty->assign('invited', $class_database->singleFieldValue('db_accountuser', 'usr_user', 'usr_id', $db_r->fields["usr_id"]));
}
}
/* approve invite */
public function inviteApprove($inv_key = '', $msg_id = '')
{
global $db, $cfg, $class_database, $class_filter, $language;
if ($cfg["approve_friends"] == 0) {
return false;
}
$db_q = sprintf("SELECT A.`type`, A.`usr_id`, A.`pwd_id`, B.`usr_id`, B.`pwd_id`, B.`ct_username` FROM `db_usercodes` A, `db_usercontacts` B WHERE
A.`usr_id` = B.`usr_id` AND A.`pwd_id` = B.`pwd_id` AND A.`pwd_id` = '%s' AND A.`code_active` = '1' AND A.`code_used` = '0' AND
B.`ct_friend` = '0' AND B.`ct_blocked` = '0'", ($inv_key != '' ? $inv_key : $class_filter->clr_str($_POST["inv_key"])));
$db_res = $db->execute($db_q);
if ($db_res->RecordCount() > 0) {
$db_uid = $db_res->fields["usr_id"];
$db_pwd = $db_res->fields["pwd_id"];
$db_str = VUserinfo::generateRandomString(10);
$db_usr = $class_database->singleFieldValue('db_accountuser', 'usr_user', 'usr_id', $db_uid);
$db_q = $db->execute(sprintf("UPDATE `db_usercodes` SET `use_date`='%s', `code_used`='1' WHERE `usr_id`='%s' AND `pwd_id`='%s' LIMIT 1;", date("Y-m-d H:i:s"), $db_uid, $db_pwd));
$db_q = $db->execute(sprintf("UPDATE `db_usercontacts` SET `ct_friend`='1' WHERE `usr_id`='%s' AND `pwd_id`='%s' AND `ct_username`='%s' AND `ct_friend`='0' LIMIT 1;", $db_uid, $db_pwd, $_SESSION["USER_NAME"]));
$db_q = $db->execute(sprintf("UPDATE `db_messaging` SET `msg_active`='0' WHERE `msg_id`='%s' AND `msg_to`='%s' LIMIT 1;", ($msg_id != '' ? $msg_id : intval($_POST["section_subject_value"])), intval($_SESSION["USER_ID"])));
$db_q = !$class_database->doInsert('db_usercontacts', array("usr_id" => intval($_SESSION["USER_ID"]), "pwd_id" => $db_str, "ct_username" => $db_usr, "ct_datetime" => date("Y-m-d H:i:s"), "ct_friend" => 1)) ? $db->execute(sprintf("UPDATE `db_usercontacts` SET `ct_friend`='1' WHERE `usr_id`='%s' AND `ct_username`='%s' AND `ct_friend`='0' LIMIT 1;", intval($_SESSION["USER_ID"]), $db_usr)) : null;
echo VGenerate::jqHtml('#message-menu-entry4-count', VMessages::messageCount('message-menu-entry4'));
echo VGenerate::jqHtml('#message-menu-entry7-count', VMessages::messageCount('message-menu-entry7'));
echo VGenerate::jqHtml('#mme7c1', self::getContactCount('message-menu-entry7-sub1'));
} elseif ($db_res->fields["code_active"] == 0 and $_GET["do"] != 'cb-approve') {
echo $db_res->fields["code_active"];
echo VGenerate::noticeTpl('', $language["notif.error.blocked.request"], '');
}
}
/* send message action [for cb selected] */
public function messageSelected()
{
global $smarty, $class_filter;
if (count($_POST["current_entry_id"]) > 0) {
foreach ($_POST["current_entry_id"] as $ct_id) {
$ct_usr = self::getContactUsername($class_filter->clr_str($ct_id));
$ct_str .= $ct_usr != '' ? $ct_usr . ',' : null;
}
$to = substr($ct_str, 0, -1);
echo $to_js = VGenerate::declareJS('$("#ct-wrapper").mask(" "); $("#ct-wrapper").load(current_url+menu_section+"?do=compose", function(){ $("input[name$=\"msg_label_to\"]").val("' . $to . '"); $("#ct-wrapper").unmask(); });');
}
}
/* remove contacts from all labels when using cb delete */
public function ctLabelClear($ct_id)
{
global $db;
$lb_q = $db->execute(sprintf("SELECT `lb_id` FROM `db_userlabels` WHERE `usr_id`='%s' AND `lb_for`='message-menu-entry7' AND lb_ids!='';", intval($_SESSION["USER_ID"])));
$lb_ids = $lb_q->getrows();
if (count($lb_ids) > 0) {
foreach ($lb_ids as $lb_id) {
$_lb_cl = VMessages::addToLabelActions('contact-del', 1, $ct_id, $lb_id[0]);
}
}
}
/* label actions [for cb selected] */
public function ctMassActions($action)
{
global $db, $class_filter;
switch ($action) {
case "cb-label-add":
case "cb-label-clear":
$lb_val = ($action == 'cb-label-add' and $_POST["label_add_val"] > 0) ? intval($_POST["label_add_val"]) : (($action == 'cb-label-clear' and $_POST["label_cl_val"] > 0) ? intval($_POST["label_cl_val"]) : null);
if (isset($_POST["current_entry_id"]) and is_array($_POST["current_entry_id"]) and count($_POST["current_entry_id"]) > 0) {
foreach ($_POST["current_entry_id"] as $ct_id) {
$_fp = ($action == 'cb-label-add' ? 'contact-add' : ($action == 'cb-label-clear' ? 'contact-del' : null));
$_act = VMessages::addToLabelActions($_fp, 1, $ct_id, $lb_val);
}
}
break;
case "cb-delete":
if (isset($_POST["current_entry_id"]) and is_array($_POST["current_entry_id"]) and count($_POST["current_entry_id"]) > 0) {
foreach ($_POST["current_entry_id"] as $ct_id) {
$_q .= sprintf(' OR `ct_id`="%s" ', $class_filter->clr_str($ct_id));
$_lb_cl = self::ctLabelClear($class_filter->clr_str($ct_id));
}
$cb_do = $db->execute(sprintf('DELETE FROM `db_usercontacts` WHERE `usr_id`="%s" AND %s LIMIT %s;', intval($_SESSION["USER_ID"]), '(' . substr($_q, 3) . ')', count($_POST["current_entry_id"])));
}
break;
}
}
/* checkbox (cb) actions */
public function cbActions($action, $notice = '')
{
global $cfg, $language;
$error_message = ((isset($_POST["current_entry_id"]) and count($_POST["current_entry_id"]) < 1) or !isset($_POST["current_entry_id"])) ? $language["notif.no.contacts.select"] : null;
$notice_message = ($_POST and $error_message == '' and $action != 'cb-sendmsg') ? $language["notif.success.request"] : null;
$notify = VGenerate::noticeTpl('', $error_message, $notice_message);
if ($error_message != '' and $action != 'cb-approve' and $action != 'block') {return $notify;} elseif ($error_message != '' and $action == 'cb-approve') {echo $notify;return false;}
switch ($action) {
case "cb-label-add":
case "cb-label-clear":
case "cb-delete":
$do_cb = self::ctMassActions($action);
$do_js = $cfg["message_count"] == 1 ? VGenerate::jqHtml('#message-menu-entry7-count', self::getAllContactCount()) : null;
$do_js = ($cfg["message_count"] == 1 and $cfg["user_friends"] == 1) ? VGenerate::jqHtml('#mme7c1', self::getContactCount('message-menu-entry7-sub1')) : null;
$do_js = ($cfg["message_count"] == 1 and $cfg["user_blocking"] == 1) ? VGenerate::jqHtml('#mme7c2', self::getContactCount('message-menu-entry7-sub2')) : null;
switch ($_GET["s"]) {
case "message-menu-entry3":$d1 = '#new-comment-count';
$d2 = 'comment-new';
break;
default:$d1 = '#new-message-count';
$d2 = 'message-new';
break;
}
echo $do_js = $action == 'cb-delete' ? VGenerate::declareJS('$("span.blued").removeClass("no-display"); $("' . $d1 . '").html("' . VMessages::messageCount($d2) . '");') : null;
break;
case "cb-addfr":
case "cb-remfr":
if ($notice == 1 and $action == 'cb-addfr') {
break;
}
$do_cb = self::ctAction($action);
$do_js = ($cfg["message_count"] == 1 and $cfg["user_friends"] == 1) ? VGenerate::jqHtml('#mme7c1', self::getContactCount('message-menu-entry7-sub1')) : null;
break;
case "cb-sendmsg":
$db_cb = self::messageSelected();
break;
case "block":
global $db, $class_database;
$do_db = $db->execute(sprintf("UPDATE `db_usercontacts` SET `ct_blocked`='1' WHERE `usr_id`='%s' AND `ct_username`='%s' AND `ct_blocked`='0' LIMIT 1;", intval($_SESSION["USER_ID"]), VUserinfo::getUserName(intval($_POST["section_reply_value"]))));
$db_db = ($db->Affected_Rows() == 0) ? $class_database->doInsert('db_usercontacts', array("usr_id" => intval($_SESSION["USER_ID"]), "pwd_id" => VUserinfo::generateRandomString(10), "ct_username" => VUserinfo::getUserName(intval($_POST["section_reply_value"])), "ct_datetime" => date("Y-m-d H:i:s"), "ct_blocked" => 1)) : null;
$do_js = ($cfg["message_count"] == 1 and $cfg["user_blocking"] == 1) ? VGenerate::jqHtml('#mme7c2', self::getContactCount('message-menu-entry7-sub2')) : null;
$do_js = ($cfg["message_count"] == 1 and $cfg["user_blocking"] == 1) ? VGenerate::jqHtml('#message-menu-entry7-count', VMessages::MessageCount('message-menu-entry7')) : null;
break;
case "cb-block":
case "cb-unblock":
$do_cb = self::ctAction($action);
$do_js = ($cfg["message_count"] == 1 and $cfg["user_blocking"] == 1) ? VGenerate::jqHtml('#mme7c2', self::getContactCount('message-menu-entry7-sub2')) : null;
break;
}
if ($error_message == '' and $notice_message != '') {
return $notify;
}
}
/* update edited contact */
public function updatedContactJS($update_id = '')
{
global $class_filter;
$ct_name = $class_filter->clr_str($_POST["frontend_global_name"]);
$ct_mail = $class_filter->clr_str($_POST["frontend_global_email"]);
$ct_name1 = $ct_name == '' ? '&nbsp;' : '(' . $ct_name . ')';
$ct_mail1 = $ct_mail == '' ? $language["frontend.global.none"] : $ct_mail;
echo $all_js = VGenerate::declareJS('$("#ct-entryname-' . $update_id . '").html("' . $ct_name1 . '");');
echo $all_js = VGenerate::declareJS('$("#ct-entrymail-' . $update_id . '").html("' . $ct_mail1 . '");');
echo $all_js = ($ct_mail != '' ? VGenerate::declareJS('$("#ct-entrydetailsmail-' . $update_id . '").html("<a href=\"mailto:' . $ct_mail . '\">' . $ct_mail . '</a>");') : null);
echo $all_js = (($ct_mail != '' and self::getContactUsername($update_id) == '') ? VGenerate::declareJS('$("#ct-entry-span' . $update_id . '>span").html("' . $ct_mail . '");') : null);
echo $all_js = ($ct_mail != '' ? VGenerate::declareJS('$("#ct-entrymailinput-' . $update_id . '").val("' . $ct_mail . '");') : null);
}
/* get contact username from contact id */
public function getContactUsername($ct_id)
{
global $db;
$ctq = $db->execute(sprintf("SELECT `ct_username` FROM `db_usercontacts` WHERE `ct_id`='%s' AND `usr_id`='%s' LIMIT 1;", intval($ct_id), intval($_SESSION["USER_ID"])));
return $ctu = $ctq->fields["ct_username"];
}
/* contacts count */
public function getContactCount($for)
{
return '(' . count(self::contactsListQuery($for)) . ')';
}
/* all contacts count, used on cb delete jq update */
public function getAllContactCount()
{
global $db;
$ct = $db->execute(sprintf("SELECT COUNT(*) as `ct_total` FROM `db_usercontacts` WHERE `usr_id`='%s' AND `ct_active`='1' ORDER BY `ct_id` DESC;", intval($_SESSION["USER_ID"])));
return $cts = '(' . $ct->fields["ct_total"] . ')';
}
/* build contact queries and get entries */
public function contactsListQuery($forced = '')
{
global $db, $class_filter;
$_s = $class_filter->clr_str($_GET["s"]);
$_for = $forced != '' ? $forced : $_s;
switch ($_for) {
case "message-menu-entry7-sub1": //friends
$ctq = " AND `ct_friend`='1' ";
break;
case "message-menu-entry7-sub2": //blocked users
$ctq = " AND `ct_blocked`='1' ";
break;
default:
$lb_id = VMessages::getLabelID($_s);
if ($lb_id > 0) {
$lq = $db->execute(sprintf("SELECT `lb_ids` FROM `db_userlabels` WHERE `usr_id`='%s' AND `lb_id`='%s' AND `lb_for`='%s' AND `lb_active`='1' LIMIT 1;", intval($_SESSION["USER_ID"]), $lb_id, VMessages::currentMenuEntry($_s)));
$lqs = $lq->fields["lb_ids"];
$lqa = $lqs != '' ? unserialize($lqs) : array();
if (count($lqa) > 0) {
foreach ($lqa as $lq_id) {
$ct_q .= "`ct_id`='" . $lq_id . "' OR ";
}
$ctq = ' AND (' . substr($ct_q, 0, -4) . ')';
} else {
$ctq = " AND `ct_id`='0'";
}
}
}
$ct = $db->execute(sprintf("SELECT `ct_id`, `ct_name`, `ct_username`, `ct_email`, `ct_friend`, `ct_blocked`, `ct_datetime`, `pwd_id` FROM `db_usercontacts` WHERE `usr_id`='%s' AND `ct_active`='1' %s ORDER BY `ct_id` DESC;", intval($_SESSION["USER_ID"]), $ctq));
return $cts = $ct->getrows();
}
/* label checkboxes for add/edit */
public function labelCheckboxes($ct_id = '')
{
global $db;
$lb = $db->execute(sprintf("SELECT `lb_name`, `lb_id` FROM `db_userlabels` WHERE `usr_id`='%s' AND `lb_for`='%s' AND `lb_active`='1';", intval($_SESSION["USER_ID"]), VMessages::currentMenuEntry($_GET["s"])));
$lbs = $lb->getrows();
if (count($lbs) > 0) {
foreach ($lbs as $lb_name) {
$html .= VGenerate::simpleDivWrap('row no-top-padding edit-labels', 'labelCheckboxes' . $lb_name[1], '<input type="checkbox" id="dfc' . $lb_name[1] . '" style="display: none;" class="dfc" name="contact-del-from-label[]" value="' . $lb_name[1] . '" /><div class="icheck-box"><input type="checkbox" ' . self::selectedLabel($ct_id, $lb_name[1]) . ' id="efc' . $lb_name[1] . '" class="efc" name="contact-add-to-label[]" value="' . $lb_name[1] . '" /><label>' . $lb_name[0] . '</label></div>');
}
$js = '$(".efc").click(function(){ var this_val = $(this).val(); if ($(this).is(":checked")) { $("#labelCheckboxes"+this_val+" input[class=dfc]").prop("checked", false); } else { $("#labelCheckboxes"+this_val+" input[class=dfc]").prop("checked", true); } });';
$js .= '$(".efc").on("ifUnchecked", function(event){ var this_val = $(this).val(); $("#labelCheckboxes"+this_val+" input[class=dfc]").prop("checked", true); });';
$js .= '$(".efc").on("ifChecked", function(event){ var this_val = $(this).val(); $("#labelCheckboxes"+this_val+" input[class=dfc]").prop("checked", false); });';
$html_js = VGenerate::declareJS($js);
}
return $html . $html_js;
}
/* right side contact details master wrapper */
public function contactDetails()
{
global $language, $smarty;
$html = VGenerate::simpleDivWrap('all-paddings7 bottom-border', '', '<article><h3 class="content-title"><i class="icon-user"></i><span class="ct-header" id="ct-header">' . $language["contacts.details.selected"] . ' (<span id="ct-header-count">' . (intval($_GET["n"]) > 0 ? '1' : '0') . '</span>)</span><span class="ct-header no-display" id="ct-header-new">' . $language["contact.add.new"] . '</span><span class="no-display ct-header" id="ct-header-edit">' . $language["contact.edit.ct"] . '</span></h3><div class="line"></div></article>');
$html .= VGenerate::simpleDivWrap('empty-folder center no-margin' . (intval($_GET["n"]) > 0 ? ' no-display' : null), 'ct-no-details', $language["err.no.contacts"]);
$html .= VGenerate::simpleDivWrap('left-float wdmax', 'ct-contact-details-wrap', self::rightContactsListing());
return $html;
}
/* left side contacts menu + jquery */
public function leftContactsList()
{
global $language, $class_filter;
$cts = self::contactsListQuery();
$_s = isset($_GET["s"]) ? $class_filter->clr_str($_GET["s"]) : '';
if (count($cts) > 0) {
$html = '
<article>
<h3 class="content-title" style="margin-left: 10px;"><i class="icon-address-book"></i>' . $language["msg.entry.list"] . '</h3>
<div class="line"></div>
</article>
';
foreach ($cts as $ct_val) {
$ct_v = $ct_val[2] != '' ? $ct_val[2] : (($ct_val[2] == '' and $ct_val[3] != '') ? $ct_val[3] : null);
$html .= '
<div class="row no-top-padding ct-entries pointer' . (intval($_GET["n"]) == $ct_val[0] ? ' ct-entry-bg' : null) . '" id="ct-entrylisting' . $ct_val[0] . '">
<div class="lh20 left-float left-margin7 icheck-box ct">
<input type="checkbox" ' . (intval($_GET["n"]) == $ct_val[0] ? 'checked="checked"' : null) . 'class="ct-entry-check" name="current_entry_id[]" value="' . $ct_val[0] . '">
<span class="left-float lh20 wd170" id="ct-entry-span' . $ct_val[0] . '">
<label class="ct-entry-name">' . $ct_v . '</label>
</span>
</div>
</div>';
}
/* click on entry name */
$js1 = 'var p_id = $(this).parent().attr("id"); $("#contact-add-cancel").click();';
$js1 .= 'if ($("#"+p_id.replace("-span", "listing")+" .icheck-box.ct>div:first").hasClass("checked")) {';
$js1 .= '$("#"+p_id.replace("-span", "listing")+" .icheck-box.ct input").iCheck("check");';
$js1 .= '}';
$js1 .= '$(".ct-entries").removeClass("ct-entry-bg");';
$js1 .= '$("#"+p_id.replace("-span", "listing")).addClass("ct-entry-bg");';
$js1 .= '$("#ec-"+$("#"+p_id.replace("-span", "listing")+" div input").val()).removeClass("no-display");';
$js1 .= '$("#ct-no-details").addClass("no-display");';
$js1 .= '$("#"+p_id.replace("-span", "listing")+" .icheck-box.ct>div:first").addClass("checked");';
$js1 .= '$("#"+p_id.replace("-span", "listing")+" .icheck-box.ct input").iCheck("check");';
$js1 .= '$("#ct-header-count").html($(".ct-entry-check:checked").length);';
/* click on checkbox */
$js2 = '$(".ct-entries").removeClass("ct-entry-bg");';
$js2 .= '$("#contact-add-cancel").click();';
$js2 .= 'var c_sel = $("input.ct-entry-check:checked").length-1; $("#ct-header-count").html(c_sel);';
$js2 .= 'if(c_sel > 0){$("#ct-no-details").addClass("no-display");}else{$("#ct-no-details").removeClass("no-display");}';
$js2 .= 'if(c_sel == 0){$("#ec-"+$(this).val()).addClass("no-display");$("#ct-header-count").html("0");}else{$("#ec-"+$(this).val()).addClass("no-display");}';
/* click on entry again */
$js3 = 'var pr_id = $(this).parent().attr("id");';
$js3 .= 'if($(this).next().is(":visible"))return;';
$js3 .= '$(".ct-detailed").addClass("no-display").removeClass("no-display").hide();';
$js3 .= '$(".ct-bullet-in").removeClass("ct-bullet-in");';
$js3 .= '$("#"+pr_id+">div.ct-detailed").removeClass("no-display").stop().slideDown();';
$js3 .= '$("#"+pr_id+">div.ct-bullet-out").addClass("ct-bullet-in");';
$js3 .= '$("#ct-header-edit").addClass("no-display");';
$js3 .= '$("#ct-header").removeClass("no-display");';
/* click on bullet arrow */
$js4 = 'var pr_id = $(this).parent().attr("id"); $("#"+pr_id+">div.ct-bullet-label").click();';
/* click on unselect */
$js5 = '$("#ct-entrylisting"+$(this).val()+" div input").attr("checked", false);';
$js5 .= '$("#ct-entrylisting"+$(this).val()+" .icheck-box.ct>div:first").removeClass("checked");';
$js5 .= '$("#ct-entrylisting"+$(this).val()+" .icheck-box.ct input").iCheck("uncheck");';
$js5 .= '$("#ct-entrylisting"+$(this).val()).removeClass("ct-entry-bg");';
$js5 .= '$("#ct-detailed-"+$(this).val()).addClass("no-display");';
$js5 .= '$("#ec-"+$(this).val()+">div").removeClass("ct-bullet-in");';
$js5 .= '$("#ec-"+$(this).val()).addClass("no-display");';
$js5 .= '$("#ct-header-count").html($("input.ct-entry-check:checked").length);';
$js5 .= 'if($("input.ct-entry-check:checked").length==0){$("#ct-no-details").removeClass("no-display");}';
/* click on all open/all closed */
$js6 = '$(".ct-bullet-out").addClass("ct-bullet-in"); $(".ct-detailed").removeClass("no-display").show(); resizeDelimiter();';
$js7 = '$(".ct-bullet-in").removeClass("ct-bullet-in"); $(".ct-detailed").addClass("no-display"); resizeDelimiter();';
/* click on edit */
$js8 = '$("#ct-listwrap-"+$(this).val()).stop().slideUp();';
$js8 .= '$("#ct-editwrap-"+$(this).val()).stop().slideDown();';
$js8 .= '$("#ct-header-edit").removeClass("no-display");';
$js8 .= '$("#ct-header").addClass("no-display");';
/* click on edit/cancel */
$js9 = '$("#ct-listwrap-"+$(this).attr("rel-val")).stop().slideDown();';
$js9 .= '$("#ct-editwrap-"+$(this).attr("rel-val")).stop().slideUp();';
$js9 .= '$("#ct-header-edit").addClass("no-display");';
$js9 .= '$("#ct-header").removeClass("no-display");';
$js9 .= '$("#error-message").click();';
$js9 .= '$("#notice-message").click();';
/* click on ct/bg */
$js10 = 'var pr_id = $(this).parent().attr("id"); $("#"+pr_id+">div>button.edit-contact").click();';
/* click on save changes */
$js11 = 'var this_id = $(this).val(); var fr_id = $(this).parent().parent().parent().attr("id").replace("editwrap", "editform"); var pr_id = $(this).parent().parent().attr("id");';
$js11 .= '$("#ec-"+this_id).mask(" "); $.post(current_url + menu_section + "?s=' . $_s . '&do=ctedit", $("#"+fr_id).serialize(), function(data){ $("#ct-noticewrap-"+this_id).html(data); resizeDelimiter(); $("#ec-"+this_id).unmask(); });';
/* click on reset */
$js12 = 'var pr_id = $(this).parent().parent().parent().parent().attr("id").replace("detailed", "editform"); $("#"+pr_id)[0].reset();';
/* click on unblock */
$js13 = 'var fr_id = "#ct-"+$(this).attr("id");';
$js13 .= '$(fr_id).parent().mask(" "); $.post(current_url + menu_section + "?s=' . $_s . '&do=cb-unblock", $(fr_id).serialize(), function(data){ $("#siteContent").html(data); $(fr_id).parent().unmask(); });';
/* click on remove from friends */
$js14 = 'var fr_id = "#ct-"+$(this).attr("id");';
$js14 .= '$(".col1").mask(" "); $.post(current_url + menu_section + "?s=' . $_s . '&do=cb-remfr", $(fr_id).serialize(), function(data){ $(".col1").html(data); $(".col1").unmask(); });';
/* click on show block options */
$js15 = 'var bl_id = $(this).attr("id"); $("#user-"+bl_id).stop().slideToggle();';
/* click on the block options */
//$js16 = 'var fr_id = "#"+$(this).parent().parent().parent().attr("id");';
//$js16 .= '$.post(current_url + menu_section + "?s='.$_s.'&do=set-bl", $(fr_id).serialize(), function(data){ $(fr_id+"-update").html(data); });';
$js161 = '$(".icheck-box input.set-bl-opt").on("ifChecked", function(event){ var fr_id = "#"+$(this).parent().parent().parent().attr("id"); $.post(current_url + menu_section + "?s=' . $_s . '&do=set-bl", $(fr_id).serialize(), function(data){ $(fr_id+"-update").html(data); }); });';
$js161 .= '$(".icheck-box input.set-bl-opt").on("ifUnchecked", function(event){ var fr_id = "#"+$(this).parent().parent().parent().attr("id"); $.post(current_url + menu_section + "?s=' . $_s . '&do=set-bl", $(fr_id).serialize(), function(data){ $(fr_id+"-update").html(data); }); });';
/* all js functions */
//$all_js = '$(".ct-entry-name").click(function(){ ' . $js1 . ' });';
$all_js .= '$(".ct-entry-check").click(function(){ ' . $js2 . ' });';
$all_js .= '$(".ct-bullet-label").click(function(){ ' . $js3 . ' });';
$all_js .= '$(".ct-bullet-out").click(function(){ ' . $js4 . ' });';
$all_js .= '$(".unsel-contact").click(function(){ ' . $js5 . ' });';
$all_js .= '$("#all-open-ct").click(function(){ ' . $js6 . ' });';
$all_js .= '$("#all-close-ct").click(function(){ ' . $js7 . ' });';
$all_js .= '$(".edit-contact").click(function(){ ' . $js8 . ' });';
$all_js .= '$(".edit-cancel").click(function(){ ' . $js9 . ' });';
$all_js .= '$(".ct-change").click(function(){ ' . $js10 . ' });';
$all_js .= '$(".save-contact").click(function(){ ' . $js11 . ' });';
$all_js .= '$(".reset-ct-form").click(function(){ ' . $js12 . ' });';
$all_js .= '$(".unblock-wrap").click(function(){ ' . $js13 . ' });';
$all_js .= '$(".friend-remove").click(function(){ ' . $js14 . ' });';
$all_js .= '$(".show-bl-opt").click(function(){ ' . $js15 . ' });';
//$all_js .= '$(".set-bl-opt").click(function(){ '.$js16.' });';
$all_js .= $js161;
$all_js .= '$(".ct-change").mouseover(function(){$(this).addClass("y-bg");}).mouseout(function(){$(this).removeClass("y-bg");}); $(".ct-entry-name").mouseover(function(){ var p_id = $(this).parent().attr("id"); $("#"+p_id+">div>span").addClass("bold"); }).mouseout(function(){ var p_id = $(this).parent().attr("id"); $("#"+p_id+">div>span").removeClass("bold"); });';
$html .= VGenerate::declareJS('$(document).ready(function() { ' . $all_js . ' });');
} else {
$html = '&nbsp;';
}
return $html;
}
/* right side selected contacts listing and editing contacts */
public function rightContactsListing()
{
global $db, $class_database, $cfg, $language, $smarty;
$cts = self::contactsListQuery();
if (count($cts) > 0) {
$smarty->assign('ct_details', '1');
foreach ($cts as $ct_val) {
$usr_key = $class_database->singleFieldValue('db_accountuser', 'usr_key', 'usr_user', $ct_val[2]);
$usr_id = $class_database->singleFieldValue('db_accountuser', 'usr_id', 'usr_user', $ct_val[2]);
$uinfo = $usr_id > 0 ? VUserinfo::getUserInfo($usr_id) : false;
$ch_title = $uinfo["ch_title"] != '' ? $uinfo["ch_title"] : ($uinfo["usr_dname"] != '' ? $uinfo["usr_dname"] : $uinfo["uname"]);
$ct_v = $ct_val[2] != '' ? $ct_val[2] : (($ct_val[2] == '' and $ct_val[3] != '') ? '<span id="ct-entrymail-' . $ct_val[0] . '">' . $ct_val[3] . '</span>' : null);
$ct_v .= $ct_val[1] == '' ? ' <span id="ct-entryname-' . $ct_val[0] . '"></span>' : ' <span id="ct-entryname-' . $ct_val[0] . '">(' . $ct_val[1] . ')</span>';
$ct_g = $ct_val[2] != '' ? VUserinfo::getUserID($ct_val[2]) : 0;
$u_img = '<img title="" alt="" src="' . VUseraccount::getProfileImage($ct_g) . '" width="32" height="32" />';
$html .= '<div class="ec-entry left-float wdmax ' . (intval($_GET["n"]) == $ct_val[0] ? '' : 'no-display') . '" id="ec-' . $ct_val[0] . '">';
$html .= VGenerate::simpleDivWrap('left-float ct-bullet-out' . (intval($_GET["n"]) == $ct_val[0] ? ' ct-bullet-in' : null));
$html .= VGenerate::simpleDivWrap('left-float ct-bullet-label greyed-out bold', '', $u_img . '<span class="pointer">' . $ct_v . '</span>' . ($ct_val[2] != '' ? ' / <a href="' . VHref::channelURL(["username" => $ct_val[2]]) . '">' . $ct_val[2] . '</a>' : null));
$htm1 = '<div class="ct-listwrap" id="ct-listwrap-' . $ct_val[0] . '">';
$htm1 .= '<form class="entry-form-class">';
$htm1 .= VGenerate::simpleDivWrap('left-float darker-out wd300 ct-change', '', '<label>' . $language["frontend.global.email"] . ':</label><div class="grayText">' . ($ct_val[3] != '' ? '<span id="ct-entrydetailsmail-' . $ct_val[0] . '"><a href="mailto:' . $ct_val[3] . '">' . $ct_val[3] . '</a></span>' : '<span id="ct-entrydetailsmail-' . $ct_val[0] . '">' . $language["frontend.global.none"] . '</span>') . '</div>');
$iv_stat = $db->execute(sprintf("SELECT `create_date` FROM `db_usercodes` WHERE (`type`='invite_contact' OR `type`='invite_user') AND `usr_id`='%s' AND `pwd_id`='%s' AND `code_active`='1' LIMIT 1;", intval($_SESSION["USER_ID"]), $ct_val[7]));
$fr_stat = $ct_val[5] == 1 ? $language["contacts.details.blocked"] . '&nbsp;<a href="javascript:;" class="unblock-wrap" id="unblockform-' . $ct_val[0] . '">(' . $language["frontend.global.unblock"] . ')</a>' : (($ct_val[5] == 0 and $ct_val[2] != '' and $ct_val[4] == 1) ? $language["contacts.friends.since"] . date('M. d, Y', strtotime($ct_val[6])) . ' <a href="javascript:;" class="friend-remove" id="friendform-' . $ct_val[0] . '">(' . $language["contacts.friends.remove"] . ')</a>' : ((($ct_val[5] == 0 and $ct_val[2] == '' and $ct_val[4] == 0 and $iv_stat->fields["create_date"] != '') or ($ct_val[5] == 0 and $ct_val[2] != '' and $ct_val[4] == 0 and $iv_stat->fields["create_date"] != '')) ? $language["contacts.friends.sent"] . date('M. d, Y, H:i A', strtotime($iv_stat->fields["create_date"])) : (($cfg["approve_friends"] == 1 or $ct_val[2] == '') ? $language["contacts.add.noinvite"] : $language["contacts.add.nofriend"])));
//$u_img = VGenerate::simpleDivWrap('user-thumb-large pointer', '', '<img title="" alt="" src="'.VUseraccount::getProfileImage($ct_g).'" width="60" height="60" />');
$htm1 .= VGenerate::simpleDivWrap('left-float darker-out wd300', '', '<label>' . $language["contacts.add.frstatus"] . '</label><div class="grayText">' . $fr_stat . ($ct_val[5] == 1 ? ' <span class=""><a href="javascript:;" class="show-bl-opt" id="block-options' . $ct_val[0] . '">' . $language["bl_options"] . '</a></span>' : null) . '</div>');
$htm1 .= '</form>';
/* block options */
$htm1 .= $ct_val[5] == 1 ? VGenerate::simpleDivWrap('left-float all-paddings5', 'user-block-options' . $ct_val[0], self::blockCfg($ct_val[0]), 'display: none;') : null;
$htm1 .= '<form class="entry-form-class">';
$htm1 .= $cfg["custom_labels"] == 1 ? VGenerate::simpleDivWrap('left-float darker-out wd300 ct-change', '', '<label>' . $language["contacts.add.labels"] . '</label>' . self::listContactLabels($ct_val[0])) : null;
$htm1 .= VGenerate::simpleDivWrap('left-float darker-out wd300', '', '<label>' . $language["contacts.add.chan"] . '</label> ' . ($ct_val[2] != '' ? '<a href="' . VHref::channelURL(["username" => $ct_val[2]]) . '">' . $ch_title . '</a>' : '<div class="grayText">' . $language["contacts.add.chan.nosub"] . '</div>'));
$htm1 .= '<div class="clearfix"></div><br>';
$htm1 .= VGenerate::simpleDivWrap('left-float', '', VGenerate::basicInput('button', 'edit-contact', 'save-entry-button button-grey search-button form-button edit-contact', $ct_val[0], $ct_val[0], '<span>' . $language["contact.edit.ct"] . '</span>') . VGenerate::basicInput('button', 'unsel-contact', 'save-entry-button button-grey left-margin5 search-button form-button unsel-contact', $ct_val[0], $ct_val[0], '<span>' . $language["frontend.global.unsel"] . '</span>'));
$htm1 .= '</form>';
$htm1 .= '</div>';
$htm2 = '<div class="clearfix"></div><div class="ct-listwrap" id="ct-editwrap-' . $ct_val[0] . '" style="display: none;"><form id="ct-editform-' . $ct_val[0] . '" class="ct-edit-form entry-form-class" method="post" action="">';
$htm2 .= VGenerate::simpleDivWrap('row left-float no-top-padding', '', VGenerate::simpleDivWrap('darker-out', '', '<label>' . $language["frontend.global.name"] . '</label>') . VGenerate::basicInput('text', 'frontend_global_name', 'login-input', $ct_val[1]));
$htm2 .= VGenerate::simpleDivWrap('row', '', VGenerate::simpleDivWrap('darker-out row', '', '<label>' . $language["frontend.global.email"] . '</label>') . VGenerate::basicInput('text', 'frontend_global_email', 'login-input', $ct_val[3], 'ct-entrymailinput-' . $ct_val[0]));
$htm2 .= $cfg["custom_labels"] == 1 ? VGenerate::simpleDivWrap('row', '', VGenerate::simpleDivWrap('left-float darker-out wd300', '', '<label>' . $language["contacts.add.labels"] . '</label>' . (self::labelCheckboxes($ct_val[0]) == '' ? '<div class="grayText">' . $language["frontend.global.none"] . '</div>' : self::labelCheckboxes($ct_val[0])))) : null;
$htm2 .= '<div class="clearfix"></div><br>';
$htm2 .= VGenerate::simpleDivWrap('left-float wd300 row', '', VGenerate::basicInput('button', 'save-contact', 'save-entry-button button-grey search-button form-button save-contact', $ct_val[0], $ct_val[0], '<span>' . $language["frontend.global.savechanges"] . '</span>') . '<a href="javascript:;" id="unsel-contact" rel-val="' . $ct_val[0] . '" class="link cancel-trigger edit-cancel reset-ct-form"><span>' . $language["frontend.global.cancel"] . '</span></a>');
$htm2 .= '<input type="hidden" name="section_entry_value" value="' . $ct_val[0] . '" />';
$htm2 .= '</form></div>';
if ($cfg["user_blocking"] == 1 and $ct_val[5] == 1) {
//user unblock form
$htm2 .= '<form id="ct-unblockform-' . $ct_val[0] . '" class="ct-unblock-form" method="post" action=""><div class="left-float wd300 left-padding10 no-display" id="ct-unblockwrap-' . $ct_val[0] . '">';
$htm2 .= VGenerate::simpleDivWrap('left-float', '', '<input type="hidden" name="current_entry_id[]" value="' . $ct_val[0] . '" />');
$htm2 .= '</div></form>';
}
if ($cfg["user_friends"] == 1 and $ct_val[4] == 1 and $ct_val[5] == 0) {
//user friend remove form
$htm2 .= '<form id="ct-friendform-' . $ct_val[0] . '" class="ct-friend-form" method="post" action=""><div class="left-float wd300 left-padding10 no-display" id="ct-friendwrap-' . $ct_val[0] . '">';
$htm2 .= VGenerate::simpleDivWrap('left-float', '', '<input type="hidden" name="current_entry_id[]" value="' . $ct_val[0] . '" />');
$htm2 .= '</div></form>';
}
$notif = VGenerate::simpleDivWrap('ct-noticewrap', 'ct-noticewrap-' . $ct_val[0]);
//$html .= VGenerate::simpleDivWrap('left-float wdmax left-padding15 bottom-padding10 ct-detailed'.(intval($_GET["n"]) == $ct_val[0] ? NULL : ' no-display'), 'ct-detailed-'.$ct_val[0], $notif.VGenerate::simpleDivWrap('place-left user-thumb-large pointer', '', '<img title="" alt="" src="'.VUseraccount::getProfileImage($ct_g).'" width="60" height="60" />').$htm1.$htm2);
$html .= VGenerate::simpleDivWrap('left-float wdmax left-padding15 bottom-padding10 ct-detailed' . (intval($_GET["n"]) == $ct_val[0] ? null : ' no-display'), 'ct-detailed-' . $ct_val[0], $notif . $htm1 . $htm2);
$html .= '</div>';
$html .= '<div class="clearfix"></div>';
}
}
return $html;
}
/* get friend status */
public function getFriendStatus($usr_id, $cache_time = false)
{
global $db;
$sql = sprintf("SELECT `ct_id` FROM `db_usercontacts` WHERE `usr_id`='%s' AND `ct_username`='%s' AND `ct_friend`='1';", $usr_id, $_SESSION["USER_NAME"]);
$fs = $cache_time > 0 ? $db->CacheExecute($cache_time, $sql) : $db->execute($sql);
if ($fs->fields["ct_id"] != '') {
return 1;
} else {
return 0;
}
}
/* get block status */
public function getBlockStatus($usr_id, $ct_user, $cache_time = false)
{
global $db;
$sql = sprintf("SELECT `ct_blocked` FROM `db_usercontacts` WHERE `usr_id`='%s' AND `ct_username`='%s' AND `ct_active`='1';", $usr_id, $ct_user);
$bl = $cache_time > 0 ? $db->CacheExecute($cache_time, $sql) : $db->execute($sql);
return $bl->fields["ct_blocked"];
}
/* get block option */
public function getBlockCfg($cfg_val, $usr_id, $ct_user, $cache_time = false)
{
global $db;
$sql = sprintf("SELECT `ct_block_cfg` FROM `db_usercontacts` WHERE `usr_id`='%s' AND `ct_username`='%s' LIMIT 1;", $usr_id, $ct_user);
$bls = $cache_time > 0 ? $db->CacheExecute($cache_time, $sql) : $db->execute($sql);
$bl_ar = unserialize($bls->fields["ct_block_cfg"]);
return $val = $bl_ar[$cfg_val] == 1 ? 1 : 0;
}
/* user block options */
public function blockCfg($ct_id)
{
global $cfg, $db, $language;
$bls = $db->execute(sprintf("SELECT `ct_blocked`, `ct_block_cfg` FROM `db_usercontacts` WHERE `ct_id`='%s' LIMIT 1;", $ct_id));
if ($cfg["user_blocking"] == 1 and $bls->fields["ct_blocked"] == 1) {
$bl_ar = unserialize($bls->fields["ct_block_cfg"]);
$html .= '<form id="set-bl-form' . $ct_id . '" method="post" action="" class="entry-form-class set-bl-form">';
$html .= VGenerate::simpleDivWrap('left-float', 'set-bl-form' . $ct_id . '-update', '');
$html .= '<input type="hidden" name="ct_id" value="' . $ct_id . '" />';
if (!empty($bl_ar)) {
foreach ($bl_ar as $key => $val) {
$html .= VGenerate::simpleDivWrap('row no-top-padding icheck-box', '', '<input ' . ($val == 1 ? 'checked="checked"' : null) . ' id="' . $key . '" class="set-bl-opt" name="' . $key . '" value="1" type="checkbox"><label>' . $language[$key] . '</label>');
}
}
$html .= '</form>';
} else {
return false;
}
return $html;
}
/* get user block post values */
public function blockPostCfg($for)
{
return $value = intval($_POST[$for] == 1) ? 1 : 0;
}
/* save user block optios */
public function setBlockCfg($ct_id = 0)
{
global $db;
$ct_id = ($_POST["ct_id"] > 0) ? intval($_POST["ct_id"]) : 0;
$cfg_array = serialize(array("bl_files" => self::blockPostCfg("bl_files"), "bl_channel" => self::blockPostCfg("bl_channel"), "bl_comments" => self::blockPostCfg("bl_comments"), "bl_messages" => self::blockPostCfg("bl_messages"), "bl_subscribe" => self::blockPostCfg("bl_subscribe")));
$cfg_update = $db->execute(sprintf("UPDATE `db_usercontacts` SET `ct_block_cfg`='%s' WHERE `ct_id`='%s' AND `ct_blocked`='1' AND `usr_id`='%s' LIMIT 1;", $cfg_array, $ct_id, intval($_SESSION["USER_ID"])));
}
/* get labels for contact */
public function contactLabelQuery($ct_id = '')
{
global $db;
$lb = $db->execute(sprintf("SELECT `lb_name`, `lb_ids`, `lb_id` FROM `db_userlabels` WHERE `usr_id`='%s' AND `lb_active`='1' AND `lb_ids`!='';", intval($_SESSION["USER_ID"])));
$lbs = $lb->getrows();
if (count($lbs) > 0) {
$lb_i = array();
foreach ($lbs as $key => $lb_val) {
$lb_ar = unserialize($lb_val[1]);
$lb_t .= in_array($ct_id, $lb_ar) ? $lb_val[0] . '&nbsp+&nbsp;' : null;
$lb_i[] .= in_array($ct_id, $lb_ar) ? $lb_val[2] : null;
}
$lb_t = $lb_t != '' ? substr($lb_t, 0, -7) : $lb_t;
return array($lb_t, $lb_i);
}
}
/* show text of contact labels */
public function listContactLabels($ct_id = '')
{
global $language;
$lb_t = self::contactLabelQuery($ct_id);
return $lb_t = '<div class="grayText">' . ($lb_t[0] != '' ? $lb_t[0] : $language["frontend.global.none"]) . '</div>';
}
/* checkboxes of contact labels */
public function selectedLabel($ct_id = '', $lb_id = '')
{
$lb_t = self::contactLabelQuery($ct_id);
if ($lb_t[1] == '') {
return false;
}
if (in_array($lb_id, $lb_t[1])) {
return 'checked="checked"';
}
}
}