CNF = array(
// module icon
'ICON' => 'comments-o col-green3',
// database tables
'TABLE_ENTRIES' => $aModule['db_prefix'] . 'lots',
'TABLE_NEW_MESSAGES' => $aModule['db_prefix'] . 'unread_jots',
'TABLE_MESSAGES' => $aModule['db_prefix'] . 'jots',
'TABLE_TYPES' => $aModule['db_prefix'] . 'lots_types',
'TABLE_USERS_INFO' => $aModule['db_prefix'] . 'users_info',
'TABLE_LIVE_COMMENTS' => $aModule['db_prefix'] . 'lcomments',
'TABLE_JOT_REACTIONS' => $aModule['db_prefix'] . 'jot_reactions',
'TABLE_JVC' => $aModule['db_prefix'] . 'jvc',
'TABLE_PUBLIC_JVC' => $aModule['db_prefix'] . 'public_jvc',
'TABLE_JVCT' => $aModule['db_prefix'] . 'jvc_track',
'TABLE_LOT_SETTINGS' => $aModule['db_prefix'] . 'lots_settings',
'TABLE_GROUPS' => $aModule['db_prefix'] . 'groups',
'TABLE_GROUPS_LOTS' => $aModule['db_prefix'] . 'groups_lots',
'TABLE_SAVED_JOTS' => $aModule['db_prefix'] . 'saved_jots',
'TABLE_LOT_ATTACHMENTS' => $aModule['db_prefix'] . 'attachments',
'TABLE_JOTS_MEDIA_TRACKER' => $aModule['db_prefix'] . 'jots_media_tracker',
'TABLE_MASS_TRACKER' => $aModule['db_prefix'] . 'mass_convo_tracker',
'TABLE_CMTS_OBJECTS' => 'sys_objects_cmts',
'TABLE_ENTRIES_FULLTEXT' => 'search_title',
'TABLE_ENTRIES_COMMENTS_FULLTEXT' => 'search_fields',
// database fields
// fields of system table sys_objects_cmts
'FIELD_COBJ_ID' => 'ID',
'FIELD_COBJ_MODULE' => 'Module',
// live comments table fields
'FIELD_LCMTS_ID' => 'lcmt_id',
'FIELD_LCMTS_PARENT_ID' => 'lcmt_parent_id',
'FIELD_LCMTS_SYS_ID' => 'lcmt_system_id',
'FIELD_LCMTS_VPARENT_ID' => 'lcmt_vparent_id',
'FIELD_LCMTS_OBJECT_ID' => 'lcmt_object_id',
'FIELD_LCMTS_AUTHOR' => 'lcmt_author_id',
'FIELD_LCMTS_LEVEL' => 'lcmt_level',
'FIELD_LCMTS_TEXT' => 'lcmt_text',
'FIELD_LCMTS_DATE' => 'lcmt_time',
'FIELD_LCMTS_REPLIES' => 'lcmt_replies',
// main lot table fields
'FIELD_ID' => 'id',
'FIELD_AUTHOR' => 'author',
'FIELD_ADDED' => 'created',
'FIELD_UPDATED' => 'updated',
'FIELD_PARTICIPANTS' => 'participants',
'FIELD_TITLE' => 'title',
'FIELD_URL' => 'url',
'FIELD_TYPE' => 'type',
'FIELD_CLASS' => 'class',
'FIELD_PARENT_JOT' => 'parent_jot',
'FIELD_VISIBILITY' => 'visibility',
'FIELD_HASH' => 'hash',
// storage tale
'FIELD_ST_ID' => 'id',
'FIELD_ST_AUTHOR' => 'profile_id',
'FIELD_ST_REMOTE' => 'remote_id',
'FIELD_ST_NAME' => 'file_name',
'FIELD_ST_ADDED' => 'added',
'FIELD_ST_JOT' => 'jot_id',
'FIELD_ST_TYPE' => 'mime_type',
'FIELD_ST_EXT' => 'ext',
// messages/jots table fields
'FIELD_MESSAGE_ID' => 'id',
'FIELD_MESSAGE' => 'message',
'FIELD_MESSAGE_FK' => 'lot_id',
'FIELD_MESSAGE_AUTHOR' => 'user_id',
'FIELD_MESSAGE_ADDED' => 'created',
'FIELD_MESSAGE_AT_TYPE' => 'attachment_type',
'FIELD_MESSAGE_AT' => 'attachment',
'FIELD_MESSAGE_LAST_EDIT' => 'last_edit',
'FIELD_MESSAGE_EDIT_BY' => 'edit_by',
'FIELD_MESSAGE_TRASH' => 'trash',
'FIELD_MESSAGE_VIDEOC' => 'vc',
'FIELD_MESSAGE_REPLY' => 'reply',
// lots types table fields
'FIELD_TYPE_ID' => 'id',
'FIELD_TYPE_NAME' => 'name',
'FIELD_TYPE_LINKED' => 'show_link', // means use link in title
// new messages table
'FIELD_NEW_ID' => 'id',
'FIELD_NEW_LOT' => 'lot_id',
'FIELD_NEW_JOT' => 'first_jot_id',
'FIELD_NEW_UNREAD' => 'unread_count',
'FIELD_NEW_PROFILE' => 'user_id',
// users info fields
'FIELD_INFO_LOT_ID' => 'lot_id',
'FIELD_INFO_USER_ID' => 'user_id',
'FIELD_INFO_STAR' => 'star',
'FIELD_INFO_PARAMS' => 'params', // means use link in title
// jots media tracker
'FJMT_FILE_ID' => 'file_id',
'FJMT_USER_ID' => 'user_id',
'FJMT_COLLAPSED' => 'collapsed',
// talks mass talks tracker
'FIELD_MASS_CONVO_ID' => 'convo_id',
'FIELD_MASS_USER_ID' => 'user_id',
'FIELD_MASS_ADDED' => 'added',
// jot reactions fields
'FIELD_REACT_JOT_ID' => 'jot_id',
'FIELD_REACT_NATIVE' => 'native',
'FIELD_REACT_EMOJI_ID' => 'emoji_id',
'FIELD_REACT_PROFILE_ID' => 'user_id',
'FIELD_REACT_ADDED' => 'added',
// jitsi video conference fields
'FJVC_ID' => 'id',
'FJVC_LOT_ID' => 'lot_id',
'FJVC_ROOM' => 'room',
'FJVC_NUMBER' => 'number',
'FJVC_ACTIVE' => 'active',
// jitsi video conference tracking fields
'FJVCT_ID' => 'id',
'FJVCT_FK' => 'jvc_id',
'FJVCT_AUTHOR_ID' => 'author_id',
'FJVCT_START' => 'start',
'FJVCT_END' => 'end',
'FJVCT_PART' => 'participants',
'FJVCT_JOINED' => 'joined',
// jitsi public video conference fields
'FPJVC_ID' => 'id',
'FPJVC_ROOM' => 'room',
'FPJVC_PARTS' => 'participants',
'FPJVC_STATUS' => 'active',
'FPJVC_CREATED' => 'created',
// messenger lot settings
'FLS_ID' => 'lot_id',
'FLS_ACTIONS' => 'actions',
'FLS_SETTINGS' => 'settings',
'FLS_ICON' => 'icon',
// messenger lot settings
'FSJ_ID' => 'jot_id',
'FSJ_PROFILE_ID' => 'profile_id',
// messenger lots attachments
'FLAT_NAME' => 'name',
'FLAT_SERVICE' => 'service',
// messenger groups
'FMG_ID' => 'id',
'FMG_NAME' => 'name',
'FMG_AUTHOR' => 'author',
'FMG_ADDED' => 'added',
'FMG_PRIVACY' => 'allow_view_to',
'FMG_DESC' => 'desc',
'FMG_MODULE' => 'module',
'FMG_URL' => 'url',
'FMG_PROFILE_ID' => 'profile_id',
// messenger lot settings
'FMGL_LOT_ID' => 'lot_id',
'FMGL_GROUP_ID' => 'group_id',
// page URIs
'URL_HOME' => BX_DOL_URL_ROOT . 'page.php?i=messenger',
'URL_REPOST' => 'archive/',
'URL_INBOX' => 'inbox/',
'URL_TEMPLATE' => BX_DOL_URL_ROOT . 'page.php?{link}',
// some params
'STAR_BACKGROUND_COLOR' => '#f5a623',
'FILES_UPLOADER' => 'messenger_uploader_',
'BELL_ICON_ON' => 'bell',
'STAR_ICON' => 'star',
'BELL_ICON_OFF' => 'bell-slash',
'PARAM_FRIENDS_NUM_BY_DEFAULT' => 10,
'PARAM_CONTACTS_NUM_BY_DEFAULT' => 5,
'PARAM_NTFS_INTERVAL' => 1, /* INTERVAL IN HOURS*/
'PARAM_MESSAGES_INTERVAL' => 1, /* INTERVAL IN MINUTE*/
'PARAM_SEARCH_DEFAULT_USERS' => (int)getParam($aModule['db_prefix'] . 'max_drop_down_select'),
'PARAM_MAX_HISTORY_MESSAGES' => 50,
'PARAM_DEFAULT_TALK_FILES_NUM' => 20,
'PARAM_MAX_JOT_NTFS_MESSAGE_LENGTH' => 50,
'PARAM_PUSH_NOTIFICATIONS_DEFAULT_SYMBOLS_NUM' => 190,
'JOT-PREVIEW-TEXT-LENGTH' => 500,
'PARAM_PRIVATE' => TRUE,
'PARAM_PUBLIC' => FALSE,
'PARAM_ICONS_NUMBER' => 3,
'PARAM_MODULE_TYPES' => array(
'bx_groups' => BX_IM_TYPE_GROUPS,
'bx_events' => BX_IM_TYPE_EVENTS,
'bx_spaces' => BX_IM_TYPE_GROUPS
),
'ADD-TO-PAGES-AREA' => array(
BX_MSG_TALK_TYPE_PAGES => array('system', 'custom', '')
),
'JOT-MENU-TO-SHOW' => ['reaction', 'reply'],
'IMPLODE_GROUPS' => array(
BX_ATT_GROUPS_ATTACH => array(
BX_ATT_TYPE_FILES, BX_ATT_TYPE_FILES_UPLOADING, BX_ATT_TYPE_GIPHY, BX_ATT_TYPE_REPOST, BX_ATT_TYPE_CUSTOM
),
),
'URL_IDENT_PARAMS' => array('i','id','profile_id'),
'EMOJI_APPS' => ['+1' => 'like'],
'TITLE_CONSTANTS' => array('opponent'),
'GROUPS_ITEMS_FIELD' => 'items',
// GIPHY
'GIPHY' => array(
'api_key' => getParam($aModule['db_prefix'] . 'giphy_key'),
'type' => getParam($aModule['db_prefix'] . 'giphy_type'),
'rating' => getParam($aModule['db_prefix'] . 'giphy_content_rating'),
'limit' => (int)getParam($aModule['db_prefix'] . 'giphy_limit'),
'gifs' => 'https://api.giphy.com/v1/gifs/',
'stickers' => 'https://api.giphy.com/v1/stickers/',
'search' => 'search',
'trending' => 'trending'
),
// Jitsi
'JITSI' => array(
'LIB-LINK' => 'external_api.js'
),
// objects
'OBJECT_STORAGE' => 'bx_messenger_files',
'OBJECT_API_FORM_NAME' => 'bx_messenger_send',
'OBJECT_PRIVACY_GROUPS' => 'bx_messenger_allow_view_groups_to',
'OBJECT_IMAGES_TRANSCODER_GALLERY' => 'bx_messenger_photos_resized',
'OBJECT_IMAGES_TRANSCODER_PREVIEW' => 'bx_messenger_preview',
'OBJECT_IMAGES_TRANSCODER_ICON' => 'bx_messenger_icon',
'OBJECT_MP3_TRANSCODER' => 'bx_messenger_mp3',
'OBJECT_VIDEOS_TRANSCODERS' => array(
'poster' => 'bx_messenger_videos_poster',
'mp4' => 'bx_messenger_videos_mp4',
'mp4_hd' => 'bx_messenger_videos_mp4_hd',
'webm' => 'bx_messenger_videos_webm',
),
'OBJECT_MENU_SNIPPET_META' => 'bx_messenger_profile_snippet_meta',
'OBJECT_VIEWS' => 'bx_messenger_lots',
'OBJECT_JOTS_RVOTES' => 'bx_messenger_jots_rvotes',
'OBJECT_FORM_ENTRY' => 'bx_messenger_lots',
'OBJECT_FORM_FILTER' => 'bx_messenger_filter_criteria',
'OBJECT_FORM_FILTER_DISPLAY' => 'bx_messenger_filter_criteria',
'OBJECT_FORM_ENTRY_DISPLAY_VIEW' => 'bx_messenger_lots',
'OBJECT_MENU_ACTIONS_VIEW_ENTRY' => 'bx_messenger_view', // actions menu on view entry page
'OBJECT_MENU_ACTIONS_MY_ENTRIES' => 'bx_messenger_my', // actions menu on my entries page
'OBJECT_MENU_ACTIONS_TALK_MENU' => 'bx_messenger_lot_menu',
'OBJECT_MENU_TALK_INFO_MENU' => 'bx_messenger_lot_info_menu',
'OBJECT_MENU_JOT_MENU' => 'bx_messenger_jot_menu',
'OBJECT_MENU_CREATE_CONVO_MENU' => 'bx_messenger_create_convo_menu',
'OBJECT_MENU_NAV_LEFT_MENU' => 'bx_messenger_nav_menu',
'OBJECT_MENU_GROUPS_MENU' => 'bx_messenger_groups_menu',
'OBJECT_MENU_SUBMENU' => '', // main module submenu
'OBJECT_MENU_MANAGE_TOOLS' => 'bx_messenger_menu_manage_tools', //manage menu in content administration tools
'OBJECT_GRID' => 'bx_messenger',
'OBJECT_UPLOADERS' => array('sys_html5'),
// available lot options
'LOT_OPTIONS' => array(
'msg',
'giphy',
'files',
'video_rec',
'smiles'
),
'SEARCH-CRITERIA' => array('titles', 'participants', 'content'),
'VIEW-IN-TALKS' => array(BX_MSG_TALK_TYPE_MR, BX_MSG_TALK_TYPE_REPLIES, BX_MSG_TALK_TYPE_SAVED),
//options
'DATE-SEPARATOR-FORMAT-Y' => 'MMM D, Y, H:mm',
'DATE-SEPARATOR-FORMAT' => 'MMM D, H:mm',
'DATE-SHIFT' => 300, // time period to show date separator
'MAX_SEND_SYMBOLS' => (int)getParam($aModule['db_prefix'] . 'max_symbols_number'),
'MAX_PREV_JOTS_SYMBOLS' => (int)getParam($aModule['db_prefix'] . 'max_symbols_brief_jot'),
'MAX_JOTS_BY_DEFAULT' => (int)getParam($aModule['db_prefix'] . 'max_jot_number_default'),
'MAX_JOTS_LOAD_HISTORY' => (int)getParam($aModule['db_prefix'] . 'max_jot_number_in_history'),
'MAX_LOTS_NUMBER' => (int)getParam($aModule['db_prefix'] . 'max_lots_number'),
'SERVER_URL' => getParam($aModule['db_prefix'] . 'server_url'),
'MAX_FILES_TO_UPLOAD' => (int)getParam($aModule['db_prefix'] . 'max_files_send'),
'MAX_VIDEO_LENGTH' => (int)getParam($aModule['db_prefix'] . 'max_video_length_minutes'),
'MAX_NTFS_NUMBER' => (int)getParam($aModule['db_prefix'] . 'max_ntfs_number'),
'MAX_VIEWS_PARTS_NUMBER' => (int)getParam($aModule['db_prefix'] . 'max_parts_views'),
'ALLOW_TO_REMOVE_MESSAGE' => getParam($aModule['db_prefix'] . 'allow_to_remove_messages') == 'on',
'ALLOW_TO_MODERATE_MESSAGE_FOR_AUTHORS' => getParam($aModule['db_prefix'] . 'allow_to_moderate_messages') == 'on',
'REMOVE_MESSAGE_IMMEDIATELY' => getParam($aModule['db_prefix'] . 'remove_messages_immediately') == 'on',
'USE_EMBEDLY' => getParam($aModule['db_prefix'] . 'use_embedly') == 'on',
'USE_MENTIONS' => getParam($aModule['db_prefix'] . 'enable_mentions') == 'on',
'EMOJI_SET' => getParam($aModule['db_prefix'] . 'emoji_set'),
'REACTIONS_SIZE' => (int)getParam($aModule['db_prefix'] . 'reactions_size'),
'EMOJI_PREVIEW' => getParam($aModule['db_prefix'] . 'show_emoji_preview') == 'on',
'ENABLE-JITSI' => getParam($aModule['db_prefix'] . 'jitsi_enable') == 'on',
'JITSI-SERVER' => getParam($aModule['db_prefix'] . 'jitsi_server'),
'JITSI-CHAT' => getParam($aModule['db_prefix'] . 'jitsi_chat') == 'on',
'JITSI-CHAT-SYNC' => getParam($aModule['db_prefix'] . 'jitsi_sync') == 'on',
'JITSI-HIDDEN-INFO' => getParam($aModule['db_prefix'] . 'jitsi_hide_info') == 'on',
'JITSI-ONLY-FOR-PRIVATE' => getParam($aModule['db_prefix'] . 'jitsi_only_for_private') == 'on',
'JITSI-ENABLE-WATERMARK' => getParam($aModule['db_prefix'] . 'jitsi_enable_watermark') == 'on',
'JITSI-WATERMARK-URL' => getParam($aModule['db_prefix'] . 'jitsi_watermark_link'),
'JITSI-SUPPORT-LINK' => getParam($aModule['db_prefix'] . 'jitsi_support_url'),
'DISABLE-PROFILE-PRIVACY' => getParam($aModule['db_prefix'] . 'disable_contact_privacy') == 'on',
'CONTACT-JOIN-ORGANIZATION' => getParam($aModule['db_prefix'] . 'enable_joined_organizations') == 'on',
'SHOW-FRIENDS' => getParam($aModule['db_prefix'] . 'show_friends') == 'on',
'CHECK-CONTENT-FOR-TOXIC' => getParam($aModule['db_prefix'] . 'check_toxic') == 'on',
'TIME-FROM-NOW' => getParam($aModule['db_prefix'] . 'time_in_history') == 'on',
'DONT-SHOW-DESC' => getParam($aModule['db_prefix'] . 'dont_show_search_desc') == 'on',
'USE-UNIQUE-MODE' => getParam($aModule['db_prefix'] . 'use_unique_mode') == 'on',
'USE-FRIENDS-ONLY-MODE' => getParam($aModule['db_prefix'] . 'connect_friends_only') == 'on',
'UPDATE-PAGE-TITLE' => getParam($aModule['db_prefix'] . 'dont_update_title') == 'on',
'HIDE-PARTS' => getParam($aModule['db_prefix'] . 'hide_parts') == 'on',
'SHOW-SEARCH-BOX' => getParam($aModule['db_prefix'] . 'show_search_box') == 'on',
'GIPHY-POWERED-BY' => getParam($aModule['db_prefix'] . 'giphy_powered_by') == 'on',
'SEARCH-CRITERIA-SELECTED' => getParam($aModule['db_prefix'] . 'search_criteria'),
'BROADCAST-FIELDS' => getParam($aModule['db_prefix'] . 'broadcast_fields'),
'BROADCAST-ALLOWED-FILTER-FIELDS' => ['gender', 'location', 'birthday', 'membership'],
'JWT' => [
'app_id' => getParam($aModule['db_prefix'] . 'jwt_app_id'),
'secret' => getParam($aModule['db_prefix'] . 'jwt_app_secret'),
],
'JOT-JWT' => trim(getParam($aModule['db_prefix'] . 'jot_server_jwt')),
'QUILL_TOOLBAR' => getParam($aModule['db_prefix'] . 'quill_toolbar'),
'JSMain' => 'oMessenger',
'JSCreateConvoMenu' => 'oMessengerCreateConvo',
'JSMessengerLib' => 'oMUtils',
);
$this->_aObjects = array(
'alert' => $this->_sName
);
}
function getBroadcastAllowedFields(){
$aFields = $this->CNF['BROADCAST-ALLOWED-FILTER-FIELDS'];
bx_alert($this->_sName, 'broadcast_filtered_fields', 0, 0, [
'fields' => &$aFields
]);
return !empty($aFields) && is_array($aFields) ? $aFields : [];
}
/**
* Returns type of the talk
*@param string $sModule module uri, if messenger block was added to a special page of any module
*@return int type
*/
public function getTalkType($sModule = ''){
return $sModule && isset($this->CNF['PARAM_MODULE_TYPES'][$sModule]) ? $this->CNF['PARAM_MODULE_TYPES'][$sModule] : BX_IM_TYPE_PUBLIC;
}
/**
* Checks if the posted link is repost link
*@param string $sUrl internal post url
*@return array, string url and int post id
*/
public function isJotLink($sUrl){
$aResult = [];
$sJotPattern = '/^'. preg_replace(array('/\./', '/\//', '/\?/'), array('\.', '\/', '\?'), $this->getRepostUrl()) . '(\d+)/i';
if (preg_match($sJotPattern, $sUrl, $aMatches) && intval($aMatches[1]))
$aResult = array('url' => $aMatches[0], 'id' => $aMatches[1]);
return $aResult;
}
public function getBaseUri()
{
$sLink = parent::getBaseUri();
if(strncmp($sLink, BX_DOL_URL_ROOT, strlen(BX_DOL_URL_ROOT)) !== 0)
$sLink = BX_DOL_URL_ROOT . $sLink;
return $sLink;
}
public function getRepostUrl($iJotId = 0)
{
return $this->getBaseUri() . $this->CNF['URL_REPOST'] . ( $iJotId ? $iJotId : '');
}
public function getRepostUrlApi($sLotHash, $iJotId = 0)
{
$sUrl = $this->getUri() . '/' . $this->CNF['URL_INBOX'] . $sLotHash;
if($iJotId)
$sUrl = bx_append_url_params($sUrl, ['id' => $iJotId]);
return $sUrl;
}
/**
* Converts text link to url (wraps text url to )
*@param string $sText url
*@param string $sAttrs special attributes for the link
*@param boolean $bHtmlSpecialChars convert link to special html chars
*@return string url
*/
public function bx_linkify($sText, $sAttrs = '', $bHtmlSpecialChars = false){
if ($bHtmlSpecialChars)
$sText = htmlspecialchars($sText, ENT_NOQUOTES, 'UTF-8');
$sRe = "@(((https?://)|(www\.))[^\"<\s]+)(?![^<>]*>|[^\"]*?<\/a)@";
preg_match_all($sRe, $sText, $aMatches, PREG_OFFSET_CAPTURE);
$aMatches = $aMatches[0];
if ($i = count($aMatches))
$bAddNofollow = getParam('sys_add_nofollow') == 'on';
while ($i--)
{
$sUrl = $aMatches[$i][0];
if (!preg_match('@^https?://@', $sUrl))
$sUrl = 'http://'.$sUrl;
if (strncmp(BX_DOL_URL_ROOT, $sUrl, strlen(BX_DOL_URL_ROOT)) !== 0) {
$sAttrs .= ' target="_blank" ';
if ($bAddNofollow)
$sAttrs .= ' rel="nofollow" ';
}
if ($this -> isJotLink($sUrl))
$sReplacement = "{$aMatches[$i][0]}";
else
{
$oEmbed = BxDolEmbed::getObjectInstance();
if($oEmbed && $this -> CNF['USE_EMBEDLY'])
$sReplacement = $oEmbed->getLinkHTML($sUrl, $aMatches[$i][0]);
else
$sReplacement = "{$aMatches[$i][0]}";
}
$sText = substr_replace($sText, $sReplacement, $aMatches[$i][1], strlen($aMatches[$i][0]));
}
$mail_pattern = "/([\w.]+@[a-zA-Z_-]+?(?:\.[a-zA-Z]{2,6}))(?![^<>]*>|[^\"]*?<\/a)/";
$sText = preg_replace($mail_pattern, '$1', $sText);
return $sText;
}
/**
* Remove repost links from the message
*@param string $sMessage message
*@param int iJotId jot Id
*@return string message
*/
public function cleanRepostLinks($sMessage, $iJotId)
{
$sArchiveUrl = $this->getRepostUrl($iJotId);
return str_replace($sArchiveUrl, '', $sMessage);
}
/**
* Builds from server environment valid Url handle for the talk
*@return string url
*/
public function getPageIdent($sPageLink = '')
{
$sPageUrl = $sPageLink ? $sPageLink : $_SERVER['REQUEST_URI'];
if ($sPageUrl === '/' || $sPageUrl === '/index.php')
return 'index.php';
$sPath = parse_url(BX_DOL_URL_ROOT, PHP_URL_PATH);
$sPageUrl = substr($sPageUrl, get_mb_len($sPath));
// check if the link is jot link, then to return base url
$sLinkToCheck = BX_DOL_URL_ROOT . $sPageUrl;
if ($this->isJotLink($sLinkToCheck))
$sPageUrl = BxDolPermalinks::getInstance()->permalink($this->CNF['URL_HOME']);
$sPageUrl = BxDolPermalinks::getInstance()->unpermalink($sPageUrl);
$sPageUrl = parse_url($sPageUrl, PHP_URL_QUERY);
if (!empty($sPageUrl)) {
parse_str($sPageUrl, $aUrl);
if (!empty($aUrl)) {
$aValidUrl = array();
foreach ($this->CNF['URL_IDENT_PARAMS'] as &$sParam)
if (!empty($aUrl[$sParam]))
$aValidUrl[$sParam] = $aUrl[$sParam];
if (!empty($aValidUrl))
$sPageUrl = http_build_query($aValidUrl);
}
}
return $sPageUrl;
}
function getPageName($sIdent){
if (!$sIdent)
return '';
parse_str($sIdent, $aUrl);
return !empty($aUrl) && isset($aUrl['i']) ? $aUrl['i'] : '';
}
function normalizeLink($sUrl){
$aValidUrl = array();
parse_str($sUrl, $aUrl);
if (!empty($aUrl)) {
foreach ($this->CNF['URL_IDENT_PARAMS'] as &$sParam)
if (!empty($aUrl[$sParam]))
$aValidUrl[$sParam] = $aUrl[$sParam];
}
return !empty($aValidUrl) ? http_build_query($aValidUrl) : $sUrl;
}
public function getPageLink($sUrl){
if ($sUrl === 'index.php' || !$sUrl)
return BX_DOL_URL_ROOT;
if ($sUrl && $sUrl[0] === '/') {
$sUrl = 'i=' . ltrim($sUrl, '/');
}
return BxDolPermalinks::getInstance()->permalink(str_replace('{link}', $sUrl, $this->CNF['URL_TEMPLATE']));
}
public function getGiphyGifs($sAction = 'trending', $sValue = '', $iStart = 0){
$oGiphy = &$this->CNF['GIPHY'];
$aParams = array(
'api_key' => $oGiphy['api_key'],
'offset' => $iStart,
'limit' => (int)$oGiphy['limit'],
'rating' => $oGiphy['rating']
);
$sUrl = $oGiphy[$oGiphy['type']];
if ($sAction === 'search' && $sValue){
$aParams['q'] = $sValue;
$aParams['lang'] = bx_lang_name();
$aParams['random_id'] = time();
}
$sAction = $sAction ? $sAction : 'trending';
$sAction = isset($oGiphy[$sAction]) ? $oGiphy[$sAction] : $sAction;
return bx_file_get_contents("{$sUrl}{$sAction}", $aParams);
}
public function getRoomId($mixedLotId = '', $mixedAuthor = ''){
return 'UNA' . md5(BX_DOL_URL_ROOT . $mixedLotId . $mixedAuthor . BX_DOL_SECRET);
}
public function isJitsiAllowed($iType){
if (!$this->CNF['ENABLE-JITSI'])
return false;
if ($this->CNF['JITSI-ONLY-FOR-PRIVATE'] && ($iType == BX_IM_TYPE_PUBLIC || $iType == BX_IM_TYPE_SETS))
return false;
return $this->isAllowedAction(BX_MSG_ACTION_CREATE_VC) === true;
}
public function getValidUrl($sUrl, $sType = 'domain'){
if (!$sUrl || !($aUrl = parse_url($sUrl)))
return '';
$sDomain = isset($aUrl['host']) ? $aUrl['host'] : (isset($aUrl['path']) ? $aUrl['path'] : $sUrl);
$sDomain = str_replace(["www."], [''], $sDomain);
return $sType === 'domain' ? $sDomain : "https://{$sDomain}";
}
public function isAllowedAction($sAction = BX_MSG_ACTION_SEND_MESSAGE, $iProfileId = 0){
if (!$iProfileId)
$iProfileId = bx_get_logged_profile_id();
$aProfileMembership = BxDolAcl::getInstance()->getMemberMembershipInfo($iProfileId);
if (isset($aProfileMembership['status']) && $aProfileMembership['status'] !== 'active')
return false;
if ($sAction && ($sMembershipAction = str_replace('_', ' ', $sAction))){
$aCheck = checkActionModule($iProfileId, $sMembershipAction, $this->getName(), true);
if ($aCheck[CHECK_ACTION_RESULT] !== CHECK_ACTION_RESULT_ALLOWED)
return $aCheck[CHECK_ACTION_MESSAGE];
}
return true;
}
function generateJWTToken($iProfileId, $aUserParams = array(), $aTokenParams = array()){
$oProfileInfo = BxDolProfile::getInstance( $iProfileId );
if (!$iProfileId || (empty($aUserParams) && empty($aTokenParams)))
return false;
// Encode Header to Base64Url String
$sHeader = json_encode(['alg' => 'HS256', 'typ' => 'JWT']);
$sHeader = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($sHeader));
// Create token payload as a JSON string
$sPayload = json_encode( array_merge(array('context' => $aUserParams), $aTokenParams));
$sPayload = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($sPayload));
// Create Signature Hash
$sSignature = hash_hmac('sha256', $sHeader . "." . $sPayload, $this->CNF['JOT-JWT'], true);
$sSignature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($sSignature));
return "{$sHeader}.{$sPayload}.{$sSignature}";
}
function getPageIcon(){
if ($sFileUrl = BxDolDesigns::getInstance()->getSiteLogoUrl())
return $sFileUrl;
if (!($iIdIcon = (int)getParam('sys_site_icon')))
return BxDolTemplate::getInstance()->getIconUrl('apple-touch-icon.png');
$oTranscoder = BxDolTranscoderImage::getObjectInstance(BX_DOL_TRANSCODER_OBJ_ICON_FAVICON);
return $oTranscoder->getFileUrl($iIdIcon);
}
function getSeparatorTime($iUnixTimestamp){
$sDateUTC = bx_time_utc($iUnixTimestamp);
$sFormat = date('Y', $iUnixTimestamp) != date('Y') ? $this->CNF['DATE-SEPARATOR-FORMAT-Y'] : $this->CNF['DATE-SEPARATOR-FORMAT'];
return '';
}
public function isValidToUpload($sFileName){
if (!$sFileName)
return false;
$sBaseName = basename($sFileName);
if (strcmp($sBaseName, $sFileName) !== 0)
return false;
$sRequestPath = realpath(BX_DIRECTORY_PATH_TMP . $sFileName);
$sValidRootPath = realpath(BX_DIRECTORY_PATH_TMP);
return $sRequestPath !== false && strcmp(substr($sRequestPath, 0, strlen($sValidRootPath)), $sValidRootPath) === 0;
}
public function isSearchCriteria($sSelected){
$aItems = $this->CNF['SEARCH-CRITERIA-SELECTED'] ? explode(',', $this->CNF['SEARCH-CRITERIA-SELECTED']) : array();
if (empty($aItems))
return false;
return in_array($sSelected, $aItems);
}
public function replaceConstant($sTitle, $aMarkers){
foreach($this->CNF['TITLE_CONSTANTS'] as &$sItem){
if (isset($aMarkers[$sItem]))
$sTitle = str_replace('{' . $sItem . '}', $aMarkers[$sItem], $sTitle);
}
return $sTitle;
}
public function generateHash($sId){
return md5(BX_DOL_SECRET . $sId);
}
public function isAttachmentType(&$aJot, $sType = BX_ATT_TYPE_REPLY) {
if (empty($aJot) || empty($aJot[$this->CNF['FIELD_MESSAGE_AT']]))
return false;
if ($aJot[$this->CNF['FIELD_MESSAGE_AT_TYPE']])
return $aJot[$this->CNF['FIELD_MESSAGE_AT_TYPE']] === $sType;
$mixedResult = @unserialize($aJot[$this->CNF['FIELD_MESSAGE_AT']]);
return isset($mixedResult[$sType]);
}
public function convertEmoji2App($sName){
return isset($this->CNF['EMOJI_APPS'][$sName]) ? $this->CNF['EMOJI_APPS'][$sName] : $sName;
}
public function convertApp2Emoji($sName){
$sKey = array_search($sName, $this->CNF['EMOJI_APPS']);
if ($sKey === false)
return $sName;
return $this->CNF['EMOJI_APPS'][$sKey];
}
public function getConnectionToFunctionCheck(){
return true;
}
public function generateConvoHash($iId){
$sHash = genRndPwd(10, false);
if (!uriCheckUniq($sHash, $this->CNF['TABLE_ENTRIES'], $this->CNF['FIELD_HASH']))
$sHash = md5($iId . BX_DOL_SECRET);
return strtolower($sHash);
}
public function getConnectionByType($sType){
if ($sType === 'followers')
return BxDolConnection::getObjectInstance('sys_profiles_subscriptions');
if ($sType === 'friends')
return BxDolConnection::getObjectInstance('sys_profiles_friends');
return false;
}
public function getSelectedNotificationMode($aNotifData){
if (empty($aNotifData) || !($oModule = BxDolModule::getInstance('bx_notifications')))
return false;
$bEmail = in_array('email', $aNotifData);
$bPush = in_array('push', $aNotifData);
$bSite = in_array('site', $aNotifData);
if ($bEmail && $bPush)
return BX_BASE_MOD_NTFS_SLTMODE_DISABLED;
if ($bEmail)
return BX_NTFS_SLTMODE_SITE_EMAIL;
if ($bPush)
return BX_NTFS_SLTMODE_SITE_PUSH;
if ($bSite)
return BX_NTFS_SLTMODE_SITE;
return BX_NTFS_SLTMODE_ABSOLUTE;
}
}
/** @} */