| Current Path : /home/w/u/e/wuectly/www/03cbe/ |
| Current File : /home/w/u/e/wuectly/www/03cbe/groups.php.tar |
home/wuectly/www/libraries/joomla/linkedin/groups.php 0000604 00000063455 15245561103 0017111 0 ustar 00 <?php
/**
* @package Joomla.Platform
* @subpackage Linkedin
*
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die();
/**
* Linkedin API Groups class for the Joomla Platform.
*
* @since 3.2.0
*/
class JLinkedinGroups extends JLinkedinObject
{
/**
* Method to get a group.
*
* @param string $id The unique identifier for a group.
* @param string $fields Request fields beyond the default ones.
* @param integer $start Starting location within the result set for paginated returns.
* @param integer $count The number of results returned.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getGroup($id, $fields = null, $start = 0, $count = 5)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/groups/' . $id;
$data['format'] = 'json';
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Check if start is specified.
if ($start > 0)
{
$data['start'] = $start;
}
// Check if count is specified.
if ($count != 5)
{
$data['count'] = $count;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to find the groups a member belongs to.
*
* @param string $id The unique identifier for a user.
* @param string $fields Request fields beyond the default ones.
* @param integer $start Starting location within the result set for paginated returns.
* @param integer $count The number of results returned.
* @param string $membershipState The state of the caller’s membership to the specified group.
* Values are: non-member, awaiting-confirmation, awaiting-parent-group-confirmation, member, moderator,
* manager, owner.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getMemberships($id = null, $fields = null, $start = 0, $count = 5, $membershipState = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/people/';
// Check if id is specified.
if ($id)
{
$base .= $id . '/group-memberships';
}
else
{
$base .= '~/group-memberships';
}
$data['format'] = 'json';
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Check if start is specified.
if ($start > 0)
{
$data['start'] = $start;
}
// Check if count is specified.
if ($count != 5)
{
$data['count'] = $count;
}
// Check if membership_state is specified.
if ($membershipState)
{
$data['membership-state'] = $membershipState;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to find the groups a member belongs to.
*
* @param string $personId The unique identifier for a user.
* @param string $groupId The unique identifier for a group.
* @param string $fields Request fields beyond the default ones.
* @param integer $start Starting location within the result set for paginated returns.
* @param integer $count The number of results returned.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getSettings($personId = null, $groupId = null, $fields = null, $start = 0, $count = 5)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/people/';
// Check if person_id is specified.
if ($personId)
{
$base .= $personId . '/group-memberships';
}
else
{
$base .= '~/group-memberships';
}
// Check if group_id is specified.
if ($groupId)
{
$base .= '/' . $groupId;
}
$data['format'] = 'json';
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Check if start is specified.
if ($start > 0)
{
$data['start'] = $start;
}
// Check if count is specified.
if ($count != 5)
{
$data['count'] = $count;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to change a groups settings.
*
* @param string $groupId The unique identifier for a group.
* @param boolean $showLogo Show group logo in profile.
* @param string $digestFrequency Email digest frequency.
* @param boolean $announcements Email announcements from managers.
* @param boolean $allowMessages Allow messages from members.
* @param boolean $newPost Email for every new post.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function changeSettings($groupId, $showLogo = null, $digestFrequency = null, $announcements = null,
$allowMessages = null, $newPost = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/people/~/group-memberships/' . $groupId;
// Build xml.
$xml = '<group-membership>';
if (!is_null($showLogo))
{
$xml .= '<show-group-logo-in-profile>' . $this->booleanToString($showLogo) . '</show-group-logo-in-profile>';
}
if ($digestFrequency)
{
$xml .= '<email-digest-frequency><code>' . $digestFrequency . '</code></email-digest-frequency>';
}
if (!is_null($announcements))
{
$xml .= '<email-announcements-from-managers>' . $this->booleanToString($announcements) . '</email-announcements-from-managers>';
}
if (!is_null($allowMessages))
{
$xml .= '<allow-messages-from-members>' . $this->booleanToString($allowMessages) . '</allow-messages-from-members>';
}
if (!is_null($newPost))
{
$xml .= '<email-for-every-new-post>' . $this->booleanToString($newPost) . '</email-for-every-new-post>';
}
$xml .= '</group-membership>';
// Build the request path.
$path = $this->getOption('api.url') . $base;
$header['Content-Type'] = 'text/xml';
// Send the request.
$response = $this->oauth->oauthRequest($path, 'PUT', $parameters, $xml, $header);
return $response;
}
/**
* Method to join a group.
*
* @param string $groupId The unique identifier for a group.
* @param boolean $showLogo Show group logo in profile.
* @param string $digestFrequency Email digest frequency.
* @param boolean $announcements Email announcements from managers.
* @param boolean $allowMessages Allow messages from members.
* @param boolean $newPost Email for every new post.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function joinGroup($groupId, $showLogo = null, $digestFrequency = null, $announcements = null,
$allowMessages = null, $newPost = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 201);
// Set the API base
$base = '/v1/people/~/group-memberships';
// Build xml.
$xml = '<group-membership><group><id>' . $groupId . '</id></group>';
if (!is_null($showLogo))
{
$xml .= '<show-group-logo-in-profile>' . $this->booleanToString($showLogo) . '</show-group-logo-in-profile>';
}
if ($digestFrequency)
{
$xml .= '<email-digest-frequency><code>' . $digestFrequency . '</code></email-digest-frequency>';
}
if (!is_null($announcements))
{
$xml .= '<email-announcements-from-managers>' . $this->booleanToString($announcements) . '</email-announcements-from-managers>';
}
if (!is_null($allowMessages))
{
$xml .= '<allow-messages-from-members>' . $this->booleanToString($allowMessages) . '</allow-messages-from-members>';
}
if (!is_null($newPost))
{
$xml .= '<email-for-every-new-post>' . $this->booleanToString($newPost) . '</email-for-every-new-post>';
}
$xml .= '<membership-state><code>member</code></membership-state></group-membership>';
// Build the request path.
$path = $this->getOption('api.url') . $base;
$header['Content-Type'] = 'text/xml';
// Send the request.
$response = $this->oauth->oauthRequest($path, 'POST', $parameters, $xml, $header);
return $response;
}
/**
* Method to leave a group.
*
* @param string $groupId The unique identifier for a group.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function leaveGroup($groupId)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 204);
// Set the API base
$base = '/v1/people/~/group-memberships/' . $groupId;
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'DELETE', $parameters);
return $response;
}
/**
* Method to get discussions for a group.
*
* @param string $id The unique identifier for a group.
* @param string $fields Request fields beyond the default ones.
* @param integer $start Starting location within the result set for paginated returns.
* @param integer $count The number of results returned.
* @param string $order Sort order for posts. Valid for: recency, popularity.
* @param string $category Category of posts. Valid for: discussion
* @param string $modifiedSince Timestamp filter for posts created after the specified value.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getDiscussions($id, $fields = null, $start = 0, $count = 0, $order = null, $category = 'discussion', $modifiedSince = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/groups/' . $id . '/posts';
$data['format'] = 'json';
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Check if start is specified.
if ($start > 0)
{
$data['start'] = $start;
}
// Check if count is specified.
if ($count > 0)
{
$data['count'] = $count;
}
// Check if order is specified.
if ($order)
{
$data['order'] = $order;
}
// Check if category is specified.
if ($category)
{
$data['category'] = $category;
}
// Check if modified_since is specified.
if ($modifiedSince)
{
$data['modified-since'] = $modifiedSince;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to get posts a user started / participated in / follows for a group.
*
* @param string $groupId The unique identifier for a group.
* @param string $role Filter for posts related to the caller. Valid for: creator, commenter, follower.
* @param string $personId The unique identifier for a user.
* @param string $fields Request fields beyond the default ones.
* @param integer $start Starting location within the result set for paginated returns.
* @param integer $count The number of results returned.
* @param string $order Sort order for posts. Valid for: recency, popularity.
* @param string $category Category of posts. Valid for: discussion
* @param string $modifiedSince Timestamp filter for posts created after the specified value.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getUserPosts($groupId, $role, $personId = null, $fields = null, $start = 0, $count = 0,
$order = null, $category = 'discussion', $modifiedSince = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/people/';
// Check if person_id is specified.
if ($personId)
{
$base .= $personId;
}
else
{
$base .= '~';
}
$base .= '/group-memberships/' . $groupId . '/posts';
$data['format'] = 'json';
$data['role'] = $role;
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Check if start is specified.
if ($start > 0)
{
$data['start'] = $start;
}
// Check if count is specified.
if ($count > 0)
{
$data['count'] = $count;
}
// Check if order is specified.
if ($order)
{
$data['order'] = $order;
}
// Check if category is specified.
if ($category)
{
$data['category'] = $category;
}
// Check if modified_since is specified.
if ($modifiedSince)
{
$data['modified-since'] = $modifiedSince;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to retrieve details about a post.
*
* @param string $postId The unique identifier for a post.
* @param string $fields Request fields beyond the default ones.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getPost($postId, $fields = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/posts/' . $postId;
$data['format'] = 'json';
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to retrieve all comments of a post.
*
* @param string $postId The unique identifier for a post.
* @param string $fields Request fields beyond the default ones.
* @param integer $start Starting location within the result set for paginated returns.
* @param integer $count The number of results returned.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getPostComments($postId, $fields = null, $start = 0, $count = 0)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/posts/' . $postId . '/comments';
$data['format'] = 'json';
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Check if start is specified.
if ($start > 0)
{
$data['start'] = $start;
}
// Check if count is specified.
if ($count > 0)
{
$data['count'] = $count;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to retrieve all comments of a post.
*
* @param string $groupId The unique identifier for a group.
* @param string $title Post title.
* @param string $summary Post summary.
*
* @return string The created post's id.
*
* @since 3.2.0
*/
public function createPost($groupId, $title, $summary)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 201);
// Set the API base
$base = '/v1/groups/' . $groupId . '/posts';
// Build xml.
$xml = '<post><title>' . $title . '</title><summary>' . $summary . '</summary></post>';
// Build the request path.
$path = $this->getOption('api.url') . $base;
$header['Content-Type'] = 'text/xml';
// Send the request.
$response = $this->oauth->oauthRequest($path, 'POST', $parameters, $xml, $header);
// Return the post id.
$response = explode('posts/', $response->headers['Location']);
return $response[1];
}
/**
* Method to like or unlike a post.
*
* @param string $postId The unique identifier for a group.
* @param boolean $like True to like post, false otherwise.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
private function _likeUnlike($postId, $like)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 204);
// Set the API base
$base = '/v1/posts/' . $postId . '/relation-to-viewer/is-liked';
// Build xml.
$xml = '<is-liked>' . $this->booleanToString($like) . '</is-liked>';
// Build the request path.
$path = $this->getOption('api.url') . $base;
$header['Content-Type'] = 'text/xml';
// Send the request.
$response = $this->oauth->oauthRequest($path, 'PUT', $parameters, $xml, $header);
return $response;
}
/**
* Method used to like a post.
*
* @param string $postId The unique identifier for a group.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function likePost($postId)
{
return $this->_likeUnlike($postId, true);
}
/**
* Method used to unlike a post.
*
* @param string $postId The unique identifier for a group.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function unlikePost($postId)
{
return $this->_likeUnlike($postId, false);
}
/**
* Method to follow or unfollow a post.
*
* @param string $postId The unique identifier for a group.
* @param boolean $follow True to like post, false otherwise.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
private function _followUnfollow($postId, $follow)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 204);
// Set the API base
$base = '/v1/posts/' . $postId . '/relation-to-viewer/is-following';
// Build xml.
$xml = '<is-following>' . $this->booleanToString($follow) . '</is-following>';
// Build the request path.
$path = $this->getOption('api.url') . $base;
$header['Content-Type'] = 'text/xml';
// Send the request.
$response = $this->oauth->oauthRequest($path, 'PUT', $parameters, $xml, $header);
return $response;
}
/**
* Method used to follow a post.
*
* @param string $postId The unique identifier for a group.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function followPost($postId)
{
return $this->_followUnfollow($postId, true);
}
/**
* Method used to unfollow a post.
*
* @param string $postId The unique identifier for a group.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function unfollowPost($postId)
{
return $this->_followUnfollow($postId, false);
}
/**
* Method to flag a post as a Promotion or Job.
*
* @param string $postId The unique identifier for a group.
* @param string $flag Flag as a 'promotion' or 'job'.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function flagPost($postId, $flag)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 204);
// Set the API base
$base = '/v1/posts/' . $postId . '/category/code';
// Build xml.
$xml = '<code>' . $flag . '</code>';
// Build the request path.
$path = $this->getOption('api.url') . $base;
$header['Content-Type'] = 'text/xml';
// Send the request.
$response = $this->oauth->oauthRequest($path, 'PUT', $parameters, $xml, $header);
return $response;
}
/**
* Method to delete a post if the current user is the creator or flag it as inappropriate otherwise.
*
* @param string $postId The unique identifier for a group.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function deletePost($postId)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 204);
// Set the API base
$base = '/v1/posts/' . $postId;
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'DELETE', $parameters);
return $response;
}
/**
* Method to access the comments resource.
*
* @param string $commentId The unique identifier for a comment.
* @param string $fields Request fields beyond the default ones.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getComment($commentId, $fields = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/comments/' . $commentId;
$data['format'] = 'json';
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to add a comment to a post
*
* @param string $postId The unique identifier for a group.
* @param string $comment The post comment's text.
*
* @return string The created comment's id.
*
* @since 3.2.0
*/
public function addComment($postId, $comment)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 201);
// Set the API base
$base = '/v1/posts/' . $postId . '/comments';
// Build xml.
$xml = '<comment><text>' . $comment . '</text></comment>';
// Build the request path.
$path = $this->getOption('api.url') . $base;
$header['Content-Type'] = 'text/xml';
// Send the request.
$response = $this->oauth->oauthRequest($path, 'POST', $parameters, $xml, $header);
// Return the comment id.
$response = explode('comments/', $response->headers['Location']);
return $response[1];
}
/**
* Method to delete a comment if the current user is the creator or flag it as inappropriate otherwise.
*
* @param string $commentId The unique identifier for a group.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function deleteComment($commentId)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 204);
// Set the API base
$base = '/v1/comments/' . $commentId;
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'DELETE', $parameters);
return $response;
}
/**
* Method to get suggested groups for a user.
*
* @param string $personId The unique identifier for a user.
* @param string $fields Request fields beyond the default ones.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function getSuggested($personId = null, $fields = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the API base
$base = '/v1/people/';
// Check if person_id is specified.
if ($personId)
{
$base .= $personId . '/suggestions/groups';
}
else
{
$base .= '~/suggestions/groups';
}
$data['format'] = 'json';
// Check if fields is specified.
if ($fields)
{
$base .= ':' . $fields;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'GET', $parameters, $data);
return json_decode($response->body);
}
/**
* Method to delete a group suggestion for a user.
*
* @param string $suggestionId The unique identifier for a suggestion.
* @param string $personId The unique identifier for a user.
*
* @return array The decoded JSON response
*
* @since 3.2.0
*/
public function deleteSuggestion($suggestionId, $personId = null)
{
$token = $this->oauth->getToken();
// Set parameters.
$parameters = array(
'oauth_token' => $token['key'],
);
// Set the success response code.
$this->oauth->setOption('success_code', 204);
// Set the API base
$base = '/v1/people/';
// Check if person_id is specified.
if ($personId)
{
$base .= $personId . '/suggestions/groups/' . $suggestionId;
}
else
{
$base .= '~/suggestions/groups/' . $suggestionId;
}
// Build the request path.
$path = $this->getOption('api.url') . $base;
// Send the request.
$response = $this->oauth->oauthRequest($path, 'DELETE', $parameters);
return $response;
}
}
home/wuectly/www/administrator/components/com_fields/models/groups.php 0000604 00000014374 15245617335 0022520 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_fields
*
* @copyright (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;
/**
* Groups Model
*
* @since 3.7.0
*/
class FieldsModelGroups extends JModelList
{
/**
* Context string for the model type. This is used to handle uniqueness
* when dealing with the getStoreId() method and caching data structures.
*
* @var string
* @since 3.7.0
*/
protected $context = 'com_fields.groups';
/**
* Constructor.
*
* @param array $config An optional associative array of configuration settings.
*
* @see JModelLegacy
* @since 3.7.0
*/
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'title', 'a.title',
'type', 'a.type',
'state', 'a.state',
'access', 'a.access',
'access_level',
'language', 'a.language',
'ordering', 'a.ordering',
'checked_out', 'a.checked_out',
'checked_out_time', 'a.checked_out_time',
'created', 'a.created',
'created_by', 'a.created_by',
);
}
parent::__construct($config);
}
/**
* Method to auto-populate the model state.
*
* This method should only be called once per instantiation and is designed
* to be called on the first call to the getState() method unless the model
* configuration flag to ignore the request is set.
*
* Note. Calling getState in this method will result in recursion.
*
* @param string $ordering An optional ordering field.
* @param string $direction An optional direction (asc|desc).
*
* @return void
*
* @since 3.7.0
*/
protected function populateState($ordering = null, $direction = null)
{
// List state information.
parent::populateState('a.ordering', 'asc');
$context = $this->getUserStateFromRequest($this->context . '.context', 'context', 'com_content', 'CMD');
$this->setState('filter.context', $context);
}
/**
* Method to get a store id based on the model configuration state.
*
* This is necessary because the model is used by the component and
* different modules that might need different sets of data or different
* ordering requirements.
*
* @param string $id An identifier string to generate the store id.
*
* @return string A store id.
*
* @since 3.7.0
*/
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('filter.search');
$id .= ':' . $this->getState('filter.context');
$id .= ':' . $this->getState('filter.state');
$id .= ':' . print_r($this->getState('filter.language'), true);
return parent::getStoreId($id);
}
/**
* Method to get a JDatabaseQuery object for retrieving the data set from a database.
*
* @return JDatabaseQuery A JDatabaseQuery object to retrieve the data set.
*
* @since 3.7.0
*/
protected function getListQuery()
{
// Create a new query object.
$db = $this->getDbo();
$query = $db->getQuery(true);
$user = JFactory::getUser();
// Select the required fields from the table.
$query->select($this->getState('list.select', 'a.*'));
$query->from('#__fields_groups AS a');
// Join over the language
$query->select('l.title AS language_title, l.image AS language_image')
->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = a.language');
// Join over the users for the checked out user.
$query->select('uc.name AS editor')->join('LEFT', '#__users AS uc ON uc.id=a.checked_out');
// Join over the asset groups.
$query->select('ag.title AS access_level')->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access');
// Join over the users for the author.
$query->select('ua.name AS author_name')->join('LEFT', '#__users AS ua ON ua.id = a.created_by');
// Filter by context
if ($context = $this->getState('filter.context', 'com_fields'))
{
$query->where('a.context = ' . $db->quote($context));
}
// Filter by access level.
if ($access = $this->getState('filter.access'))
{
if (is_array($access))
{
$access = ArrayHelper::toInteger($access);
$query->where('a.access in (' . implode(',', $access) . ')');
}
else
{
$query->where('a.access = ' . (int) $access);
}
}
// Implement View Level Access
if (!$user->authorise('core.admin'))
{
$groups = implode(',', $user->getAuthorisedViewLevels());
$query->where('a.access IN (' . $groups . ')');
}
// Filter by published state
$state = $this->getState('filter.state');
if (is_numeric($state))
{
$query->where('a.state = ' . (int) $state);
}
elseif (!$state)
{
$query->where('a.state IN (0, 1)');
}
// Filter by search in title
$search = $this->getState('filter.search');
if (!empty($search))
{
if (stripos($search, 'id:') === 0)
{
$query->where('a.id = ' . (int) substr($search, 3));
}
else
{
$search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%'));
$query->where('a.title LIKE ' . $search);
}
}
// Filter on the language.
if ($language = $this->getState('filter.language'))
{
$language = (array) $language;
foreach ($language as $key => $l)
{
$language[$key] = $db->quote($l);
}
$query->where('a.language in (' . implode(',', $language) . ')');
}
// Add the list ordering clause
$listOrdering = $this->getState('list.ordering', 'a.ordering');
$listDirn = $db->escape($this->getState('list.direction', 'ASC'));
$query->order($db->escape($listOrdering) . ' ' . $listDirn);
return $query;
}
/**
* Gets an array of objects from the results of database query.
*
* @param string $query The query.
* @param integer $limitstart Offset.
* @param integer $limit The number of records.
*
* @return array An array of results.
*
* @since 3.8.7
* @throws RuntimeException
*/
protected function _getList($query, $limitstart = 0, $limit = 0)
{
$result = parent::_getList($query, $limitstart, $limit);
if (is_array($result))
{
foreach ($result as $group)
{
$group->params = new Registry($group->params);
}
}
return $result;
}
}
home/wuectly/www/administrator/components/com_users/models/groups.php 0000604 00000013436 15245617373 0022413 0 ustar 00 <?php
/**
* @package Joomla.Administrator
* @subpackage com_users
*
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Methods supporting a list of user group records.
*
* @since 1.6
*/
class UsersModelGroups extends JModelList
{
/**
* Constructor.
*
* @param array $config An optional associative array of configuration settings.
*
* @see JController
* @since 1.6
*/
public function __construct($config = array())
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'parent_id', 'a.parent_id',
'title', 'a.title',
'lft', 'a.lft',
'rgt', 'a.rgt',
);
}
parent::__construct($config);
}
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @param string $ordering An optional ordering field.
* @param string $direction An optional direction (asc|desc).
*
* @return void
*
* @since 1.6
*/
protected function populateState($ordering = 'a.lft', $direction = 'asc')
{
// Load the filter state.
$this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string'));
// Load the parameters.
$params = JComponentHelper::getParams('com_users');
$this->setState('params', $params);
// List state information.
parent::populateState($ordering, $direction);
}
/**
* Method to get a store id based on model configuration state.
*
* This is necessary because the model is used by the component and
* different modules that might need different sets of data or different
* ordering requirements.
*
* @param string $id A prefix for the store id.
*
* @return string A store id.
*/
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('filter.search');
return parent::getStoreId($id);
}
/**
* Gets the list of groups and adds expensive joins to the result set.
*
* @return mixed An array of data items on success, false on failure.
*
* @since 1.6
*/
public function getItems()
{
// Get a storage key.
$store = $this->getStoreId();
// Try to load the data from internal storage.
if (empty($this->cache[$store]))
{
$items = parent::getItems();
// Bail out on an error or empty list.
if (empty($items))
{
$this->cache[$store] = $items;
return $items;
}
try
{
$items = $this->populateExtraData($items);
}
catch (RuntimeException $e)
{
$this->setError($e->getMessage());
return false;
}
// Add the items to the internal cache.
$this->cache[$store] = $items;
}
return $this->cache[$store];
}
/**
* Build an SQL query to load the list data.
*
* @return JDatabaseQuery
*/
protected function getListQuery()
{
// Create a new query object.
$db = $this->getDbo();
$query = $db->getQuery(true);
// Select the required fields from the table.
$query->select(
$this->getState(
'list.select',
'a.*'
)
);
$query->from($db->quoteName('#__usergroups') . ' AS a');
// Filter the comments over the search string if set.
$search = $this->getState('filter.search');
if (!empty($search))
{
if (stripos($search, 'id:') === 0)
{
$query->where('a.id = ' . (int) substr($search, 3));
}
else
{
$search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%'));
$query->where('a.title LIKE ' . $search);
}
}
// Add the list ordering clause.
$query->order($db->escape($this->getState('list.ordering', 'a.lft')) . ' ' . $db->escape($this->getState('list.direction', 'ASC')));
return $query;
}
/**
* Populate level & path for items.
*
* @param array $items Array of stdClass objects
*
* @return array
*
* @since 3.6.3
*/
private function populateExtraData(array $items)
{
// First pass: get list of the group id's and reset the counts.
$groupsByKey = array();
foreach ($items as $item)
{
$groupsByKey[(int) $item->id] = $item;
}
$groupIds = array_keys($groupsByKey);
$db = $this->getDbo();
// Get total enabled users in group.
$query = $db->getQuery(true);
// Count the objects in the user group.
$query->select('map.group_id, COUNT(DISTINCT map.user_id) AS user_count')
->from($db->quoteName('#__user_usergroup_map', 'map'))
->join('LEFT', $db->quoteName('#__users', 'u') . ' ON ' . $db->quoteName('u.id') . ' = ' . $db->quoteName('map.user_id'))
->where($db->quoteName('map.group_id') . ' IN (' . implode(',', $groupIds) . ')')
->where($db->quoteName('u.block') . ' = 0')
->group($db->quoteName('map.group_id'));
$db->setQuery($query);
try
{
$countEnabled = $db->loadAssocList('group_id', 'count_enabled');
}
catch (RuntimeException $e)
{
$this->setError($e->getMessage());
return false;
}
// Get total disabled users in group.
$query->clear('where')
->where('map.group_id IN (' . implode(',', $groupIds) . ')')
->where('u.block = 1');
$db->setQuery($query);
try
{
$countDisabled = $db->loadAssocList('group_id', 'count_disabled');
}
catch (RuntimeException $e)
{
$this->setError($e->getMessage());
return false;
}
// Inject the values back into the array.
foreach ($groupsByKey as &$item)
{
$item->count_enabled = isset($countEnabled[$item->id]) ? (int) $countEnabled[$item->id]['user_count'] : 0;
$item->count_disabled = isset($countDisabled[$item->id]) ? (int) $countDisabled[$item->id]['user_count'] : 0;
$item->user_count = $item->count_enabled + $item->count_disabled;
}
$groups = new JHelperUsergroups($groupsByKey);
return array_values($groups->getAll());
}
}