| Server IP : 54.36.91.62 / Your IP : 216.73.217.112 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/valence/components/com_community/libraries/ |
Upload File : |
<?php
/**
* @copyright (C) 2013 iJoomla, Inc. - All rights reserved.
* @license GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html)
* @author iJoomla.com <webmaster@ijoomla.com>
* @url https://www.jomsocial.com/license-agreement
* The PHP code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript *are NOT GPL, and are released under the IJOOMLA Proprietary Use License v1.0
* More info at https://www.jomsocial.com/license-agreement
*/
use Joomla\CMS\Access\Access;
use Joomla\CMS\Cache\Cache;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Filesystem\Folder;
use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Uri\Uri;
// no direct access
defined('_JEXEC') or die('Restricted access');
if (version_compare(JVERSION, '4', '>=')) {
require_once JPATH_ROOT . '/components/com_community/libraries/j3.php';
}
jimport('joomla.plugin.plugin');
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
jimport('joomla.event.dispatcher');
// Define autoload function
spl_autoload_register('CFactory::autoload_models');
spl_autoload_register('CFactory::autoload_libraries');
spl_autoload_register('CFactory::autoload_helpers');
spl_autoload_register('CFactory::autoload_events');
spl_autoload_register('CFactory::autoload_tables');
// @todo: to be removed once the functions has be autoloaded
require_once (JPATH_ROOT . '/components/com_community/defines.community.php');
/**
* Register Joomla! autoloading
*/
/* Register our APIs classes */
JLoader::discover('CApi', COMMUNITY_PATH_SITE . '/apis');
JLoader::discover('C', COMMUNITY_PATH_SITE . '/libraries');
Table::addIncludePath(JPATH_ROOT . '/administrator/components/com_community/tables');
Table::addIncludePath(COMMUNITY_COM_PATH . '/tables');
// In case our core.php files are loaded by 3rd party extensions, we need to define the plugin path environments for Zend.
$paths = explode(PATH_SEPARATOR, get_include_path());
// to prevent fatal error at jomsocial API
try {
Factory::getLanguage()->load('com_community');
} catch (Exception $e) {
// do nothing
}
class CFactory {
static $instances = array(); // user instances
/**
* Function to allow caller to get a user object while
* it is not authenticated provided that it has a proper tokenid
* */
static public function getUserFromTokenId($tokenId, $userId) {
$db = Factory::getDBO();
$query = 'SELECT COUNT(*) '
. 'FROM ' . $db->quoteName('#__community_photos_tokens') . ' '
. 'WHERE ' . $db->quoteName('token') . '=' . $db->Quote($tokenId) . ' '
. 'AND ' . $db->quoteName('userid') . '=' . $db->Quote($userId);
$db->setQuery($query);
$count = $db->loadResult();
// We can assume that the user parsed in correct token and userid. So,
// we return them the proper user object.
if ($count >= 1) {
$user = CFactory::getUser($userId);
return $user;
}
// If it doesn't bypass our tokens, we assume they are really trying
// to hack or got in here somehow.
$user = CFactory::getUser(null);
return $user;
}
/**
* Load multiple users at a same time to save up on the queries.
* @return boolean True upon success
* @param Array $userIds An array of user ids to be loaded.
*/
static public function loadUsers($userIds) {
$userIds = array_diff_key( $userIds, self::$instances );
if (empty($userIds)) {
return;
}
$ids = implode(",", $userIds);
$db = Factory::getDBO();
$query = 'SELECT '
. ' a.' . $db->quoteName('userid') . ' as _userid ,'
. ' a.' . $db->quoteName('status') . ' as _status , '
. ' a.' . $db->quoteName('points') . ' as _points, '
. ' a.' . $db->quoteName('posted_on') . ' as _posted_on, '
. ' a.' . $db->quoteName('avatar') . ' as _avatar , '
. ' a.' . $db->quoteName('thumb') . ' as _thumb , '
. ' a.' . $db->quoteName('invite') . ' as _invite, '
. ' a.' . $db->quoteName('params') . ' as _cparams, '
. ' a.' . $db->quoteName('view') . ' as _view, '
. ' a.' . $db->quoteName('friends') . ' as _friends, '
. ' a.' . $db->quoteName('groups') . ' as _groups, '
. ' a.' . $db->quoteName('events') . ' as _events, '
. ' a.' . $db->quoteName('alias') . ' as _alias, '
. ' a.' . $db->quoteName('profile_id') . ' as _profile_id, '
. ' a.' . $db->quoteName('friendcount') . ' as _friendcount, '
. ' a.' . $db->quoteName('storage') . ' as _storage, '
. ' a.' . $db->quoteName('watermark_hash') . ' as _watermark_hash, '
. ' a.' . $db->quoteName('search_email') . ' AS _search_email, '
. ' s.' . $db->quoteName('userid') . ' as _isonline, u.* '
. ' FROM ' . $db->quoteName('#__community_users') . ' as a '
. ' LEFT JOIN ' . $db->quoteName('#__users') . ' u '
. ' ON u.' . $db->quoteName('id') . '=a.' . $db->quoteName('userid')
. ' LEFT OUTER JOIN ' . $db->quoteName('#__session') . 's '
. ' ON s.' . $db->quoteName('userid') . '=a.' . $db->quoteName('userid')
. ' WHERE a.' . $db->quoteName('userid') . ' IN (' . $ids . ')';
$db->setQuery($query);
$objs = $db->loadObjectList();
foreach ($objs as $obj) {
$user = new CUser($obj->_userid);
$isNewUser = $user->init($obj);
$user->getThumbAvatar();
// technically, we should not fetch any new user here
if ($isNewUser) {
// New user added to jomSocial database
// trigger event onProfileInit
$appsLib = CAppPlugins::getInstance();
$appsLib->loadApplications();
$args = array();
$args[] = $user;
$appsLib->triggerEvent('onProfileCreate', $args);
}
CFactory::getUser($obj->_userid, $user);
}
}
/**
* Retrieves a CUser object given the user id.
*
* @return CUser A CUser object
* @param int $id A user id (optional)
* @param CUser $obj An existing user object (optional)
*/
public static function getUser($id = null, $obj = null) {
if ($id != 0 && !is_null($obj)) {
if($obj->_cover != ''){ // somehow the cover is missing, do not assign the user object if the cover is missing.
self::$instances[$id] = $obj;
}
return;
}
if ($id === 0) {
$user = Factory::getUser();
$id = $user->id;
} else {
$db = Factory::getDBO();
if ($id == null) {
$user = Factory::getUser();
$id = $user->id;
}
if ($id != null && !is_numeric($id)) {
$query = 'SELECT ' . $db->quoteName('id') . ' FROM ' . $db->quoteName('#__users') . ' WHERE UCASE(' . $db->quoteName('username') . ') like UCASE(' . $db->Quote($id) . ')';
$db->setQuery($query);
$id = $db->loadResult();
}
if(is_numeric($id) && empty(self::$instances[$id])){
//we must make sure this user exists
$query = 'SELECT ' . $db->quoteName('id') . ' FROM ' . $db->quoteName('#__users') . ' WHERE ' . $db->quoteName('id') . ' = ' . $db->Quote($id);
$db->setQuery($query);
$testUser = $db->loadResult();
$id = ($testUser) ? $id : 0;
}
}
if (empty(self::$instances[$id])) {
if (!is_numeric($id) && !is_null($id)) {
Factory::getApplication()->enqueueMessage(Text::sprintf('COM_COMMUNITY_CANNOT_LOAD_USER', $id), 'error');
}
self::$instances[$id] = new CUser($id);
$isNewUser = self::$instances[$id]->init();
self::$instances[$id]->getThumbAvatar();
if ($isNewUser) {
// New user added to jomSocial database
// trigger event onProfileInit
$appsLib = CAppPlugins::getInstance();
$appsLib->loadApplications();
$args = array();
$args[] = self::$instances[$id];
$appsLib->triggerEvent('onProfileCreate', $args);
}
// Guess need to have avatar as well.
if ($id == 0) {
Factory::getLanguage()->load('com_community');
self::$instances[$id]->name = Text::_('COM_COMMUNITY_ACTIVITIES_GUEST');
self::$instances[$id]->username = Text::_('COM_COMMUNITY_ACTIVITIES_GUEST');
self::$instances[$id]->_avatar = 'components/com_community/assets/default.jpg';
self::$instances[$id]->_thumb = 'components/com_community/assets/default_thumb.jpg';
}
}
return self::$instances[$id];
}
/**
* Retrieves CConfig configuration object
* @return object CConfig object
* @param
*/
public static function getConfig() {
return CConfig::getInstance();
}
public static function getJomsVersion()
{
$file = JPATH_ADMINISTRATOR . '/components/com_community/community.xml';
if (file_exists($file)) {
$xml = simplexml_load_file($file);
return (string) $xml->version;
} else {
return '1.0.0';
}
}
/**
* Return fast, memory-based JCache object. For now, only APC cache
* will be supported
*/
public static function getFastCache($type = 'output') {
static $instance = null;
if (is_null($instance)) {
jimport('joomla.cache.cache');
// Check for APC
$options = array('storage' => 'apc', 'lifetime' => '300');
if (extension_loaded('apc')) {
$options['caching'] = true;
} else {
// Disable caching
$options['caching'] = false;
}
$cache = Cache::getInstance($type, $options);
$instance = new CFastCache($cache);
}
return $instance;
}
/**
* Returns a configured version of Zend_Cache object
*
* @param string $frontendEngine Frontend engine to use
* @param string $frontendOptions Additional options for the frontend object
* @return object Zend_Cache object
*/
public function deprecated_getCache($frontendEngine, $frontendOptions = array()) {
$app = Factory::getApplication();
//$jConfig = Factory::getConfig();
// If Joomla cache folder does not exist, try to create them.
if (!Folder::exists(JPATH_ROOT . '/cache')) {
Folder::create(JPATH_ROOT . '/cache');
File::copy(JPATH_ROOT . '/components/com_community/index.html', JPATH_ROOT . '/cache/index.html');
}
// Configure additional options for frontend
$defaultOptions = array(
'lifetime' => 86400, // cache lifetime of 24 hours (time is in seconds)
'automatic_serialization' => true, //default is false
'cache_id_prefix' => '_com_community', //prefix
'caching' => Factory::getConfig()->get('caching') //$jConfig->getValue('caching') // enable or disable caching
);
switch ($frontendEngine) {
case 'Core':
break;
case 'Output':
break;
case 'Class':
break;
case 'Function':
break;
}
$frontendOptions = array_merge($defaultOptions, $frontendOptions);
$backendOptions = array();
$backendEngine = '';
//switch($jConfig->getValue('cache_handler')){
switch (Factory::getConfig()->get('cache_handler')) {
case 'file':
$backendOptions = array(
'cache_dir' => JPATH_ROOT . '/cache/');
$backendEngine = 'File';
break;
case 'apc':
$backendOptions = array(
'cache_dir' => JPATH_ROOT . '/cache');
$backendEngine = 'Apc';
break;
// not supportted for now, return a dummy cache object
case 'xcache':
case 'eaccelerator':
case 'memcache':
default:
$backendOptions = array(
'cache_dir' => JPATH_ROOT . '/cache/');
$backendEngine = 'File';
$frontendOptions['caching'] = FALSE;
break;
}
$zend_cache = Zend_Cache::factory($frontendEngine, $backendEngine, $frontendOptions, $backendOptions);
return $zend_cache;
}
/**
* Register autoload functions, using JImport::JLoader
*/
public function autoload() {
//JLoader::register('classname', 'filename');
}
/**
* Return CInput instance
*/
static public function getInput() {
static $inputInstance = null;
if (!isset($inputInstance)) {
$inputInstance = new CInput;
}
return $inputInstance;
}
/**
* Return the model object, responsible for all db manipulation. Singleton
*
* @param string model name
* @param string any class prefix
* @return object model object
*/
static public function getModel($name = '', $prefix = '', $config = array()) {
static $modelInstances = null;
if (!isset($modelInstances)) {
$modelInstances = array();
include_once(JPATH_ROOT . '/components/com_community/libraries/error.php');
}
if (!isset($modelInstances[$name . $prefix])) {
include_once( JPATH_ROOT . '/components/com_community/models/models.php');
// @rule: We really need to test if the file really exists.
$modelFile = JPATH_ROOT . '/components/com_community/models/' . strtolower($name) . '.php';
if (!File::exists($modelFile)) {
$modelInstances[$name . $prefix] = false;
} else {
include_once( $modelFile );
$classname = $prefix . 'CommunityModel' . $name;
$modelInstances[$name . $prefix] = new $classname;
}
}
return $modelInstances[$name . $prefix];
}
// @getBookmarks deprecated.
// since 1.5
static public function getBookmarks($uri) {
static $bookmark = null;
if (is_null($bookmark)) {
//CFactory::load( 'libraries' , 'bookmarks' );
$bookmark = new CBookmarks($uri);
}
return $bookmark;
}
static public function getToolbar() {
// We need to load the language code here since some plugin
// apparently modify this before language code is loaded
Factory::getLanguage()->load('com_community');
static $toolbar = null;
if (is_null($toolbar)) {
//CFactory::load( 'libraries' , 'toolbar' );
$toolbar = new CToolbar();
}
return $toolbar;
}
/**
* Return the view object, responsible for all db manipulation. Singleton
*
* @param string model name
* @param string any class prefix
* @return object model object
*/
static public function getView($name = '', $prefix = '', $viewType = '') {
static $viewInstances = null;
if (!isset($viewInstances)) {
$viewInstances = array();
include_once(JPATH_ROOT . '/components/com_community/libraries/error.php');
}
$mainframe = Factory::getApplication();
$jinput = $mainframe->input;
$viewType = $jinput->request->get('format', 'html', 'NONE');
// if(CTemplate::mobileTemplate())
// $viewType = 'mobile';
if ($viewType == 'json')
$viewType = 'html';
if (!isset($viewInstances[$name . $prefix . $viewType])) {
jimport('joomla.filesystem.file');
$viewFile = JPATH_COMPONENT . '/views' . '/' . $name . '/view.' . $viewType . '.php';
if (File::exists($viewFile)) {
include_once( $viewFile );
} else {
//@rule: when feed is not available, we include the main view file.
if ($viewType == 'feed') {
include_once( JPATH_COMPONENT . '/views' . '/' . $name . '/view.html.php' );
} else {
//Factory::getApplication()->enqueueMessage(JText::sprintf('COM_COMMUNITY_VIEW_NOT_FOUND', JPATH_COMPONENT . '/views' . '/' . $name . '/view.html.php'), 'error');
return;
}
}
$classname = $prefix . 'CommunityView' . ucfirst($name);
if (!class_exists($classname)) {
Factory::getApplication()->enqueueMessage(Text::sprintf('COM_COMMUNITY_VIEW_NOT_FOUND', $classname), 'error');
return;
}
$viewInstances[$name . $prefix . $viewType] = new $classname;
}
return $viewInstances[$name . $prefix . $viewType];
}
/**
* return the currently viewed user profile object,
* for now, just return an object with username, id, email
* @deprecated since 1.6.x
*/
static public function getActiveProfile() {
$my = Factory::getUser();
$mainframe = Factory::getApplication();
$jinput = $mainframe->input;
$uid = $jinput->request->get('userid', 0, 'INT');
if ($uid == 0) {
$uid = $jinput->cookie->get('activeProfile', null);
}
$obj = CFactory::getUser($uid);
return $obj;
}
/**
* Returns the current user requested 'userid', should be part of the request
* parameter
*
* @param
* @return object Current CUser object
*/
static public function getRequestUser() {
static $usersCollection = array();
$mainframe = Factory::getApplication();
$jinput = $mainframe->input;
$id = $jinput->get('userid', '', 'INT');
if($id == '' && array_key_exists(0, $usersCollection)){
return $usersCollection[0];
}elseif(!array_key_exists($id, $usersCollection)){
$user = CFactory::getUser($id);
$id = ($id) ? $id : 0;
$usersCollection[$id] = $user;
}
return $usersCollection[$id];
}
/**
* Return standard joomla filter objects
*
* @param boolean $allowHTML True if you want to allow safe HTML through
* @param boolean $simpleHTML True if you want to allow simple HTML tags
* @return object JFilterInput object
*/
static public function getInputFilter($allowHTML = false, $safeTagsCustom = array(), $safeAttrCustom = array()) {
jimport('joomla.filter.filterinput');
$safeTags = array();
$safeAttr = array();
if ($allowHTML) {
$safeAttr = array('abbr', 'accept', 'accept-charset', 'accesskey', 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'clear', 'cols', 'colspan', 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', 'enctype', 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'target', 'title', 'type', 'usemap', 'valign', 'value', 'vspace', 'width');
$safeTags = array('a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', 'blockquote', 'br', 'button', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', 'font', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', 'ol', 'optgroup', 'option', 'p', 'pre', 'q', 's', 'samp', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var');
}
if(count($safeTagsCustom)) {
$safeTags = $safeTagsCustom;
}
if(count($safeAttrCustom)) {
$safeAttr= $safeAttrCustom;
}
$safeHtmlFilter = InputFilter::getInstance($safeTags, $safeAttr);
return $safeHtmlFilter;
}
/**
* Set current active profile
* @param integer id Current user id
* @deprecated since 1.6.x
*/
static public function setActiveProfile($id = '') {
if (empty($id)) {
$my = CFactory::getUser();
$id = $my->id;
}
$app = Factory::getApplication();
$lifetime = Factory::getConfig()->get('lifetime');
setcookie('activeProfile', $id, time() + ($lifetime * 60), '/');
}
/**
* @deprecated since 1.6.x
*/
static public function unsetActiveProfile() {
$app = Factory::getApplication();
$lifetime = Factory::getConfig()->get('lifetime');
setcookie('activeProfile', false, time() + ($lifetime * 60 ), '/');
}
/**
* Sets the current requested URI in the cookie so the system knows where it should
* be redirected to.
*
* @param
* @return
*/
static public function setCurrentURI() {
$uri = Uri::getInstance();
$current = $uri->toString();
setcookie('currentURI', $current, time() + 60 * 60 * 24, '/');
}
/**
* Gets the last accessed URI from the cookie if user is coming from another page.
*
* @param
* @return string The last accessed URI in the cookie (E.g http://site.com/index.php)
*/
static public function getLastURI() {
$mainframe = Factory::getApplication();
$jinput = $mainframe->input;
$uri = $jinput->cookie->get('currentURI', null);
$match = array();
preg_match('/(?i)ajax/',$uri, $match); // @since 3.3 if this url contains ajax, assign to root url as well
if (is_null($uri) || (isset($match[0]) && !empty($match[0])) ) {
$uri = Uri::root();
}
return $uri;
}
/**
* Return the view object, responsible for all db manipulation. Singleton
*
* @param string type libraries/helper
* @param string name class prefix
*/
static public function load($type, $name) {
if ($type == 'models')
return;
include_once(JPATH_ROOT . '/components/com_community/libraries/error.php');
// Test if file really exists before php throws errors.
$path = JPATH_ROOT . '/components/com_community/' . $type . '/' . strtolower($name) . '.php';
if (File::exists($path)) {
include_once( $path );
}
// If it is a library, we call the object and call the 'load' method
if ($type == 'libraries') {
$classname = 'C' . $name;
if (class_exists($classname)) {
// OK, class exist
}
}
}
/**
* Autoload class
*/
static function autoload_models($classname) {
// These interfaces doesn't have specific naming logic. Define them manually
$classes = array(
'CTaggable_Item' => '/models/tags.php',
'CGeolocationInterface' => '/models/models.php',
'CLimitsInterface' => '/models/models.php',
'CommunityModelActivities' => '/models/activities.php',
'CommunityModelApplications' => '/models/applications.php',
'CommunityModelApps' => '/models/apps.php',
'CommunityModelAvatar' => '/models/avatar.php',
'CommunityModelBlock' => '/models/block.php',
'CommunityModelBulletins' => '/models/bulletins.php',
'CommunityModelCommunity' => '/models/community.php',
'CommunityModelConfiguration' => '/models/configurations.php',
'CommunityModelConnect' => '/models/connect.php',
'CommunityModelDiscussions' => '/models/discussion.php',
'CommunityModelEventCategories' => '/models/eventcategories.php',
'CommunityModelEvents' => '/models/events.php',
'CommunityModelFeatured' => '/models/featured.php',
'CommunityModelFiles' => '/models/files.php',
'CommunityModelFriends' => '/models/friends.php',
'CommunityModelGroupCategories' => '/models/groupcategories.php',
'CommunityModelGroups' => '/models/groups.php',
'CommunityModelPolls' => '/models/polls.php',
'CommunityModelInbox' => '/models/inbox.php',
'CommunityModelLike' => '/models/like.php',
'CommunityModelMailq' => '/models/mailq.php',
'CommunityModelMailqueue' => '/models/mailqueue.php',
'CommunityModelMemberlist' => '/models/memberlist.php',
'JCCModel' => '/models/models.php',
'CommunityModelMultiProfile' => '/models/multiprofile.php',
'CommunityModelNetwork' => '/models/network.php',
'CommunityModelNotification' => '/models/notification.php',
'CommunityModelPhotos' => '/models/photos.php',
'CommunityModelPhotoTagging' => '/models/phototagging.php',
'CommunityModelProfile' => '/models/profile.php',
'CommunityModelProfiles' => '/models/profiles.php',
'CommunityModelRegister' => '/models/register.php',
'CommunityModelReporters' => '/models/reporters.php',
'CommunityModelReports' => '/models/reports.php',
'CommunityModelSearch' => '/models/search.php',
'CommunityModelStatus' => '/models/status.php',
'CommunityModelTags' => '/models/tags.php',
'CommunityModelToolbar' => '/models/toolbar.php',
'CommunityModelUser' => '/models/user.php',
'CommunityModelUserPoints' => '/models/userpoints.php',
'CommunityModelUsers' => '/models/users.php',
'CommunityModelVideos' => '/models/videos.php',
'CommunityModelVideosCategories' => '/models/videoscategories.php',
'CommunityModelVideoTagging' => '/models/videotagging.php',
'CommunityModelWall' => '/models/wall.php',
'CommunityModelHashtags' => '/models/hashtags.php',
'CommunityModelManualDbUpgrade' => '/models/manualdbupgrade.php',
'CommunityModelMigrators' => '/models/migrators.php',
'CommunityModelMigratorCB' => '/models/migratorCB.php',
'CommunityModelMigratorEasySocial' => '/models/migratorEasySocial.php',
'CommunityModelDigest' => '/models/digest.php',
'CommunityModelChat' => '/models/chat.php',
'CommunityModelFollowers' => '/models/followers.php',
'CommunityModelPageCategories' => '/models/pagecategories.php',
'CommunityModelPages' => '/models/pages.php',
);
$app = Factory::getApplication();
if ($app->isClient('administrator') && array_key_exists($classname, $classes) && file_exists(JPATH_ROOT . '/administrator/components/com_community' . $classes[$classname])) {
require_once(JPATH_ROOT . '/administrator/components/com_community' . $classes[$classname]);
}elseif(array_key_exists($classname, $classes) && file_exists(JPATH_ROOT . '/components/com_community' . $classes[$classname])) {
require_once(JPATH_ROOT . '/components/com_community' . $classes[$classname]);
}
}
/**
* Autoload class
*/
static function autoload_libraries($classname) {
$classes = array(
'CInput' => '/libraries/input.php',
'CAppPlugins' => '/libraries/apps.php',
'CError' => '/libraries/error.php',
'CFastCache' => '/libraries/cache.php',
'CStorage' => '/libraries/storage.php',
'CStorageMethod' => '/libraries/storage.php',
'CUser' => '/libraries/user.php',
'CParameter' => '/libraries/parameter.php',
'CActivityStream' => '/libraries/activities.php',
'CActivities' => '/libraries/activities.php',
'CTemplate' => '/libraries/template.php',
'CActivities' => '/libraries/activities.php',
'CAdminstreams' => '/libraries/adminstreams.php',
'CAkismet' => '/libraries/akismet.php',
'Akismet' => '/libraries/akismet_base.php',
'CAppPlugins' => '/libraries/apps.php',
'CAvatar' => '/libraries/avatar.php',
'blockUser' => '/libraries/block.php',
'CBookmarks' => '/libraries/bookmarks.php',
'CBrowser' => '/libraries/browser.php',
'CFastCache' => '/libraries/cache.php',
'CCarousel' => '/libraries/carousel.php',
'CComment' => '/libraries/comment.php',
'CConnectionLibrary' => '/libraries/connection.php',
'CCron' => '/libraries/cron.php',
'CDatetime' => '/libraries/datetime.php',
'CEditor' => '/libraries/editor.php',
'CEmailTypes' => '/libraries/emailtypes.php',
'CError' => '/libraries/error.php',
'CEvents' => '/libraries/events.php',
'CFacebook' => '/libraries/facebook.php',
'CFeatured' => '/libraries/featured.php',
'CFiles' => '/libraries/files.php',
'CFilesLibrary' => '/libraries/files.php',
'CFilterBar' => '/libraries/filterbar.php',
'CFormElement' => '/libraries/formelement.php',
'CFriends' => '/libraries/friends.php',
'CGroups' => '/libraries/groups.php',
'CICal' => '/libraries/ical.php',
'CImage' => '/libraries/image.php',
'CInvitationMail' => '/libraries/invitation.php',
'CInvitation' => '/libraries/invitation.php',
'CJForm' => '/libraries/jform.php',
'CJSMin' => '/libraries/jsmin.php',
'JSNetworkLibrary' => '/libraries/jsnetwork.php',
'CKarma' => '/libraries/karma.php',
'CLike' => '/libraries/like.php',
'CLimitsLibrary' => '/libraries/limits.php',
'CMailq' => '/libraries/mailq.php',
'CMapping' => '/libraries/mapping.php',
'CMessaging' => '/libraries/messaging.php',
'CMiniHeader' => '/libraries/miniheader.php',
'CDocumentMobile' => '/libraries/mobile.php',
'CMyBlog' => '/libraries/myblog.php',
'CNotification' => '/libraries/notification.php',
'CNotificationLibrary' => '/libraries/notification.php',
'CNotificationTypes' => '/libraries/notificationtypes.php',
'CExtraNotification' => '/libraries/extra_notification.php',
'CParameter' => '/libraries/parameter.php',
'CPhotos' => '/libraries/photos.php',
'CPhotoTagging' => '/libraries/phototagging.php',
'CPrivacy' => '/libraries/privacy.php',
'CProfile' => '/libraries/profile.php',
'CProfileLibrary' => '/libraries/profile.php',
'CommunityRelationshipLib' => '/libraries/relationship.php',
'CReporting' => '/libraries/reporting.php',
'CReportingLibrary' => '/libraries/reporting.php',
'CSpamFilter' => '/libraries/spamfilter.php',
'CStaticmap' => '/libraries/staticmap.php',
'CStorage' => '/libraries/storage.php',
#'CStorage' => '/libraries/streamer.php',
'CTags' => '/libraries/tags.php',
'CAdvanceSearch' => '/libraries/advancesearch.php',
'CToolbar' => '/libraries/toolbar.php',
'cAvatarTooltip' => '/libraries/tooltip.php',
#'CAdvanceSearch' => '/libraries/url.php',
'CUser' => '/libraries/user.php',
'CUserPoints' => '/libraries/userpoints.php',
'CUserStatus' => '/libraries/userstatus.php',
'CUserStatusCreator' => '/libraries/userstatus.php',
'CVideos' => '/libraries/videos.php',
'CVideoTagging' => '/libraries/videotagging.php',
'CWallLibrary' => '/libraries/wall.php',
'CWall' => '/libraries/wall.php',
'CWindow' => '/libraries/window.php',
'CZencoderOutput' => '/libraries/zencoder.php',
'CMinitip' => '/libraries/minitip.php',
'CVideoLibrary' => '/libraries/videos.php',
'CToolbarLibrary' => '/libraries/toolbar.php',
'CTooltip' => '/libraries/tooltip.php',
'CCommentInterface' => '/libraries/comment.php',
'CFieldsBirthdate' => '/libraries/fields/birthdate.php',
'CFieldsCheckbox' => '/libraries/fields/checkbox.php',
'JFormFieldCMultiList' => '/libraries/fields/cmultilist.php',
'CFieldsLocation' => '/libraries/fields/location.php',
'CFieldsCountry' => '/libraries/fields/country.php',
'CFieldsDate' => '/libraries/fields/date.php',
'CFieldsEmail' => '/libraries/fields/email.php',
'CFieldsGender' => '/libraries/fields/gender.php',
'CFieldsLabel' => '/libraries/fields/label.php',
'CFieldsList' => '/libraries/fields/list.php',
'CProfileField' => '/libraries/fields/profilefield.php',
'CFieldsRadio' => '/libraries/fields/radio.php',
'CFieldsSelect' => '/libraries/fields/select.php',
'CFieldsSingleselect' => '/libraries/fields/singleselect.php',
'CFieldsText' => '/libraries/fields/text.php',
'CFieldsTextarea' => '/libraries/fields/textarea.php',
'CFieldsTime' => '/libraries/fields/time.php',
'CFieldsUrl' => '/libraries/fields/url.php',
'CFieldsProfiletypes' => '/libraries/fields/profiletypes.php', // for joomlaxi
'CFieldsTemplates' => '/libraries/fields/templates.php', // for joomlaxi
'FacebookApiException' => '/libraries/facebook/base_facebook.php',
//'BaseFacebook' => '/libraries/facebook/base_facebook.php',
//'FacebookLib' => '/libraries/facebook/facebook.php',
'File_CStorage' => '/libraries/storage/file.php',
'S3_CStorage' => '/libraries/storage/s3.php',
'CTableStorageS3' => '/libraries/storage/s3.php',
'S3' => '/libraries/storage/s3_lib.php',
'S3Request' => '/libraries/storage/s3_lib.php',
'tmhOAuth' => '/libraries/twitter/tmhOAuth.php',
'tmhUtilities' => '/libraries/twitter/tmhUtilities.php',
'CFilesLibrary' => '/libraries/files.php',
'CTwitter' => '/libraries/twitter.php',
'CEngagement' => '/libraries/engagement.php',
'CActivity' => '/libraries/activity.php',
/* Services */
'CServiceAbstract' => '/libraries/services/abstract.php',
'CServiceGoogle' => '/libraries/services/google.php',
'CEmbedly' => '/libraries/services/embedly.php',
'CCurl' => '/libraries/curl.php',
/* Parsers */
'CParserAbstract' => '/libraries/parsers/abstract.php',
'CParserUrls' => '/libraries/parsers/urls.php',
'CParserMetas' => '/libraries/parsers/metas.php',
'CAssets' => '/libraries/assets.php',
'CObject' => 'libraries/object.php',
'CPages' => '/libraries/pages.php',
'CLinkedin' => '/libraries/linkedin.php',
'CGoogle' => '/libraries/google.php'
);
if (array_key_exists($classname, $classes)) {
if (!class_exists($classname)) {
require_once(JPATH_ROOT . '/components/com_community' . $classes[$classname]);
}
}
}
/**
* Autoload helper class
*/
static function autoload_helpers($classname) {
$classes = array(
'CAccess' => '/helpers/access.php',
'CKses' => '/helpers/kses.php',
'CCalendar' => '/helpers/Calendar.php',
'CPluginHelper' => '/helpers/plugins.php',
'CFriendsHelper' => '/helpers/friends.php',
'CAccess' => '/helpers/access.php',
'CAjaxHelper' => '/helpers/ajax.php',
'CAlbumsGroupHelperHandler' => '/helpers/albums.php',
'CAutoSuggest' => '/helpers/autousersuggest.php',
'CCalendar' => '/helpers/calendar.php',
'CCategoryHelper' => '/helpers/category.php',
'CContentHelper' => '/helpers/content.php',
'CCSV' => '/helpers/csv.php',
'CEmails' => '/helpers/emails.php',
'CEventGroupHelperHandler' => '/helpers/event.php',
'CFileHelper' => '/helpers/file.php',
'CFriendsHelper' => '/helpers/friends.php',
'CGroupHelper' => '/helpers/group.php',
'CImageHelper' => '/helpers/image.php',
'CKses' => '/helpers/kses.php',
'CLimitsHelper' => '/helpers/limits.php',
'CLinkGeneratorHelper' => '/helpers/linkgenerator.php',
'CMapsHelper' => '/helpers/maps.php',
'CMenuHelper' => '/helpers/menu.php',
'CNotificationTypesHelper' => '/helpers/notificationtypes.php',
'COwnerHelper' => '/helpers/owner.php',
'CPhone' => '/helpers/phone.php',
'CPhotosHelper' => '/helpers/photos.php',
'CPluginHelper' => '/helpers/plugins.php',
'CProgressbarHelper' => '/helpers/progressbar.php',
'HcaptchaCCaptchaHelper'=>'/helpers/captcha/hcaptcha.php',
'RecaptchaCCaptchaHelper' => '/helpers/captcha/recaptcha.php',
'CloudflareCCaptchaHelper' => '/helpers/captcha/cloudflare.php',
'BaseCCaptchaHelper' => '/helpers/captcha/base.php',
'ReCaptchaResponse' => '/helpers/captcha/recaptcha.php',
'CRemoteHelper' => '/helpers/remote.php',
'CStringHelper' => '/helpers/string.php',
'CTemplateHelper' => '/helpers/template.php',
'CTimeHelper' => '/helpers/time.php',
'CDate' => '/helpers/time.php',
'CUrl' => '/helpers/url.php',
'CUrlHelper' => '/helpers/url.php',
'CUserHelper' => '/helpers/user.php',
'CValidateHelper' => '/helpers/validate.php',
'CVideosHelper' => '/helpers/videos.php',
'CEventHelper' => '/helpers/event.php',
'CPollHelper' => '/helpers/poll.php',
'CAlbumsHelper' => '/helpers/albums.php',
'CHeadHelper' => '/helpers/head.php',
'CFetchHelper' => '/helpers/fetch.php',
'CLikesHelper' => '/helpers/likes.php',
'CActivitiesHelper' => '/helpers/activities.php',
'CSystemHelper' => '/helpers/system.php',
'CModuleHelper' => '/helpers/module.php',
'CMultiprofileHelper' => '/helpers/multiprofile.php',
'CInboxHelper' => '/helpers/inbox.php',
'CServiceCommentHelper' => '/helpers/commentservice.php',
'CFollowersHelper' => '/helpers/followers.php',
'CPageHelper' => '/helpers/page.php',
);
if (array_key_exists($classname, $classes)) {
require_once(JPATH_ROOT . '/components/com_community' . $classes[$classname]);
}
}
/**
* Autoload helper class
*/
static function autoload_tables($classname) {
$classes = array(
'CTableActivity' => '/tables/activity.php',
'CTableAlbum' => '/tables/album.php',
'CTableApp' => '/tables/app.php',
'CTableBulletin' => '/tables/bulletin.php',
'CTableCategory' => '/tables/category.php',
'CTableConnect' => '/tables/connect.php',
'CTableDiscussion' => '/tables/discussion.php',
'CTableEvent' => '/tables/event.php',
'CTableEventCategory' => '/tables/eventcategory.php',
'CTableEventMembers' => '/tables/eventmembers.php',
'CTableFeatured' => '/tables/featured.php',
'CTableFieldValue' => '/tables/fieldvalue.php',
'CTableFile' => '/tables/file.php',
'CTableGroup' => '/tables/group.php',
'CTableGroupCategory' => '/tables/groupcategory.php',
'CTableGroupInvite' => '/tables/groupinvite.php',
'CTableGroupMembers' => '/tables/groupmembers.php',
'CTableInvitation' => '/tables/invitation.php',
'CTableLike' => '/tables/like.php',
'CTableLocationCache' => '/tables/locationcache.php',
'CTableMemberList' => '/tables/memberlist.php',
'CTableMemberListCriteria' => '/tables/memberlistcriteria.php',
'CTableMessage' => '/tables/message.php',
'CTableMultiProfile' => '/tables/multiprofile.php',
'CTableMultiProfileFields' => '/tables/multiprofilefields.php',
'CTableNotification' => '/tables/notification.php',
'CTableOauth' => '/tables/oauth.php',
'CTablePhoto' => '/tables/photo.php',
'CTableProfile' => '/tables/profile.php',
'CTableProfileField' => '/tables/profilefield.php',
'CTableTag' => '/tables/tag.php',
'CTableTagword' => '/tables/tagword.php',
'CTableVideo' => '/tables/video.php',
'CTableVideosCategory' => '/tables/videoscategory.php',
'CTableWall' => '/tables/wall.php',
'CTableHashtag' => '/tables/hashtag.php',
'CTablePollCategory' => '/tables/pollcategory.php',
'CTablePoll' => '/tables/poll.php',
'CTablePollItem' => '/tables/pollitem.php',
'CTablePollUser' => '/tables/polluser.php',
'CTableFollower' => '/tables/follower.php',
'CTablePage' => '/tables/page.php',
'CTablePageMembers' => '/tables/pagemembers.php',
'CTablePageCategory' => '/tables/pagecategory.php',
'CTablePageInvite' => '/tables/pageinvite.php',
'CTableRating' => '/tables/rating.php'
);
$backendClassname = array(
'CommunityTableConfiguration' => '/tables/configuration.php',
'CommunityTableProfiles' => '/tables/profiles.php',
'CommunityTableReports' => '/tables/reports.php',
'CommunityTableUserPoints' => '/tables/userpoints.php',
'CommunityTableUsers' => '/tables/users.php',
'CommunityTableVideosCategories' => '/tables/videocategories.php',
'CommunityTableEventCategories' => '/tables/eventcategories.php',
'CommunityTableGroupCategories' => '/tables/groupcategories.php',
'CommunityTablePollCategories' => '/tables/pollcategories.php',
'CommunityTableGroups' => '/tables/pages.php',
'CommunityTableGroups' => '/tables/groups.php',
'CommunityTablePolls' => '/tables/polls.php',
'CommunityTableMailQueue' => '/tables/mailqueue.php',
'CommunityTableNetwork' => '/tables/network.php',
'CommunityTableEvents' => '/tables/events.php',
'CommunityTableDigestEmail' => '/tables/digest.php',
'CommunityTableRegisterInvite' => '/tables/registerinvites.php',
'CommunityTablePageCategories' => '/tables/pagecategories.php',
);
if (array_key_exists($classname, $backendClassname)) {
require_once(JPATH_ROOT . '/administrator/components/com_community' . $backendClassname[$classname]);
}
if (array_key_exists($classname, $classes)) {
require_once(JPATH_ROOT . '/components/com_community' . $classes[$classname]);
}
}
/**
* Autoload helper class
*/
static function autoload_events($classname) {
$classes = array(
'CEventTrigger' => '/events/router.php'
);
if (array_key_exists($classname, $classes)) {
require_once(JPATH_ROOT . '/components/com_community' . $classes[$classname]);
}
}
/**
* Wrapped CPath->registerNamespace as shortcut
* @param type $namespace
* @param type $path
*/
public static function registerNamespace($namespace, $path) {
$path = CPath::getInstance();
$path->registerNamespace($namespace, $path);
}
/**
* Wrapped CPath->getPath as shortcut
* @param type $key
* @return string
*/
public static function getPath($key) {
$path = CPath::getInstance();
return $path->getPath($key);
}
/**
* Wrapped CPath->getUrl as shortcut
* @param type $key
* @return type
*/
public static function getUrl($key) {
$path = CPath::getInstance();
return $path->getUrl($key);
}
/**
* Attach assets
* @param type $path
* @param type $type
* @param type $assetPath
*/
public static function attach($path, $type, $assetPath = '') {
$assets = CAssets::getInstance();
$assets->attach($path, $type, $assetPath);
}
protected static $clientIP = '';
public static function getClientIP()
{
if (!self::$clientIP) {
if (getenv('HTTP_X_FORWARDED_FOR')) {
self::$clientIP = getenv('HTTP_X_FORWARDED_FOR');
} else if (getenv('REMOTE_ADDR')) {
self::$clientIP = getenv('REMOTE_ADDR');
}
}
return self::$clientIP;
}
}
/**
* Provide global access to JomSocial configuration and paramaters
*/
jimport('joomla.html.parameter');
/**
* Provide global access to JomSocial configuration and paramaters
*/
class CConfig /* extends JRegistry */ {
var $_defaultParam;
private $_jparam = null;
/**
* Return reference to global config object
*
* @return object JParams object
*/
static public function &getInstance() {
static $instance = null;
if (!$instance) {
jimport('joomla.filesystem.file');
// First we need to load the default INI file so that new configuration,
// will not cause any errors.
$ini = JPATH_ROOT . '/administrator/components/com_community/default.ini';
$data = file_get_contents($ini);
$instance = new CConfig();
$instance->_jparam = new CParameter($data);
Table::addIncludePath(JPATH_ROOT . '/administrator/components/com_community/tables');
$config = Table::getInstance('configuration', 'CommunityTable');
$config->load('config');
$instance->_jparam->bind($config->params);
// call trigger to allow configuration override
$appsLib = CAppPlugins::getInstance();
$appsLib->loadApplications();
$args = array();
$args[] = $instance;
$appsLib->triggerEvent('onAfterConfigCreate', $args);
/*
* To fix the date format when setting format is set to Fixed.
* This function retrieves the wrong format and set it to the correct one.
*/
$overrideTimeFormat = array('%b %d' => 'M d Y', '%d %b' => 'd M Y');
$eventdateFormat = $instance->_jparam->get('eventdateformat');
if (strpos($eventdateFormat, '%') !== false) {
$eventdateFormat = $overrideTimeFormat[$eventdateFormat];
}
$profileDateFormat = $instance->_jparam->get('profileDateFormat');
$profileDateFormat = str_replace('%', '', $profileDateFormat);
$instance->_jparam->set('profileDateFormat', $profileDateFormat);
$instance->_jparam->set('eventdateformat', $eventdateFormat);
$instance->_jparam->set('activitiesdayformat', 'F d');
$instance->_jparam->set('activitiestimeformat', 'h:i A');
}
return $instance;
}
/**
* Sets a specific property of the config value
*
* @param string $key
* @param string $value
*
* */
public function set($key, $value) {
$this->_jparam->set($key, $value);
}
/**
* Redirect all call to JParams object to $this->_jparam->
* @param <type> $name
* @param <type> $arguments
*/
public function __call($name, $arguments) {
// call_user_func($this->_jparam->$name, $arguments);
}
/**
* Get a value
*
* @access public
* @param string The name of the param
* @param mixed The default value if not found
* @return string
*/
public function get($key, $default = '', $group = '_default') {
$value = $this->_jparam->get($key, $default, $group);
// Backward compatibility support since now configuration words are split by an underscore.
if (empty($value)) {
$key = CString::str_ireplace('_', '', $key);
$value = $this->_jparam->get($key, $default, $group);
}
return $value;
}
public function getString($key, $default = '', $group = '_default') {
$value = $this->get($key, $default, $group);
return (string) $value;
}
public function getBool($key, $default = '', $group = '_default') {
$value = $this->get($key, $default, $group);
return (bool) $value;
}
public function getInt($key, $default = '', $group = '_default') {
$value = $this->get($key, $default, $group);
return (int) $value;
}
}
class CApplications extends CMSPlugin {
//@todo: Do some stuff so the childs get inheritance?
var $params = '';
public $userparams;
public function __construct(& $subject, $config = null) {
// Set the params for the current object
parent::__construct($subject, $config);
//$this->_getUserParams( );
}
/**
* Function is Deprecated.
* - Should only be used in profile area.
* */
public function loadUserParams() {
$model = CFactory::getModel('apps');
$mainframe = Factory::getApplication();
$jinput = $mainframe->input;
$my = CFactory::getUser();
$userid = $jinput->get('userid', $my->id, 'INT');
$user = CFactory::getUser($userid);
//$user = CFactory::getActiveProfile();
$appName = $this->_name;
$position = $model->getUserAppPosition($user->id, $appName);
$this->params->set('position', $position, 'content');
$params = $model->getUserAppParams($model->getUserApplicationId($appName, $user->id));
$this->userparams = new CParameter($params);
}
public function setNewLayout($position = "") {
$layout = !empty($position) ? $position : 'content';
$this->params->set('newlayout', $layout);
return true;
}
public function getLayout() {
$newLayout = $this->params->get('newlayout', '');
$currentLayout = $this->params->get('position');
$layout = empty($newLayout) ? $currentLayout : $newLayout;
return $layout;
}
public function getRefreshAction($script = array()) {
return $script;
}
}
class CRoute {
var $menuname = 'mainmenu';
/**
* Method to wrap around getting the correct links within the email
* DEPRECATED since 1.5
*/
static function emailLink($url, $xhtml = false) {
return CRoute::getExternalURL($url, $xhtml);
}
/**
* Method to wrap around getting the correct links within the email
*
* @return string $url
* @param string $url
* @param boolean $xhtml
*/
static function getExternalURL($url, $xhtml = false) {
$uri = Uri::getInstance();
$base = $uri->toString(array('scheme', 'host', 'port'));
return $base . CRoute::_($url, $xhtml);
}
static function getURI($xhtml = true) {
// #1506 missing icon when saved privacy page
//return htmlspecialchars(JUri::getInstance()->toString());
return Uri::getInstance()->toString();
}
/**
* Wrapper to JRoute to handle itemid
* We need to try and capture the correct itemid for different view
*/
static function _($url, $xhtml = true, $ssl = null, $absolute = false) {
global $Itemid;
$mainframe = Factory::getApplication();
$jinput = $mainframe->input;
$config = CFactory::getConfig();
$cache = CFactory::getFastCache();
$cacheid = __FILE__ . __LINE__ . serialize(func_get_args()) . $Itemid;
if ($data = $cache->get($cacheid)) {
$data = Route::_($data, $xhtml, $ssl, $absolute);
return $data;
}
static $itemid = array();
parse_str(str_ireplace('index.php?', '', $url), $result);
if (isset($result['view'])) {
$view = $result['view'];
} else {
$view = 'frontpage';
}
if (empty($view)) {
$view = 'frontpage';
}
if (isset($option) && $option != 'com_community') {
if (!$Itemid) {
$db = Factory::getDBO();
$query = 'SELECT ' . $db->quoteName('id') . ' FROM ' . $db->quoteName('#__menu') . ' '
. 'WHERE ' . $db->quoteName('link') . ' LIKE ' . $db->Quote('%' . $url . '%');
$db->setQuery($query);
$id = $db->loadResult();
$url .= '&Itemid=' . $id;
}
return Route::_($url, $xhtml, $ssl, $absolute);
}
if (empty($itemid[$view])) {
global $Itemid;
$isValid = false;
$currentView = $jinput->get('view', 'frontpage', 'NONE');
$currentOption = $jinput->get('option', '', 'STRING');
// If the current Itemid match the expected Itemid based on view
// we'll just use it
$db = Factory::getDBO();
$viewId = CRoute::_getViewItemid($view);
// if current itemid
if ($currentOption == 'com_community' && $currentView == $view && $Itemid != 0) {
$itemid[$view] = $Itemid;
$isValid = true;
} else if ($viewId === $Itemid && !is_null($viewId) && $Itemid != 0) {
$itemid[$view] = $Itemid;
$isValid = true;
} else if ($viewId) {
$itemid[$view] = $viewId;
$isValid = true;
// See if language is there
// $lang = $jinput->get('language', '', 'NONE');
// if (!empty($lang)) {
// $itemid[$view] = $viewId;
// $isValid = true;
// } else {
// // using jomsocial frontpage if exist
// $defaultItemid = CRoute::_getDefaultItemid();
// if (!$defaultItemid) {
// $itemid[$view] = $viewId;
// $isValid = true;
// }
// }
}
if (!$isValid) {
$id = CRoute::_getDefaultItemid();
if ($id !== 0 && !is_null($id)) {
$itemid[$view] = $id;
}
$isValid = true;
}
// Search the mainmenu for the 1st itemid of jomsocial we can find, that match the current language code
if (!$isValid) {
$db = Factory::getDBO();
$query = 'SELECT ' . $db->quoteName('id') . ' FROM ' . $db->quoteName('#__menu') . ' WHERE '
. $db->quoteName('link') . ' LIKE ' . $db->Quote('%com_community%')
. 'AND ' . $db->quoteName('published') . '=' . $db->Quote(1) . ' '
. 'AND ' . $db->quoteName('menutype') . '=' . $db->Quote('{CRoute::menuname}')
. 'AND ' . $db->quoteName('menutype') . '!=' . $db->Quote(CFactory::getConfig()->get('toolbar_menutype')) . ' '
. 'AND ' . $db->quoteName('type') . '=' . $db->Quote('component');
$db->setQuery($query);
$isValid = $db->loadResult();
if (!empty($isValid)) {
$itemid[$view] = $isValid;
}
}
// If not in mainmenu, seach in any menu
if (!$isValid) {
$query = 'SELECT ' . $db->quoteName('id') . ' FROM ' . $db->quoteName('#__menu') . ' WHERE '
. $db->quoteName('link') . ' LIKE ' . $db->Quote('%com_community%')
. 'AND ' . $db->quoteName('published') . '=' . $db->Quote(1) . ' '
. 'AND ' . $db->quoteName('menutype') . '!=' . $db->Quote($config->get('toolbar_menutype')) . ' '
. 'AND ' . $db->quoteName('type') . '=' . $db->Quote('component');
$db->setQuery($query);
$isValid = $db->loadResult();
if (!empty($isValid))
$itemid[$view] = $isValid;
}
}
$pos = strpos($url, '#');
if ($pos === false) {
if (isset($itemid[$view])) {
if (strpos($url, 'Itemid=') === false && strpos($url, 'com_community') !== false) {
$url .= '&Itemid=' . $itemid[$view];
}
}
} else {
if (isset($itemid[$view]))
$url = str_ireplace('#', '&Itemid=' . $itemid[$view] . '#', $url);
}
$data = Route::_($url, $xhtml, $ssl, $absolute);
$cache->store($url, $cacheid);
return $data;
}
/**
* Return the Itemid specific for the given view.
*/
static function _getViewItemid($view) {
static $itemid = array();
if (empty($itemid[$view])) {
$config = CFactory::getConfig();
$siteMenu = Factory::getApplication()->getMenu();
$menus = $siteMenu->getItems(array('component'), array('com_community'));
$val = '';
foreach ($menus as $menu) {
if ($menu->menutype !== $config->get('toolbar_menutype')
&& isset($menu->query['view'])
&& $menu->query['view'] === $view) {
$val = $menu->id;
break;
}
}
$itemid[$view] = $val;
} else {
$val = $itemid[$view];
}
return $val;
}
/**
* Retrieve the Itemid of JomSocial's menu. If you are creating a link to JomSocial, you
* will need to retrieve the Itemid.
* */
static function getItemId() {
return CRoute::_getDefaultItemid();
}
/**
* Return the Itemid for default view, frontpage
*/
static function _getDefaultItemid() {
static $defaultId = null;
if ($defaultId != null)
return $defaultId;
$db = Factory::getDBO();
$url = $db->quote("index.php?option=com_community&view=frontpage");
$type = $db->quote('component');
$mainframe = Factory::getApplication();
$jinput = $mainframe->input;
// See if language is there
$lang = $jinput->get('language', '', 'NONE');
$langFilter = '';
if ($lang) {
$langs = implode(',', $db->q(array($lang, '*')));
$langFilter .= ' AND '.$db->quoteName('language').' IN (' . $langs . ') ';
}
$query = 'SELECT ' . $db->quoteName('id') . ' FROM ' . $db->quoteName('#__menu')
. ' WHERE ' . $db->quoteName('link') . ' = ' . $url . ' AND ' . $db->quoteName('published') . '=' . $db->Quote(1) . ' '
. 'AND ' . $db->quoteName('type') . '=' . $db->Quote('component') . $langFilter;
$db->setQuery($query);
$val = $db->loadResult();
if (!$val) {
$url = $db->quote("%option=com_community%");
$query = 'SELECT ' . $db->quoteName('id') . ' FROM ' . $db->quoteName('#__menu')
. ' WHERE ' . $db->quoteName('link') . ' LIKE ' . $url . ' AND ' . $db->quoteName('published') . '=' . $db->Quote(1) . ' '
. 'AND ' . $db->quoteName('type') . '=' . $db->Quote('component');
$db->setQuery($query);
$val = $db->loadResult();
}
$defaultId = $val;
return $val;
}
}
/**
*
*/
class CDispatcher extends JDispatcher {
/**
* Overide JDispatcher::getInstance function.
* @staticvar CDispatcher $instance
* @return \CDispatcher
*/
public static function getInstanceStatic() {
static $instance;
if (!is_object($instance)) {
$instance = new CDispatcher();
//link JDispatcher's properties to CDispatcher's properties
$dispatcher = JDispatcher::getInstance();
$arr_p = get_object_vars($dispatcher);
foreach ($arr_p as $key => $value) {
$instance->$key = &$dispatcher->$key;
}
if (version_compare(JVERSION, '4', '>=')) {
$d = Factory::getApplication()->getDispatcher();
$listeners = $d->getListeners();
$addedClass = [];
foreach ($listeners as $listener) {
if (is_array($listener)) {
foreach ($listener as $obj) {
if ($obj instanceof Closure) {
$r = new ReflectionFunction($obj);
$observer = $r->getClosureThis();
if (is_object($observer)) {
$className = strtolower(get_class($observer));
if (strpos($className, 'plgcommunity') === 0 && !in_array($className, $addedClass)) {
$addedClass[] = $className;
$instance->_observers[] = $observer;
}
}
}
}
}
}
}
}
return $instance;
}
/**
* Contructor, inherrit from parrent.
* */
public function getObservers() {
return $this->_observers;
}
}
class CPluginWrapper extends CMSPlugin {
private $JplgObj;
/**
* Contructor, inherrit from parrent.
* */
public function __construct($JplgObj) {
if (
is_object($JplgObj)
&& (is_subclass_of($JplgObj, JPlugin::class) || is_subclass_of($JplgObj, CMSPlugin::class))
) {
$this->JplgObj = $JplgObj;
}
}
public function getPluginType() {
if ($this->JplgObj) {
return $this->JplgObj->_type;
}
return '';
}
public function getPluginName() {
if ($this->JplgObj) {
return $this->JplgObj->_name;
}
return '';
}
}
class CACL {
public static function getInstance() {
static $instance;
if (!is_object($instance)) {
$instance = new CACLAccess();
}
return $instance;
}
}
class CACLAccess extends Access {
public function getGroupsByUserId($userId) {
$groupIds = Access::getGroupsByUser($userId);
return $this->getGroupName(end($groupIds));
}
public function getGroupUser($userId) {
$groupIds = Access::getGroupsByUser($userId, false);
return $this->getGroupName($groupIds[0]);
}
public function getGroupID($groupname) {
$db = Factory::getDbo();
$query = 'Select '
. $db->quoteName('id') . ' from '
. $db->quoteName('#__usergroups') . ' where '
. $db->quoteName('title') . '='
. $db->quote($groupname);
$db->setQuery($query);
return $db->loadResult();
}
public function getGroupName($groupId) {
if ($groupId !== '') {
$db = Factory::getDbo();
$query = 'Select '
. $db->quoteName('title') . ' from '
. $db->quoteName('#__usergroups') . ' where '
. $db->quoteName('id') . '='
. $db->quote($groupId);
$db->setQuery($query);
return $db->loadResult();
}
return '';
}
public function is_group_child_of($grp_src, $grp_tgt) {
$gid_src = $this->getGroupID($grp_src);
$gid_tgt = $this->getGroupID($grp_tgt);
if ($gid_src && $gid_tgt) {
$group_path = Access::getGroupPath($gid_src);
if (is_array($group_path) && in_array($gid_tgt, $group_path)) {
return true;
}
}
return false;
}
}
class CString {
static public function str_ireplace($search, $replace, $str, $count = NULL) {
$str = $str ? $str : '';
if ($count === FALSE) {
return self::_utf8_ireplace($search, $replace, $str);
} else {
return self::_utf8_ireplace($search, $replace, $str, $count);
}
}
static public function _utf8_ireplace($search, $replace, $str, $count = NULL) {
if (!is_array($search)) {
$slen = strlen($search);
$lendif = strlen($replace) - $slen;
if ($slen == 0) {
return $str;
}
$search = CStringHelper::strtolower($search);
$search = preg_quote($search, '/');
$lstr = CStringHelper::strtolower($str);
$i = 0;
$matched = 0;
while (preg_match('/(.*)' . $search . '/Us', $lstr, $matches)) {
if ($i === $count) {
break;
}
$mlen = strlen($matches[0]);
$lstr = substr($lstr, $mlen);
$str = substr_replace($str, $replace, $matched + strlen($matches[1]), $slen);
$matched += $mlen + $lendif;
$i++;
}
return $str;
} else {
foreach (array_keys($search) as $k) {
if (is_array($replace)) {
if (array_key_exists($k, $replace)) {
$str = CString::_utf8_ireplace($search[$k], $replace[$k], $str, $count);
} else {
$str = CString::_utf8_ireplace($search[$k], '', $str, $count);
}
} else {
$str = CString::_utf8_ireplace($search[$k], $replace, $str, $count);
}
}
return $str;
}
}
}
/**
*
* For list of social object, please refer to http://code.jomsocial.com/default.asp?W287
*/
class CSocialObject extends cobject {
}
interface CStreamable {
/** Return HTML formatted stream data * */
public function getStreamHTML($object);
/** Return true is the user can post to the stream * */
public function isAllowStreamPost($userid, $itemid);
/** Return an array of activities app code * */
static public function getStreamAppCode();
}
interface CAccessInterface {
/** Return authorise in bool * */
static public function authorise();
}
/**
* Load core scripts
* @since 3.2
*/
// $app = Factory::getApplication();
// only load within community component
// if ($app->isSite() && ( $app->input->get('option') == 'com_community' || JVERSION < 3.2)) {
// $js = 'assets/stream.js';
// CFactory::attach($js, 'js');
// $map = 'https://maps.googleapis.com/maps/api/js?libraries=places&sensor=false';
// $doc = Factory::getDocument();
// $doc->addScript($map);
// }
/**
* Get and store into session current user IP
* @since 3.2
*/
$session = Factory::getSession();
if (!$session->get('jomsocial_userip')) {
/**
* Get vistor IP
*/
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = CFactory::getClientIP();
if (filter_var($client, FILTER_VALIDATE_IP)) {
$ip = $client;
} elseif (filter_var($forward, FILTER_VALIDATE_IP)) {
$ip = $forward;
} else {
$ip = $remote;
}
$session->set('jomsocial_userip', $ip);
}