class/Plugins/Mymenus/PluginItem.php
<?php namespace XoopsModules\Mymenus\Plugins\MyMenus;
/*
You may not change or alter any portion of this comment or credits
of supporting developers from this source code or any supporting source code
which is considered copyrighted (c) material of the original comment or credit authors.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
/**
* @copyright XOOPS Project (https://xoops.org)
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU Public License
* @package Mymenus
* @since 1.0
* @author trabis <lusopoemas@gmail.com>
*/
use Xmf\Request;
use XoopsModules\Mymenus;
defined('XOOPS_ROOT_PATH') || die('Restricted access');
/**
* Class PluginItem
*/
class PluginItem extends Mymenus\PluginItem
{
public static function eventBoot()
{
$registry = Mymenus\Registry::getInstance();
/** @var \XoopsMemberHandler $memberHandler */
$memberHandler = xoops_getHandler('member');
$user = ($GLOBALS['xoopsUser'] instanceof \XoopsUser) ? $GLOBALS['xoopsUser'] : null;
if (!$user) {
$user = $memberHandler->createUser();
$user->setVar('uid', 0);
$user->setVar('uname', $GLOBALS['xoopsConfig']['anonymous']);
}
$ownerid = Request::getInt('uid', null, 'GET');
$owner = $memberHandler->getUser($ownerid);
//if uid > 0 but user does not exists
if (!($owner instanceof \XoopsUser)) {
//create new user
$owner = $memberHandler->createUser();
}
if ($owner->isNew()) {
$owner->setVar('uid', 0);
$owner->setVar('uname', $GLOBALS['xoopsConfig']['anonymous']);
}
$registry->setEntry('user', $user->getValues());
$registry->setEntry('owner', $owner->getValues());
$registry->setEntry('user_groups', ($GLOBALS['xoopsUser'] instanceof \XoopsUser) ? $GLOBALS['xoopsUser']->getGroups() : [XOOPS_GROUP_ANONYMOUS]);
$registry->setEntry('user_uid', ($GLOBALS['xoopsUser'] instanceof \XoopsUser) ? $GLOBALS['xoopsUser']->getVar('uid') : 0);
$registry->setEntry('get_uid', Request::getInt('uid', 0, 'GET'));
}
public static function eventLinkDecoration()
{
$registry = Mymenus\Registry::getInstance();
$linkArray = $registry->getEntry('link_array');
$linkArray['link'] = self::doDecoration($linkArray['link']);
//if (!eregi('mailto:', $linkArray['link']) && !eregi('://', $linkArray['link'])) {
if (!preg_match('/mailto:/i', $linkArray['link']) && !preg_match('#://#i', $linkArray['link'])) {
$linkArray['link'] = XOOPS_URL . '/' . $linkArray['link']; //Do not do this in other decorators
}
$registry->setEntry('link_array', $linkArray);
}
public static function eventImageDecoration()
{
$registry = Mymenus\Registry::getInstance();
$linkArray = $registry->getEntry('link_array');
if ($linkArray['image'] && !filter_var($linkArray['image'], FILTER_VALIDATE_URL)) {
$linkArray['image'] = XOOPS_URL . '/' . $linkArray['image'];
//Do not do this in other decorators
$linkArray['image'] = self::doDecoration($linkArray['image']);
$registry->setEntry('link_array', $linkArray);
}
}
public static function eventTitleDecoration()
{
$registry = Mymenus\Registry::getInstance();
$linkArray = $registry->getEntry('link_array');
$linkArray['title'] = self::doDecoration($linkArray['title']);
$registry->setEntry('link_array', $linkArray);
}
public static function eventAltTitleDecoration()
{
$registry = Mymenus\Registry::getInstance();
$linkArray = $registry->getEntry('link_array');
if (!$linkArray['alt_title']) {
$linkArray['alt_title'] = $linkArray['title'];
}
$linkArray['alt_title'] = self::doDecoration($linkArray['alt_title']);
$registry->setEntry('link_array', $linkArray);
}
/**
* @param $string
*
* @return mixed
*/
protected static function doDecoration($string)
{
$registry = Mymenus\Registry::getInstance();
//if (!eregi("{(.*\|.*)}", $string, $reg)) {
if (!preg_match('/{(.*\|.*)}/i', $string, $reg)) {
return $string;
}
$expression = $reg[0];
list($validator, $value) = array_map('strtolower', explode('|', $reg[1]));
//just to prevent any bad admin to get easy passwords
if ('pass' === $value) {
return $string;
}
if ('user' === $validator) {
$user = $registry->getEntry('user');
$value = isset($user[$value]) ? $user[$value] : static::getExtraValue('user', $value);
$string = str_replace($expression, $value, $string);
}
if ('uri' === $validator) {
$value = Request::getString($value, 0, 'GET');
$string = str_replace($expression, $value, $string);
}
if ('owner' === $validator) {
$owner = $registry->getEntry('owner');
$value = isset($owner[$value]) ? $owner[$value] : static::getExtraValue('owner', $value);
$string = str_replace($expression, $value, $string);
}
return $string;
}
public static function eventFormLinkDescription()
{
$registry = Mymenus\Registry::getInstance();
$description = $registry->getEntry('form_link_description');
}
public static function eventHasAccess()
{
$registry = Mymenus\Registry::getInstance();
$menu = $registry->getEntry('menu');
$groups = $registry->getEntry('user_groups');
if (0 == $menu['visible'] || !array_intersect($menu['groups'], $groups)) {
$registry->setEntry('has_access', 'no');
return;
}
$hooks = array_intersect($menu['hooks'], get_class_methods(__CLASS__));
foreach ($hooks as $method) {
if (!self::$method()) {
$registry->setEntry('has_access', 'no');
return;
}
}
}
public static function eventAccessFilter()
{
static::loadLanguage('mymenus');
$registry = Mymenus\Registry::getInstance();
$accessFilter = $registry->getEntry('accessFilter');
$accessFilter['is_owner']['name'] = _PL_MYMENUS_MYMENUS_ISOWNER;
$accessFilter['is_owner']['method'] = 'isOwner';
$accessFilter['is_not_owner']['name'] = _PL_MYMENUS_MYMENUS_ISNOTOWNER;
$accessFilter['is_not_owner']['method'] = 'isNotOwner';
$registry->setEntry('accessFilter', $accessFilter);
}
/**
* @return bool
*/
public function isOwner()
{
$registry = Mymenus\Registry::getInstance();
return (0 != $registry->getEntry('user_uid')
&& $registry->getEntry('user_uid') == $registry->getEntry('get_uid'));
}
/**
* @return bool
*/
public function isNotOwner()
{
return !$this->isOwner();
}
/**
* @param string $type
* @param $value
*
* @return int
*/
public static function getExtraValue($type = 'user', $value)
{
$registry = Mymenus\Registry::getInstance();
$ret = 0;
$values = ['pm_new', 'pm_readed', 'pm_total'];
if (!in_array($value, $values)) {
return $ret;
}
$entry = $registry->getEntry($type);
if (!$entry) {
return $ret;
}
$pmHandler = xoops_getHandler('privmessage');
if ('pm_new' === $value) {
$criteria = new \CriteriaCompo(new \Criteria('read_msg', 0));
$criteria->add(new \Criteria('to_userid', $entry['uid']));
}
if ('pm_readed' === $value) {
$criteria = new \CriteriaCompo(new \Criteria('read_msg', 1));
$criteria->add(new \Criteria('to_userid', $entry['uid']));
}
if ('pm_total' === $value) {
$criteria = new \Criteria('to_userid', $entry['uid']);
}
$entry[$value] = $pmHandler->getCount($criteria);
$registry->setEntry($type, $entry);
unset($criteria);
return $entry[$value];
}
}