Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla4/ |
| [Home] [System Details] [Kill Me] |
home/lmsyaran/public_html/j3/libraries/joomla/mediawiki/categories.php000064400000022470151156535550022216
0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage MediaWiki
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
/**
* MediaWiki API Categories class for the Joomla Platform.
*
* @since 3.1.4
*/
class JMediawikiCategories extends JMediawikiObject
{
/**
* Method to list all categories the page(s) belong to.
*
* @param array $titles Page titles to retrieve categories.
* @param array $clprop List of additional properties to get.
* @param array $clshow Type of categories to show.
* @param integer $cllimit Number of categories to return.
* @param boolean $clcontinue Continue when more results are
available.
* @param array $clcategories Only list these categories.
* @param string $cldir Direction of listing.
*
* @return object
*
* @since 3.0.0
*/
public function getCategories(array $titles, array $clprop = null, array
$clshow = null, $cllimit = null, $clcontinue = false,
array $clcategories = null, $cldir = null)
{
// Build the request.
$path = '?action=query&prop=categories';
// Append titles to the request.
$path .= '&titles=' . $this->buildParameter($titles);
if (isset($clprop))
{
$path .= '&clprop=' . $this->buildParameter($clprop);
}
if (isset($clshow))
{
$path .= '&$clshow=' . $this->buildParameter($clshow);
}
if (isset($cllimit))
{
$path .= '&cllimit=' . $cllimit;
}
if ($clcontinue)
{
$path .= '&clcontinue=';
}
if (isset($clcategories))
{
$path .= '&clcategories=' .
$this->buildParameter($clcategories);
}
if (isset($cldir))
{
$path .= '&cldir=' . $cldir;
}
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to get information about all categories used.
*
* @param array $titles Page titles to retrieve categories.
*
* @return object
*
* @since 3.1.4
*/
public function getCategoriesUsed(array $titles)
{
// Build the request
$path = '?action=query&generator=categories&prop=info';
// Append titles to the request
$path .= '&titles=' . $this->buildParameter($titles);
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to get information about the given categories.
*
* @param array $titles Page titles to retrieve categories.
* @param boolean $clcontinue Continue when more results are
available.
*
* @return object
*
* @since 3.1.4
*/
public function getCategoriesInfo(array $titles, $clcontinue = false)
{
// Build the request.
$path = '?action=query&prop=categoryinfo';
// Append titles to the request
$path .= '&titles=' . $this->buildParameter($titles);
if ($clcontinue)
{
$path .= '&clcontinue=';
}
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to get information about the pages within a category
*
* @param string $cmtitle The category title, must
contain 'Category:' prefix, cannot be used together with
$cmpageid
* @param string $cmpageid The category's page ID,
cannot be used together with $cmtitle
* @param string $cmlimit Maximum number of pages to
retrieve
* @param array $cmprop Array of properties to retrieve
* @param array $cmnamespace Namespaces to retrieve pages
from
* @param array $cmtype Array of category members to
include, ignored if $cmsort is set to 'timestamp'
* @param string $cmstart Timestamp to start listing
from, only used if $cmsort is set to 'timestamp'
* @param string $cmend Timestamp to end listing at,
only used if $cmsort is set to 'timestamp'
* @param string $cmstartsortkey Hexadecimal key to start
listing from, only used if $cmsort is set to 'sortkey'
* @param string $cmendsortkey Hexadecimal key to end listing
at, only used if $cmsort is set to 'sortkey'
* @param string $cmstartsortkeyprefix Hexadecimal key prefix to start
listing from, only used if $cmsort is set to 'sortkey',
* overrides $cmstartsortkey
* @param string $cmendsortkeyprefix Hexadecimal key prefix to end
listing before, only used if $cmsort is set to 'sortkey',
* overrides $cmendsortkey
* @param string $cmsort Property to sort by
* @param string $cmdir Direction to sort in
* @param string $cmcontinue Used to continue a previous
request
*
* @return object
*
* @since 3.2.2 (CMS)
* @throws RuntimeException
*/
public function getCategoryMembers($cmtitle = null, $cmpageid = null,
$cmlimit = null, array $cmprop = null, array $cmnamespace = null,
array $cmtype = null, $cmstart = null, $cmend = null, $cmstartsortkey =
null, $cmendsortkey = null, $cmstartsortkeyprefix = null,
$cmendsortkeyprefix = null, $cmsort = null, $cmdir = null, $cmcontinue =
null)
{
// Build the request.
$path = '?action=query&list=categorymembers';
// Make sure both $cmtitle and $cmpageid are not set
if (isset($cmtitle) && isset($cmpageid))
{
throw new RuntimeException('Both the $cmtitle and $cmpageid
parameters cannot be set, please only use one of the two.');
}
if (isset($cmtitle))
{
// Verify that the Category: prefix exists
if (strpos($cmtitle, 'Category:') !== 0)
{
throw new RuntimeException('The $cmtitle parameter must include
the Category: prefix.');
}
$path .= '&cmtitle=' . $cmtitle;
}
if (isset($cmpageid))
{
$path .= '&cmpageid=' . $cmpageid;
}
if (isset($cmlimit))
{
$path .= '&cmlimit=' . $cmlimit;
}
if (isset($cmprop))
{
$path .= '&cmprop=' . $this->buildParameter($cmprop);
}
if (isset($cmnamespace))
{
$path .= '&cmnamespace=' .
$this->buildParameter($cmnamespace);
}
if (isset($cmtype))
{
$path .= '&cmtype=' . $this->buildParameter($cmtype);
}
if (isset($cmstart))
{
$path .= '&cmstart=' . $cmstart;
}
if (isset($cmend))
{
$path .= '&cmend=' . $cmend;
}
if (isset($cmstartsortkey))
{
$path .= '&cmstartsortkey=' . $cmstartsortkey;
}
if (isset($cmendsortkey))
{
$path .= '&cmendsortkey=' . $cmendsortkey;
}
if (isset($cmstartsortkeyprefix))
{
$path .= '&cmstartsortkeyprefix=' . $cmstartsortkeyprefix;
}
if (isset($cmendsortkeyprefix))
{
$path .= '&cmendsortkeyprefix=' . $cmendsortkeyprefix;
}
if (isset($cmsort))
{
$path .= '&cmsort=' . $cmsort;
}
if (isset($cmdir))
{
$path .= '&cmdir=' . $cmdir;
}
if (isset($cmcontinue))
{
$path .= '&cmcontinue=' . $cmcontinue;
}
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to enumerate all categories.
*
* @param string $acfrom The category to start enumerating from.
* @param string $acto The category to stop enumerating at.
* @param string $acprefix Search for all category titles that begin
with this value.
* @param string $acdir Direction to sort in.
* @param integer $acmin Minimum number of category members.
* @param integer $acmax Maximum number of category members.
* @param integer $aclimit How many categories to return.
* @param array $acprop Which properties to get.
*
* @return object
*
* @since 3.1.4
*/
public function enumerateCategories($acfrom = null, $acto = null,
$acprefix = null, $acdir = null, $acmin = null,
$acmax = null, $aclimit = null, array $acprop = null)
{
// Build the request.
$path = '?action=query&list=allcategories';
if (isset($acfrom))
{
$path .= '&acfrom=' . $acfrom;
}
if (isset($acto))
{
$path .= '&acto=' . $acto;
}
if (isset($acprefix))
{
$path .= '&acprefix=' . $acprefix;
}
if (isset($acdir))
{
$path .= '&acdir=' . $acdir;
}
if (isset($acfrom))
{
$path .= '&acfrom=' . $acfrom;
}
if (isset($acmin))
{
$path .= '&acmin=' . $acmin;
}
if (isset($acmax))
{
$path .= '&acmax=' . $acmax;
}
if (isset($aclimit))
{
$path .= '&aclimit=' . $aclimit;
}
if (isset($acprop))
{
$path .= '&acprop=' . $this->buildParameter($acprop);
}
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to list change tags.
*
* @param array $tgprop List of properties to get.
* @param string $tglimit The maximum number of tags to limit.
*
* @return object
*
* @since 3.1.4
*/
public function getChangeTags(array $tgprop = null, $tglimit = null)
{
// Build the request.
$path = '?action=query&list=tags';
if (isset($tgprop))
{
$path .= '&tgprop=' . $this->buildParameter($tgprop);
}
if (isset($tglimit))
{
$path .= '&tglimit=' . $tglimit;
}
// @TODO add support for $tgcontinue
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
}
home/lmsyaran/public_html/j3/plugins/search/categories/categories.php000064400000011621151157467240022066
0ustar00<?php
/**
* @package Joomla.Plugin
* @subpackage Search.categories
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
JLoader::register('ContentHelperRoute', JPATH_SITE .
'/components/com_content/helpers/route.php');
/**
* Categories search plugin.
*
* @since 1.6
*/
class PlgSearchCategories extends JPlugin
{
/**
* Load the language file on instantiation.
*
* @var boolean
* @since 3.1
*/
protected $autoloadLanguage = true;
/**
* Determine areas searchable by this plugin.
*
* @return array An array of search areas.
*
* @since 1.6
*/
public function onContentSearchAreas()
{
static $areas = array(
'categories' =>
'PLG_SEARCH_CATEGORIES_CATEGORIES'
);
return $areas;
}
/**
* Search content (categories).
*
* The SQL must return the following fields that are used in a common
display
* routine: href, title, section, created, text, browsernav.
*
* @param string $text Target search string.
* @param string $phrase Matching option (possible values:
exact|any|all). Default is "any".
* @param string $ordering Ordering option (possible values:
newest|oldest|popular|alpha|category). Default is "newest".
* @param mixed $areas An array if the search is to be restricted
to areas or null to search all areas.
*
* @return array Search results.
*
* @since 1.6
*/
public function onContentSearch($text, $phrase = '', $ordering =
'', $areas = null)
{
$db = JFactory::getDbo();
$user = JFactory::getUser();
$app = JFactory::getApplication();
$groups = implode(',', $user->getAuthorisedViewLevels());
$searchText = $text;
if (is_array($areas) && !array_intersect($areas,
array_keys($this->onContentSearchAreas())))
{
return array();
}
$sContent = $this->params->get('search_content', 1);
$sArchived = $this->params->get('search_archived', 1);
$limit = $this->params->def('search_limit', 50);
$state = array();
if ($sContent)
{
$state[] = 1;
}
if ($sArchived)
{
$state[] = 2;
}
if (empty($state))
{
return array();
}
$text = trim($text);
if ($text === '')
{
return array();
}
/* TODO: The $where variable does not seem to be used at all
switch ($phrase)
{
case 'exact':
$text = $db->quote('%' . $db->escape($text, true) .
'%', false);
$wheres2 = array();
$wheres2[] = 'a.title LIKE ' . $text;
$wheres2[] = 'a.description LIKE ' . $text;
$where = '(' . implode(') OR (', $wheres2) .
')';
break;
case 'any':
case 'all';
default:
$words = explode(' ', $text);
$wheres = array();
foreach ($words as $word)
{
$word = $db->quote('%' . $db->escape($word, true) .
'%', false);
$wheres2 = array();
$wheres2[] = 'a.title LIKE ' . $word;
$wheres2[] = 'a.description LIKE ' . $word;
$wheres[] = implode(' OR ', $wheres2);
}
$where = '(' . implode(($phrase == 'all' ? ')
AND (' : ') OR ('), $wheres) . ')';
break;
}
*/
switch ($ordering)
{
case 'alpha':
$order = 'a.title ASC';
break;
case 'category':
case 'popular':
case 'newest':
case 'oldest':
default:
$order = 'a.title DESC';
}
$text = $db->quote('%' . $db->escape($text, true) .
'%', false);
$query = $db->getQuery(true);
// SQLSRV changes.
$case_when = ' CASE WHEN ';
$case_when .= $query->charLength('a.alias', '!=',
'0');
$case_when .= ' THEN ';
$a_id = $query->castAsChar('a.id');
$case_when .= $query->concatenate(array($a_id, 'a.alias'),
':');
$case_when .= ' ELSE ';
$case_when .= $a_id . ' END as slug';
$query->select('a.title, a.description AS text, a.created_time AS
created, \'2\' AS browsernav, a.id AS catid, ' . $case_when)
->from('#__categories AS a')
->where(
'(a.title LIKE ' . $text . ' OR a.description LIKE
' . $text . ') AND a.published IN (' .
implode(',', $state) . ') AND a.extension = '
. $db->quote('com_content') . 'AND a.access IN
(' . $groups . ')'
)
->group('a.id, a.title, a.description, a.alias,
a.created_time')
->order($order);
if ($app->isClient('site') &&
JLanguageMultilang::isEnabled())
{
$query->where('a.language in (' .
$db->quote(JFactory::getLanguage()->getTag()) . ',' .
$db->quote('*') . ')');
}
$db->setQuery($query, 0, $limit);
try
{
$rows = $db->loadObjectList();
}
catch (RuntimeException $e)
{
$rows = array();
JFactory::getApplication()->enqueueMessage(JText::_('JERROR_AN_ERROR_HAS_OCCURRED'),
'error');
}
$return = array();
if ($rows)
{
foreach ($rows as $i => $row)
{
if (searchHelper::checkNoHtml($row, $searchText,
array('name', 'title', 'text')))
{
$row->href = ContentHelperRoute::getCategoryRoute($row->slug);
$row->section = JText::_('JCATEGORY');
$return[] = $row;
}
}
}
return $return;
}
}
home/lmsyaran/public_html/j3/plugins/finder/categories/categories.php000064400000025217151157777460022106
0ustar00<?php
/**
* @package Joomla.Plugin
* @subpackage Finder.Categories
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see
LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\Registry\Registry;
JLoader::register('FinderIndexerAdapter', JPATH_ADMINISTRATOR .
'/components/com_finder/helpers/indexer/adapter.php');
/**
* Smart Search adapter for Joomla Categories.
*
* @since 2.5
*/
class PlgFinderCategories extends FinderIndexerAdapter
{
/**
* The plugin identifier.
*
* @var string
* @since 2.5
*/
protected $context = 'Categories';
/**
* The extension name.
*
* @var string
* @since 2.5
*/
protected $extension = 'com_categories';
/**
* The sublayout to use when rendering the results.
*
* @var string
* @since 2.5
*/
protected $layout = 'category';
/**
* The type of content that the adapter indexes.
*
* @var string
* @since 2.5
*/
protected $type_title = 'Category';
/**
* The table name.
*
* @var string
* @since 2.5
*/
protected $table = '#__categories';
/**
* The field the published state is stored in.
*
* @var string
* @since 2.5
*/
protected $state_field = 'published';
/**
* Load the language file on instantiation.
*
* @var boolean
* @since 3.1
*/
protected $autoloadLanguage = true;
/**
* Method to remove the link information for items that have been deleted.
*
* @param string $context The context of the action being performed.
* @param JTable $table A JTable object containing the record to be
deleted
*
* @return boolean True on success.
*
* @since 2.5
* @throws Exception on database error.
*/
public function onFinderDelete($context, $table)
{
if ($context === 'com_categories.category')
{
$id = $table->id;
}
elseif ($context === 'com_finder.index')
{
$id = $table->link_id;
}
else
{
return true;
}
// Remove item from the index.
return $this->remove($id);
}
/**
* Smart Search after save content method.
* Reindexes the link information for a category that has been saved.
* It also makes adjustments if the access level of the category has
changed.
*
* @param string $context The context of the category passed to the
plugin.
* @param JTable $row A JTable object.
* @param boolean $isNew True if the category has just been created.
*
* @return boolean True on success.
*
* @since 2.5
* @throws Exception on database error.
*/
public function onFinderAfterSave($context, $row, $isNew)
{
// We only want to handle categories here.
if ($context === 'com_categories.category')
{
// Check if the access levels are different.
if (!$isNew && $this->old_access != $row->access)
{
// Process the change.
$this->itemAccessChange($row);
}
// Reindex the category item.
$this->reindex($row->id);
// Check if the parent access level is different.
if (!$isNew && $this->old_cataccess != $row->access)
{
$this->categoryAccessChange($row);
}
}
return true;
}
/**
* Smart Search before content save method.
* This event is fired before the data is actually saved.
*
* @param string $context The context of the category passed to the
plugin.
* @param JTable $row A JTable object.
* @param boolean $isNew True if the category is just about to be
created.
*
* @return boolean True on success.
*
* @since 2.5
* @throws Exception on database error.
*/
public function onFinderBeforeSave($context, $row, $isNew)
{
// We only want to handle categories here.
if ($context === 'com_categories.category')
{
// Query the database for the old access level and the parent if the
item isn't new.
if (!$isNew)
{
$this->checkItemAccess($row);
$this->checkCategoryAccess($row);
}
}
return true;
}
/**
* Method to update the link information for items that have been changed
* from outside the edit screen. This is fired when the item is published,
* unpublished, archived, or unarchived from the list view.
*
* @param string $context The context for the category passed to the
plugin.
* @param array $pks An array of primary key ids of the category
that has changed state.
* @param integer $value The value of the state that the category
has been changed to.
*
* @return void
*
* @since 2.5
*/
public function onFinderChangeState($context, $pks, $value)
{
// We only want to handle categories here.
if ($context === 'com_categories.category')
{
/*
* The category published state is tied to the parent category
* published state so we need to look up all published states
* before we change anything.
*/
foreach ($pks as $pk)
{
$query = clone $this->getStateQuery();
$query->where('a.id = ' . (int) $pk);
$this->db->setQuery($query);
$item = $this->db->loadObject();
// Translate the state.
$state = null;
if ($item->parent_id != 1)
{
$state = $item->cat_state;
}
$temp = $this->translateState($value, $state);
// Update the item.
$this->change($pk, 'state', $temp);
// Reindex the item.
$this->reindex($pk);
}
}
// Handle when the plugin is disabled.
if ($context === 'com_plugins.plugin' && $value === 0)
{
$this->pluginDisable($pks);
}
}
/**
* Method to index an item. The item must be a FinderIndexerResult object.
*
* @param FinderIndexerResult $item The item to index as a
FinderIndexerResult object.
* @param string $format The item format. Not used.
*
* @return void
*
* @since 2.5
* @throws Exception on database error.
*/
protected function index(FinderIndexerResult $item, $format =
'html')
{
// Check if the extension is enabled.
if (JComponentHelper::isEnabled($this->extension) === false)
{
return;
}
// Check if the extension that owns the category is also enabled.
if (JComponentHelper::isEnabled($item->extension) === false)
{
return;
}
$item->setLanguage();
$extension = ucfirst(substr($item->extension, 4));
// Initialize the item parameters.
$item->params = new Registry($item->params);
$item->metadata = new Registry($item->metadata);
/*
* Add the metadata processing instructions based on the category's
* configuration parameters.
*/
// Add the meta author.
$item->metaauthor = $item->metadata->get('author');
// Handle the link to the metadata.
$item->addInstruction(FinderIndexer::META_CONTEXT, 'link');
$item->addInstruction(FinderIndexer::META_CONTEXT,
'metakey');
$item->addInstruction(FinderIndexer::META_CONTEXT,
'metadesc');
$item->addInstruction(FinderIndexer::META_CONTEXT,
'metaauthor');
$item->addInstruction(FinderIndexer::META_CONTEXT,
'author');
// Deactivated Methods
// $item->addInstruction(FinderIndexer::META_CONTEXT,
'created_by_alias');
// Trigger the onContentPrepare event.
$item->summary =
FinderIndexerHelper::prepareContent($item->summary, $item->params);
// Build the necessary route and path information.
$item->url = $this->getUrl($item->id, $item->extension,
$this->layout);
$class = $extension . 'HelperRoute';
// Need to import component route helpers dynamically, hence the reason
it's handled here.
JLoader::register($class, JPATH_SITE . '/components/' .
$item->extension . '/helpers/route.php');
if (class_exists($class) && method_exists($class,
'getCategoryRoute'))
{
$item->route = $class::getCategoryRoute($item->id,
$item->language);
}
else
{
$item->route = ContentHelperRoute::getCategoryRoute($item->id,
$item->language);
}
$item->path = FinderIndexerHelper::getContentPath($item->route);
// Get the menu title if it exists.
$title = $this->getItemMenuTitle($item->url);
// Adjust the title if necessary.
if (!empty($title) &&
$this->params->get('use_menu_title', true))
{
$item->title = $title;
}
// Translate the state. Categories should only be published if the parent
category is published.
$item->state = $this->translateState($item->state);
// Add the type taxonomy data.
$item->addTaxonomy('Type', 'Category');
// Add the language taxonomy data.
$item->addTaxonomy('Language', $item->language);
// Get content extras.
FinderIndexerHelper::getContentExtras($item);
// Index the item.
$this->indexer->index($item);
}
/**
* Method to setup the indexer to be run.
*
* @return boolean True on success.
*
* @since 2.5
*/
protected function setup()
{
// Load com_content route helper as it is the fallback for routing in the
indexer in this instance.
JLoader::register('ContentHelperRoute', JPATH_SITE .
'/components/com_content/helpers/route.php');
return true;
}
/**
* Method to get the SQL query used to retrieve the list of content items.
*
* @param mixed $query A JDatabaseQuery object or null.
*
* @return JDatabaseQuery A database object.
*
* @since 2.5
*/
protected function getListQuery($query = null)
{
$db = JFactory::getDbo();
// Check if we can use the supplied SQL query.
$query = $query instanceof JDatabaseQuery ? $query :
$db->getQuery(true)
->select('a.id, a.title, a.alias, a.description AS summary,
a.extension')
->select('a.created_user_id AS created_by, a.modified_time AS
modified, a.modified_user_id AS modified_by')
->select('a.metakey, a.metadesc, a.metadata, a.language, a.lft,
a.parent_id, a.level')
->select('a.created_time AS start_date, a.published AS state,
a.access, a.params');
// Handle the alias CASE WHEN portion of the query.
$case_when_item_alias = ' CASE WHEN ';
$case_when_item_alias .= $query->charLength('a.alias',
'!=', '0');
$case_when_item_alias .= ' THEN ';
$a_id = $query->castAsChar('a.id');
$case_when_item_alias .= $query->concatenate(array($a_id,
'a.alias'), ':');
$case_when_item_alias .= ' ELSE ';
$case_when_item_alias .= $a_id . ' END as slug';
$query->select($case_when_item_alias)
->from('#__categories AS a')
->where($db->quoteName('a.id') . ' > 1');
return $query;
}
/**
* Method to get a SQL query to load the published and access states for
* a category and its parents.
*
* @return JDatabaseQuery A database object.
*
* @since 2.5
*/
protected function getStateQuery()
{
$query = $this->db->getQuery(true)
->select($this->db->quoteName('a.id'))
->select($this->db->quoteName('a.parent_id'))
->select('a.' . $this->state_field . ' AS state,
c.published AS cat_state')
->select('a.access, c.access AS cat_access')
->from($this->db->quoteName('#__categories') . '
AS a')
->join('LEFT', '#__categories AS c ON c.id =
a.parent_id');
return $query;
}
}
home/lmsyaran/public_html/libraries/joomla/mediawiki/categories.php000064400000022470151160173070021670
0ustar00<?php
/**
* @package Joomla.Platform
* @subpackage MediaWiki
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All
rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
/**
* MediaWiki API Categories class for the Joomla Platform.
*
* @since 3.1.4
*/
class JMediawikiCategories extends JMediawikiObject
{
/**
* Method to list all categories the page(s) belong to.
*
* @param array $titles Page titles to retrieve categories.
* @param array $clprop List of additional properties to get.
* @param array $clshow Type of categories to show.
* @param integer $cllimit Number of categories to return.
* @param boolean $clcontinue Continue when more results are
available.
* @param array $clcategories Only list these categories.
* @param string $cldir Direction of listing.
*
* @return object
*
* @since 3.0.0
*/
public function getCategories(array $titles, array $clprop = null, array
$clshow = null, $cllimit = null, $clcontinue = false,
array $clcategories = null, $cldir = null)
{
// Build the request.
$path = '?action=query&prop=categories';
// Append titles to the request.
$path .= '&titles=' . $this->buildParameter($titles);
if (isset($clprop))
{
$path .= '&clprop=' . $this->buildParameter($clprop);
}
if (isset($clshow))
{
$path .= '&$clshow=' . $this->buildParameter($clshow);
}
if (isset($cllimit))
{
$path .= '&cllimit=' . $cllimit;
}
if ($clcontinue)
{
$path .= '&clcontinue=';
}
if (isset($clcategories))
{
$path .= '&clcategories=' .
$this->buildParameter($clcategories);
}
if (isset($cldir))
{
$path .= '&cldir=' . $cldir;
}
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to get information about all categories used.
*
* @param array $titles Page titles to retrieve categories.
*
* @return object
*
* @since 3.1.4
*/
public function getCategoriesUsed(array $titles)
{
// Build the request
$path = '?action=query&generator=categories&prop=info';
// Append titles to the request
$path .= '&titles=' . $this->buildParameter($titles);
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to get information about the given categories.
*
* @param array $titles Page titles to retrieve categories.
* @param boolean $clcontinue Continue when more results are
available.
*
* @return object
*
* @since 3.1.4
*/
public function getCategoriesInfo(array $titles, $clcontinue = false)
{
// Build the request.
$path = '?action=query&prop=categoryinfo';
// Append titles to the request
$path .= '&titles=' . $this->buildParameter($titles);
if ($clcontinue)
{
$path .= '&clcontinue=';
}
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to get information about the pages within a category
*
* @param string $cmtitle The category title, must
contain 'Category:' prefix, cannot be used together with
$cmpageid
* @param string $cmpageid The category's page ID,
cannot be used together with $cmtitle
* @param string $cmlimit Maximum number of pages to
retrieve
* @param array $cmprop Array of properties to retrieve
* @param array $cmnamespace Namespaces to retrieve pages
from
* @param array $cmtype Array of category members to
include, ignored if $cmsort is set to 'timestamp'
* @param string $cmstart Timestamp to start listing
from, only used if $cmsort is set to 'timestamp'
* @param string $cmend Timestamp to end listing at,
only used if $cmsort is set to 'timestamp'
* @param string $cmstartsortkey Hexadecimal key to start
listing from, only used if $cmsort is set to 'sortkey'
* @param string $cmendsortkey Hexadecimal key to end listing
at, only used if $cmsort is set to 'sortkey'
* @param string $cmstartsortkeyprefix Hexadecimal key prefix to start
listing from, only used if $cmsort is set to 'sortkey',
* overrides $cmstartsortkey
* @param string $cmendsortkeyprefix Hexadecimal key prefix to end
listing before, only used if $cmsort is set to 'sortkey',
* overrides $cmendsortkey
* @param string $cmsort Property to sort by
* @param string $cmdir Direction to sort in
* @param string $cmcontinue Used to continue a previous
request
*
* @return object
*
* @since 3.2.2 (CMS)
* @throws RuntimeException
*/
public function getCategoryMembers($cmtitle = null, $cmpageid = null,
$cmlimit = null, array $cmprop = null, array $cmnamespace = null,
array $cmtype = null, $cmstart = null, $cmend = null, $cmstartsortkey =
null, $cmendsortkey = null, $cmstartsortkeyprefix = null,
$cmendsortkeyprefix = null, $cmsort = null, $cmdir = null, $cmcontinue =
null)
{
// Build the request.
$path = '?action=query&list=categorymembers';
// Make sure both $cmtitle and $cmpageid are not set
if (isset($cmtitle) && isset($cmpageid))
{
throw new RuntimeException('Both the $cmtitle and $cmpageid
parameters cannot be set, please only use one of the two.');
}
if (isset($cmtitle))
{
// Verify that the Category: prefix exists
if (strpos($cmtitle, 'Category:') !== 0)
{
throw new RuntimeException('The $cmtitle parameter must include
the Category: prefix.');
}
$path .= '&cmtitle=' . $cmtitle;
}
if (isset($cmpageid))
{
$path .= '&cmpageid=' . $cmpageid;
}
if (isset($cmlimit))
{
$path .= '&cmlimit=' . $cmlimit;
}
if (isset($cmprop))
{
$path .= '&cmprop=' . $this->buildParameter($cmprop);
}
if (isset($cmnamespace))
{
$path .= '&cmnamespace=' .
$this->buildParameter($cmnamespace);
}
if (isset($cmtype))
{
$path .= '&cmtype=' . $this->buildParameter($cmtype);
}
if (isset($cmstart))
{
$path .= '&cmstart=' . $cmstart;
}
if (isset($cmend))
{
$path .= '&cmend=' . $cmend;
}
if (isset($cmstartsortkey))
{
$path .= '&cmstartsortkey=' . $cmstartsortkey;
}
if (isset($cmendsortkey))
{
$path .= '&cmendsortkey=' . $cmendsortkey;
}
if (isset($cmstartsortkeyprefix))
{
$path .= '&cmstartsortkeyprefix=' . $cmstartsortkeyprefix;
}
if (isset($cmendsortkeyprefix))
{
$path .= '&cmendsortkeyprefix=' . $cmendsortkeyprefix;
}
if (isset($cmsort))
{
$path .= '&cmsort=' . $cmsort;
}
if (isset($cmdir))
{
$path .= '&cmdir=' . $cmdir;
}
if (isset($cmcontinue))
{
$path .= '&cmcontinue=' . $cmcontinue;
}
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to enumerate all categories.
*
* @param string $acfrom The category to start enumerating from.
* @param string $acto The category to stop enumerating at.
* @param string $acprefix Search for all category titles that begin
with this value.
* @param string $acdir Direction to sort in.
* @param integer $acmin Minimum number of category members.
* @param integer $acmax Maximum number of category members.
* @param integer $aclimit How many categories to return.
* @param array $acprop Which properties to get.
*
* @return object
*
* @since 3.1.4
*/
public function enumerateCategories($acfrom = null, $acto = null,
$acprefix = null, $acdir = null, $acmin = null,
$acmax = null, $aclimit = null, array $acprop = null)
{
// Build the request.
$path = '?action=query&list=allcategories';
if (isset($acfrom))
{
$path .= '&acfrom=' . $acfrom;
}
if (isset($acto))
{
$path .= '&acto=' . $acto;
}
if (isset($acprefix))
{
$path .= '&acprefix=' . $acprefix;
}
if (isset($acdir))
{
$path .= '&acdir=' . $acdir;
}
if (isset($acfrom))
{
$path .= '&acfrom=' . $acfrom;
}
if (isset($acmin))
{
$path .= '&acmin=' . $acmin;
}
if (isset($acmax))
{
$path .= '&acmax=' . $acmax;
}
if (isset($aclimit))
{
$path .= '&aclimit=' . $aclimit;
}
if (isset($acprop))
{
$path .= '&acprop=' . $this->buildParameter($acprop);
}
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
/**
* Method to list change tags.
*
* @param array $tgprop List of properties to get.
* @param string $tglimit The maximum number of tags to limit.
*
* @return object
*
* @since 3.1.4
*/
public function getChangeTags(array $tgprop = null, $tglimit = null)
{
// Build the request.
$path = '?action=query&list=tags';
if (isset($tgprop))
{
$path .= '&tgprop=' . $this->buildParameter($tgprop);
}
if (isset($tglimit))
{
$path .= '&tglimit=' . $tglimit;
}
// @TODO add support for $tgcontinue
// Send the request.
$response = $this->client->get($this->fetchUrl($path));
return $this->validateResponse($response);
}
}