                                                                                                                                                                                
                                                                                                                                                                                
helper.php                                                                                          0000705                 00000026603 15242036722 0006544 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * @version    2.11 (rolling release)
 * @package    K2
 * @author     JoomlaWorks https://www.joomlaworks.net
 * @copyright  Copyright (c) 2009 - 2024 JoomlaWorks Ltd. All rights reserved.
 * @license    GNU/GPL: https://gnu.org/licenses/gpl.html
 */

// no direct access
defined('_JEXEC') or die;

require_once(JPATH_SITE.'/components/com_k2/helpers/route.php');
require_once(JPATH_SITE.'/components/com_k2/helpers/utilities.php');

class modK2UsersHelper
{
    public static function getUsers(&$params)
    {
        $app = JFactory::getApplication();
        $db = JFactory::getDbo();

        $jnow = JFactory::getDate();
        $now = (K2_JVERSION != '15') ? $jnow->toSql() : $jnow->toMySQL();
        $nullDate = $db->getNullDate();

        // Get ACL
        $user = JFactory::getUser();
        if (K2_JVERSION != '15') {
            $userLevels = array_unique($user->getAuthorisedViewLevels());
            $aclCheck = 'IN('.implode(',', $userLevels).')';
        } else {
            $aid = $user->get('aid');
            $aclCheck = '<= '.$user->get('aid');
        }

        // Get language on Joomla 2.5+
        $languageFilter = '';
        if (K2_JVERSION != '15') {
            if ($app->getLanguageFilter()) {
                $languageTag = JFactory::getLanguage()->getTag();
                $languageFilter = $db->Quote($languageTag).", ".$db->Quote('*');
            }
        }

        $userObjects = array();

        if ($params->get('source') == 'specific' && $params->get('userIDs')) {
            $IDs = array();
            if (is_string($params->get('userIDs'))) {
                $IDs[] = $params->get('userIDs');
            } else {
                $IDs = $params->get('userIDs');
            }

            $query = "SELECT users.name, users.email, users.id AS UID, profiles.*
                FROM #__users AS users
                LEFT JOIN #__k2_users AS profiles ON users.id=profiles.userID
                WHERE users.block=0 AND users.id IN (".implode(',', $IDs).")";

            $db->setQuery($query);
            $userObjects = $db->loadObjectList();

            $newUserObjects = array();
            foreach ($IDs as $id) {
                foreach ($userObjects as $uO) {
                    if ($uO->UID == $id) {
                        $newUserObjects[] = $uO;
                        break;
                    }
                }
            }
            $userObjects = $newUserObjects;
        } else {
            switch ($params->get('filter', 0)) {

                // By K2 user group
                case 0:
                    $query = "SELECT users.name, users.email, users.id AS UID, profiles.*";

                    if ($params->get('ordering') == 'recent') {
                        $query .= ", MAX(i.created) AS counter";
                    }

                    $query .= " FROM #__users AS users
                        LEFT JOIN #__k2_users AS profiles ON users.id=profiles.userID";

                    if ($params->get('ordering') == 'recent') {
                        $query .= " LEFT JOIN #__k2_items AS i ON users.id=i.created_by LEFT JOIN #__k2_categories AS c ON i.catid=c.id";
                    }

                    $query .= " WHERE users.block=0 AND profiles.`group`=".(int)$params->get('K2UserGroup');

                    if ($params->get('ordering') == 'recent') {
                        $query .= " AND i.published = 1
                            AND i.trash = 0
                            AND i.access {$aclCheck}
                            AND (i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now).")
                            AND (i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now).")
                            AND i.created_by_alias=''
                            AND c.published = 1
                            AND c.trash = 0
                            AND c.access {$aclCheck}";

                        if ($languageFilter) {
                            $query .= " AND i.language IN ({$languageFilter}) AND c.language IN ({$languageFilter})";
                        }
                    }

                    switch ($params->get('ordering')) {
                        case 'alpha':
                            $orderby = "users.name";
                            break;
                        case 'recent':
                            $orderby = "counter DESC";
                            break;
                        case 'random':
                            $orderby = "RAND()";
                            break;
                    }

                    $query .= " GROUP BY users.id ORDER BY {$orderby}";
                    break;

                // With most items
                case 1:
                    $query = "SELECT users.name, users.email, users.id AS UID, profiles.*, COUNT(i.id) AS counter
                        FROM #__users AS users
                        LEFT JOIN #__k2_users AS profiles ON users.id=profiles.userID
                        LEFT JOIN #__k2_items AS i ON users.id=i.created_by
                        LEFT JOIN #__k2_categories AS c ON i.catid=c.id
                        WHERE users.block=0
                            AND i.published = 1
                            AND i.trash = 0
                            AND i.access {$aclCheck}
                            AND (i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now).")
                            AND (i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now).")
                            AND i.created_by_alias=''
                            AND c.published = 1
                            AND c.trash = 0
                            AND c.access {$aclCheck}";

                    if ($languageFilter) {
                        $query .= " AND i.language IN ({$languageFilter}) AND c.language IN ({$languageFilter})";
                    }

                    $query .= " GROUP BY users.id ORDER BY counter DESC";
                    break;

                // With most popular items
                case 2:
                    $query = "SELECT users.name, users.email, users.id AS UID, profiles.*, MAX(i.hits) AS counter
                        FROM #__users AS users
                        LEFT JOIN #__k2_users AS profiles ON users.id=profiles.userID
                        LEFT JOIN #__k2_items AS i ON users.id=i.created_by
                        LEFT JOIN #__k2_categories AS c ON i.catid=c.id
                        WHERE users.block=0
                            AND i.published = 1
                            AND i.trash = 0
                            AND i.access {$aclCheck}
                            AND (i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now).")
                            AND (i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now).")
                            AND i.created_by_alias=''
                            AND c.published = 1
                            AND c.trash = 0
                            AND c.access {$aclCheck}";

                    if ($languageFilter) {
                        $query .= " AND i.language IN ({$languageFilter}) AND c.language IN ({$languageFilter})";
                    }

                    $query .= " GROUP BY users.id ORDER BY counter DESC";
                    break;

                // With most commented items
                case 3:
                    $query = "SELECT users.name, users.email, users.id AS UID, profiles.*, COUNT(comment.id) AS counter
                        FROM #__users AS users
                        LEFT JOIN #__k2_users AS profiles ON users.id=profiles.userID
                        LEFT JOIN #__k2_items AS i ON users.id=i.created_by
                        LEFT JOIN #__k2_categories AS c ON i.catid=c.id
                        LEFT JOIN #__k2_comments AS comment ON i.id=comment.itemID
                        WHERE users.block=0
                            AND i.published = 1
                            AND i.trash = 0
                            AND i.access {$aclCheck}
                            AND (i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now).")
                            AND (i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now).")
                            AND i.created_by_alias=''
                            AND c.published = 1
                            AND c.trash = 0
                            AND c.access {$aclCheck}";

                    if ($languageFilter) {
                        $query .= " AND i.language IN ({$languageFilter}) AND c.language IN ({$languageFilter})";
                    }

                    $query .= " GROUP BY users.id ORDER BY counter DESC";
                    break;
            }

            $db->setQuery($query, 0, $params->get('limit', 4));
            $userObjects = $db->loadObjectList();
        }

        // Render the query results
        if (count($userObjects)) {
            foreach ($userObjects as $userObject) {
                $userObject->avatar = K2HelperUtilities::getAvatar($userObject->UID, $userObject->email, $params->get('userImageWidth'));
                $userObject->link = JRoute::_(K2HelperRoute::getUserRoute($userObject->UID));
                $userObject->feed = JRoute::_(K2HelperRoute::getUserRoute($userObject->UID).'&format=feed');
                $userObject->url = htmlspecialchars($userObject->url, ENT_QUOTES, 'UTF-8');

                if ($params->get('userItemCount')) {
                    $query = "SELECT i.*, c.name AS categoryname, c.id AS categoryid, c.alias AS categoryalias, c.params AS categoryparams
                        FROM #__k2_items AS i
                        LEFT JOIN #__k2_categories AS c ON c.id = i.catid
                        WHERE i.published = 1
                            AND i.trash = 0
                            AND i.access {$aclCheck}
                            AND (i.publish_up = ".$db->Quote($nullDate)." OR i.publish_up <= ".$db->Quote($now).")
                            AND (i.publish_down = ".$db->Quote($nullDate)." OR i.publish_down >= ".$db->Quote($now).")
                            AND i.created_by=".(int)$userObject->UID."
                            AND i.created_by_alias=''
                            AND c.published = 1
                            AND c.trash = 0
                            AND c.access {$aclCheck}";

                    if ($languageFilter) {
                        $query .= " AND i.language IN ({$languageFilter}) AND c.language IN ({$languageFilter})";
                    }

                    $query .= " ORDER BY i.created DESC";

                    $db->setQuery($query, 0, $params->get('userItemCount'));
                    $userObject->items = $db->loadObjectList();

                    if (count($userObject->items)) {
                        foreach ($userObject->items as $item) {
                            $link = K2HelperRoute::getItemRoute($item->id.':'.urlencode($item->alias), $item->catid.':'.urlencode($item->categoryalias));
                            $item->link = urldecode(JRoute::_($link));
                            $item->categoryLink = urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($item->catid.':'.urlencode($item->categoryalias))));
                        }
                    }
                } else {
                    $userObject->items = null;
                }
            }
        }
        return $userObjects;
    }
}
                                                                                                                             tmpl/Default/default.php                                                                            0000705                 00000006761 15242036722 0011254 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * @version    2.11 (rolling release)
 * @package    K2
 * @author     JoomlaWorks https://www.joomlaworks.net
 * @copyright  Copyright (c) 2009 - 2024 JoomlaWorks Ltd. All rights reserved.
 * @license    GNU/GPL: https://gnu.org/licenses/gpl.html
 */

// no direct access
defined('_JEXEC') or die;

?>

<div id="k2ModuleBox<?php echo $module->id; ?>" class="k2UsersBlock<?php if ($params->get('moduleclass_sfx')) echo ' '.$params->get('moduleclass_sfx'); ?>">
    <ul>
        <?php foreach($users as $key=>$user): ?>
        <li class="<?php echo ($key%2) ? "odd" : "even"; if (count($users)==$key+1) echo ' lastItem'; ?>">
            <?php if ($userAvatar && !empty($user->avatar)): ?>
            <a class="k2Avatar ubUserAvatar" rel="author" href="<?php echo $user->link; ?>" title="<?php echo K2HelperUtilities::cleanHtml($user->name); ?>">
                <img src="<?php echo $user->avatar; ?>" alt="<?php echo K2HelperUtilities::cleanHtml($user->name); ?>" style="width:<?php echo $avatarWidth; ?>px;height:auto;" />
            </a>
            <?php endif; ?>

            <?php if ($userName): ?>
            <a class="ubUserName" rel="author" href="<?php echo $user->link; ?>" title="<?php echo K2HelperUtilities::cleanHtml($user->name); ?>">
                <?php echo $user->name; ?>
            </a>
            <?php endif; ?>

            <?php if ($userDescription && $user->description): ?>
            <div class="ubUserDescription">
                <?php if ($userDescriptionWordLimit): ?>
                <?php echo K2HelperUtilities::wordLimit($user->description, $userDescriptionWordLimit) ?>
                <?php else: ?>
                <?php echo $user->description; ?>
                <?php endif; ?>
            </div>
            <?php endif; ?>

            <?php if ($userFeed || ($userURL && $user->url) || $userEmail): ?>
            <div class="ubUserAdditionalInfo">
                <?php if ($userFeed): ?>
                <!-- RSS feed icon -->
                <a class="ubUserFeedIcon" href="<?php echo $user->feed; ?>" title="<?php echo JText::_('K2_SUBSCRIBE_TO_THIS_USERS_RSS_FEED'); ?>">
                    <span><?php echo JText::_('K2_SUBSCRIBE_TO_THIS_USERS_RSS_FEED'); ?></span>
                </a>
                <?php endif; ?>

                <?php if ($userURL && $user->url): ?>
                <a class="ubUserURL" rel="me" href="<?php echo $user->url; ?>" title="<?php echo JText::_('K2_WEBSITE'); ?>" target="_blank">
                    <span><?php echo JText::_('K2_WEBSITE'); ?></span>
                </a>
                <?php endif; ?>

                <?php if ($userEmail): ?>
                <span class="ubUserEmail" title="<?php echo JText::_('K2_EMAIL'); ?>">
                    <?php echo JHTML::_('Email.cloak', $user->email); ?>
                </span>
                <?php endif; ?>
            </div>
            <?php endif; ?>

            <?php if ($userItemCount && count($user->items)): ?>
            <h3><?php echo JText::_('K2_RECENT_ITEMS'); ?></h3>
            <ul class="ubUserItems">
                <?php foreach ($user->items as $item): ?>
                <li>
                    <a href="<?php echo $item->link; ?>" title="<?php echo K2HelperUtilities::cleanHtml($item->title); ?>">
                        <?php echo $item->title; ?>
                    </a>
                </li>
                <?php endforeach; ?>
            </ul>
            <?php endif; ?>

            <div class="clr"></div>
        </li>
        <?php endforeach; ?>
    </ul>
</div>
               mod_k2_users.xml                                                                                    0000705                 00000014513 15242036722 0007667 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?xml version="1.0" encoding="UTF-8"?>
<extension type="module" client="site" version="2.5" method="upgrade">
    <name>K2 Users</name>
    <author>JoomlaWorks</author>
    <creationDate>(see K2 component)</creationDate>
    <copyright>Copyright (c) 2009 - 2024 JoomlaWorks Ltd. All rights reserved.</copyright>
    <authorEmail>please-use-the-contact-form@joomlaworks.net</authorEmail>
    <authorUrl>https://www.joomlaworks.net</authorUrl>
    <version>(see K2 component)</version>
    <license>https://gnu.org/licenses/gpl.html</license>
    <description>K2_MOD_K2_USERS_DESCRTIPTION</description>
    <files>
        <filename module="mod_k2_users">mod_k2_users.php</filename>
        <filename>helper.php</filename>
        <folder>tmpl</folder>
    </files>
    <config>
        <fields name="params">
            <fieldset name="basic" addfieldpath="/administrator/components/com_k2/elements/">
                <field name="moduleclass_sfx" type="text" default="" label="K2_MODULE_CLASS_SUFFIX" description="K2_MODULE_CLASS_SUFFIX_DESCRIPTION"/>
                <field name="getTemplate" type="moduletemplate" modulename="mod_k2_users" default="Default" label="K2_SELECT_SUBTEMPLATE" description="This module utilizes on-the-fly MVC template overrides. What this means is that you can create a new sub-template folder for this module within your Joomla template's /html/mod_k2_users/ folder. The module will then pickup the new sub-template auto-magically, without you editing any XML file or doing any other non-designer work!"/>
                <field name="source" type="list" default="0" label="K2_SOURCE" description="">
                    <option value="filter">K2_RETRIEVE_USERS_USING_FILTERS</option>
                    <option value="specific">K2_RETRIEVE_SPECIFIC_USERS</option>
                </field>
                <field name="" type="header" default="K2_RETRIEVE_USERS_USING_FILTERS" label="" description=""/>
                <field name="filter" type="list" default="1" label="K2_FETCH_USERS" description="">
                    <option value="0">K2_BY_K2_USER_GROUP</option>
                    <option value="1">K2_WITH_MOST_ITEMS</option>
                    <option value="2">K2_WITH_MOST_POPULAR_ITEMS</option>
                    <option value="3">K2_WITH_MOST_COMMENTED_ITEMS</option>
                </field>
                <field name="K2UserGroup" type="sql" default="" label="K2_SELECT_A_K2_USER_GROUP" query="SELECT id AS value, name AS K2UserGroup FROM #__k2_user_groups"/>
                <field name="ordering" type="list" default="1" label="K2_ORDERING" description="">
                    <option value="alpha">K2_ALPHABETICAL</option>
                    <option value="recent">K2_MOST_RECENT_ITEM</option>
                    <option value="random">K2_RANDOM</option>
                </field>
                <field name="limit" type="text" default="4" size="4" label="K2_LIMIT" description=""/>
                <field name="" type="header" default="K2_RETRIEVE_SPECIFIC_USERS" label="" description=""/>
                <field name="userIDs" type="k2modalselector" scope="users" default="" label="K2_SELECTED_USERS_SORT_WITH_DRAG_DROP" description="K2_DRAG_USERS_ONE_BY_ONE_TO_REORDER_THE_LIST_CLICK_THE_REMOVE_ICON_TO_REMOVE_A_USER_FROM_THE_LIST"/>
                <field name="" type="header" default="K2_DISPLAY_OPTIONS" label="" description=""/>
                <field name="userName" type="radio" default="1" label="K2_NAME" description="" class="btn-group btn-group-yesno">
                    <option value="0">K2_HIDE</option>
                    <option value="1">K2_SHOW</option>
                </field>
                <field name="userAvatar" type="radio" default="1" label="K2_USER_AVATAR" description="" class="btn-group btn-group-yesno">
                    <option value="0">K2_HIDE</option>
                    <option value="1">K2_SHOW</option>
                </field>
                <field name="userAvatarWidthSelect" type="list" default="custom" label="K2_USER_AVATAR_WIDTH" description="">
                    <option value="inherit">K2_INHERIT_FROM_COMPONENT_PARAMETERS</option>
                    <option value="custom">K2_USE_CUSTOM_WIDTH</option>
                </field>
                <field name="userAvatarWidth" type="text" default="50" size="4" label="K2_CUSTOM_WIDTH_FOR_USER_AVATAR_IN_PX" description=""/>
                <field name="userDescription" type="radio" default="1" label="K2_USER_DESCRIPTION" description="" class="btn-group btn-group-yesno">
                    <option value="0">K2_HIDE</option>
                    <option value="1">K2_SHOW</option>
                </field>
                <field name="userDescriptionWordLimit" type="text" default="" size="4" label="K2_WORD_LIMIT_FOR_USER_DESCRIPTION" description=""/>
                <field name="userURL" type="radio" default="1" label="K2_URL" description="" class="btn-group btn-group-yesno">
                    <option value="0">K2_HIDE</option>
                    <option value="1">K2_SHOW</option>
                </field>
                <field name="userEmail" type="radio" default="0" label="K2_EMAIL" description="" class="btn-group btn-group-yesno">
                    <option value="0">K2_HIDE</option>
                    <option value="1">K2_SHOW</option>
                </field>
                <field name="userFeed" type="radio" default="1" label="K2_RSS_FEED_ICON" description="" class="btn-group btn-group-yesno">
                    <option value="0">K2_HIDE</option>
                    <option value="1">K2_SHOW</option>
                </field>
                <field name="userItemCount" type="text" default="1" size="4" label="K2_ITEM_COUNT" description=""/>
            </fieldset>
            <fieldset name="advanced">
                <field name="cache" type="list" default="1" label="K2_CACHING" description="K2_SELECT_WHETHER_TO_CACHE_THE_CONTENT_OF_THIS_MODULE">
                    <option value="1">K2_USE_GLOBAL</option>
                    <option value="0">K2_NO_CACHING</option>
                </field>
                <field name="cache_time" type="text" default="" label="K2_CACHE_TIME" description="K2_THE_TIME_IN_SECONDS_BEFORE_THE_MODULE_IS_RECACHED"/>
                <field name="cachemode" type="hidden" default="static">
                    <option value="static"></option>
                </field>
            </fieldset>
        </fields>
    </config>
</extension>
                                                                                                                                                                                     mod_k2_users.php                                                                                    0000705                 00000002724 15242036722 0007657 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * @version    2.11 (rolling release)
 * @package    K2
 * @author     JoomlaWorks https://www.joomlaworks.net
 * @copyright  Copyright (c) 2009 - 2024 JoomlaWorks Ltd. All rights reserved.
 * @license    GNU/GPL: https://gnu.org/licenses/gpl.html
 */

// no direct access
defined('_JEXEC') or die;

if (K2_JVERSION != '15') {
    $language = JFactory::getLanguage();
    $language->load('com_k2.dates', JPATH_ADMINISTRATOR, null, true);
}

require_once(dirname(__FILE__).'/helper.php');

// Params
$moduleclass_sfx = $params->get('moduleclass_sfx', '');
$getTemplate = $params->get('getTemplate', 'Default');
$userName = $params->get('userName', 1);
$userAvatar = $params->get('userAvatar', 1);
$userAvatarWidthSelect = $params->get('userAvatarWidthSelect', 'custom');
$userAvatarWidth = $params->get('userAvatarWidth', 50);
$userDescription = $params->get('userDescription', 1);
$userDescriptionWordLimit = $params->get('userDescriptionWordLimit');
$userURL = $params->get('userURL', 1);
$userEmail = $params->get('userEmail', 0);
$userFeed = $params->get('userFeed', 1);
$userItemCount = $params->get('userItemCount', 1);

// User avatar
if ($userAvatarWidthSelect == 'inherit') {
    $componentParams = JComponentHelper::getParams('com_k2');
    $avatarWidth = $componentParams->get('userImageWidth');
} else {
    $avatarWidth = $userAvatarWidth;
}

$users = modK2UsersHelper::getUsers($params);

require(JModuleHelper::getLayoutPath('mod_k2_users', $getTemplate.'/default'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            