PHP Classes

File: htdocs/modules/profile/search.php

Recommend this page to a friend!
  Classes of Michael Beck   Xoops 2.5   htdocs/modules/profile/search.php   Download  
File: htdocs/modules/profile/search.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Xoops 2.5
Modular content management publication system
Author: By
Last change: non-canonical order

In docblock var tags, use "type variableName" more consistently
Date: 5 years ago
Size: 21,977 bytes
 

Contents

Class file image Download
<?php /** * Extended User Profile * * 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 (c) 2000-2016 XOOPS Project (www.xoops.org) * @license GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html) * @package profile * @since 2.3.0 * @author Jan Pedersen * @author Taiwen Jiang <[email protected]> */ include __DIR__ . '/header.php'; $myts = MyTextSanitizer::getInstance(); $limit_default = 20; $op = isset($_REQUEST['op']) ? $_REQUEST['op'] : 'search'; $groups = $GLOBALS['xoopsUser'] ? $GLOBALS['xoopsUser']->getGroups() : array(XOOPS_GROUP_ANONYMOUS); $searchable_types = array( 'textbox', 'select', 'radio', 'yesno', 'date', 'datetime', 'timezone', 'language'); switch ($op) { default: case 'search': $xoopsOption['cache_group'] = implode('', $groups); $GLOBALS['xoopsOption']['template_main'] = 'profile_search.tpl'; include $GLOBALS['xoops']->path('header.php'); $xoBreadcrumbs[] = array('title' => _SEARCH); $sortby_arr = array(); // Dynamic fields $profile_handler = xoops_getModuleHandler('profile'); // Get fields $fields = $profile_handler->loadFields(); // Get ids of fields that can be searched /* @var XoopsGroupPermHandler $gperm_handler */ $gperm_handler = xoops_getHandler('groupperm'); $searchable_fields = $gperm_handler->getItemIds('profile_search', $groups, $GLOBALS['xoopsModule']->getVar('mid')); include_once $GLOBALS['xoops']->path('class/xoopsformloader.php'); $searchform = new XoopsThemeForm('', 'searchform', 'search.php', 'post'); $name_tray = new XoopsFormElementTray(_US_NICKNAME); $name_tray->addElement(new XoopsFormSelectMatchOption('', 'uname_match')); $name_tray->addElement(new XoopsFormText('', 'uname', 35, 255)); $searchform->addElement($name_tray); $email_tray = new XoopsFormElementTray(_US_EMAIL); $email_tray->addElement(new XoopsFormSelectMatchOption('', 'email_match')); $email_tray->addElement(new XoopsFormText('', 'email', 35, 255)); $searchform->addElement($email_tray); // add search groups , only for Webmasters if ($GLOBALS['xoopsUser'] && $GLOBALS['xoopsUser']->isAdmin()) { $group_tray = new XoopsFormElementTray(_US_GROUPS); $group_tray->addElement(new XoopsFormSelectGroup('', 'selgroups', null, false, 5, true)); $searchform->addElement($group_tray); } foreach (array_keys($fields) as $i) { if (!in_array($fields[$i]->getVar('field_id'), $searchable_fields) || !in_array($fields[$i]->getVar('field_type'), $searchable_types)) { continue; } $sortby_arr[$i] = $fields[$i]->getVar('field_title'); switch ($fields[$i]->getVar('field_type')) { case 'textbox': if ($fields[$i]->getVar('field_valuetype') == XOBJ_DTYPE_INT) { $searchform->addElement(new XoopsFormText(sprintf(_PROFILE_MA_LARGERTHAN, $fields[$i]->getVar('field_title')), $fields[$i]->getVar('field_name') . '_larger', 35, 35)); $searchform->addElement(new XoopsFormText(sprintf(_PROFILE_MA_SMALLERTHAN, $fields[$i]->getVar('field_title')), $fields[$i]->getVar('field_name') . '_smaller', 35, 35)); } else { $tray = new XoopsFormElementTray($fields[$i]->getVar('field_title')); $tray->addElement(new XoopsFormSelectMatchOption('', $fields[$i]->getVar('field_name') . '_match')); $tray->addElement(new XoopsFormText('', $fields[$i]->getVar('field_name'), 35, $fields[$i]->getVar('field_maxlength'))); $searchform->addElement($tray); unset($tray); } break; case 'radio': case 'select': $options = $fields[$i]->getVar('field_options'); $size = min(count($options), 10); $element = new XoopsFormSelect($fields[$i]->getVar('field_title'), $fields[$i]->getVar('field_name'), null, $size, true); asort($options); $element->addOptionArray($options); $searchform->addElement($element); unset($element); break; case 'yesno': $element = new XoopsFormSelect($fields[$i]->getVar('field_title'), $fields[$i]->getVar('field_name'), null, 2, true); $element->addOption(1, _YES); $element->addOption(0, _NO); $searchform->addElement($element); unset($element); break; case 'date': case 'datetime': $searchform->addElement(new XoopsFormTextDateSelect(sprintf(_PROFILE_MA_LATERTHAN, $fields[$i]->getVar('field_title')), $fields[$i]->getVar('field_name') . '_larger', 15, 1)); $searchform->addElement(new XoopsFormTextDateSelect(sprintf(_PROFILE_MA_EARLIERTHAN, $fields[$i]->getVar('field_title')), $fields[$i]->getVar('field_name') . '_smaller', 15, time())); break; case 'timezone': $element = new XoopsFormSelect($fields[$i]->getVar('field_title'), $fields[$i]->getVar('field_name'), null, 6, true); include_once $GLOBALS['xoops']->path('class/xoopslists.php'); $element->addOptionArray(XoopsLists::getTimeZoneList()); $searchform->addElement($element); unset($element); break; case 'language': $element = new XoopsFormSelectLang($fields[$i]->getVar('field_title'), $fields[$i]->getVar('field_name'), null, 6); $searchform->addElement($element); unset($element); break; } } asort($sortby_arr); $sortby_arr = array_merge(array('' => _NONE, 'uname' => _US_NICKNAME, 'email' => _US_EMAIL), $sortby_arr); $sortby_select = new XoopsFormSelect(_PROFILE_MA_SORTBY, 'sortby'); $sortby_select->addOptionArray($sortby_arr); $searchform->addElement($sortby_select); $order_select = new XoopsFormRadio(_PROFILE_MA_ORDER, 'order', 0); $order_select->addOption(0, _ASCENDING); $order_select->addOption(1, _DESCENDING); $searchform->addElement($order_select); $limit_text = new XoopsFormText(_PROFILE_MA_PERPAGE, 'limit', 15, 10, $limit_default); $searchform->addElement($limit_text); $searchform->addElement(new XoopsFormHidden('op', 'results')); $searchform->addElement(new XoopsFormButton('', 'submit', _SUBMIT, 'submit')); $searchform->assign($GLOBALS['xoopsTpl']); $GLOBALS['xoopsTpl']->assign('page_title', _PROFILE_MA_SEARCH); //added count user /* @var XoopsMemberHandler $member_handler */ $member_handler = xoops_getHandler('member'); $acttotal = $member_handler->getUserCount(new Criteria('level', 0, '>')); $total = sprintf(_PROFILE_MA_ACTUS, "<span style='color:#ff0000;'>{$acttotal}</span>"); $GLOBALS['xoopsTpl']->assign('total_users', $total); break; case 'results': $GLOBALS['xoopsOption']['template_main'] = 'profile_results.tpl'; include_once $GLOBALS['xoops']->path('header.php'); $GLOBALS['xoopsTpl']->assign('page_title', _PROFILE_MA_RESULTS); $xoBreadcrumbs[] = array( 'link' => XOOPS_URL . '/modules/' . $GLOBALS['xoopsModule']->getVar('dirname', 'n') . '/search.php', 'title' => _SEARCH); $xoBreadcrumbs[] = array('title' => _PROFILE_MA_RESULTS); /* @var XoopsMemberHandler $member_handler */ $member_handler = xoops_getHandler('member'); // Dynamic fields $profile_handler = xoops_getModuleHandler('profile'); // Get fields $fields = $profile_handler->loadFields(); // Get ids of fields that can be searched /* @var XoopsGroupPermHandler $gperm_handler */ $gperm_handler = xoops_getHandler('groupperm'); $searchable_fields = $gperm_handler->getItemIds('profile_search', $groups, $GLOBALS['xoopsModule']->getVar('mid')); $searchvars = array(); $search_url = array(); $criteria = new CriteriaCompo(new Criteria('level', 0, '>')); if (isset($_REQUEST['uname']) && $_REQUEST['uname'] !== '') { $string = $myts->addSlashes(trim($_REQUEST['uname'])); switch ($_REQUEST['uname_match']) { case XOOPS_MATCH_START: $string .= '%'; break; case XOOPS_MATCH_END: $string = '%' . $string; break; case XOOPS_MATCH_CONTAIN: $string = '%' . $string . '%'; break; } $criteria->add(new Criteria('uname', $string, 'LIKE')); $search_url[] = 'uname=' . $_REQUEST['uname']; $search_url[] = 'uname_match=' . $_REQUEST['uname_match']; $searchvars[] = 'uname'; } if (isset($_REQUEST['email']) && $_REQUEST['email'] !== '') { $string = $myts->addSlashes(trim($_REQUEST['email'])); switch ($_REQUEST['email_match']) { case XOOPS_MATCH_START: $string .= '%'; break; case XOOPS_MATCH_END: $string = '%' . $string; break; case XOOPS_MATCH_CONTAIN: $string = '%' . $string . '%'; break; } $searchvars[] = 'email'; $search_url[] = 'email=' . $_REQUEST['email']; $search_url[] = 'email_match=' . $_REQUEST['email_match']; $criteria->add(new Criteria('email', $string, 'LIKE')); $criteria->add(new Criteria('user_viewemail', 1)); } //$search_url = array(); foreach (array_keys($fields) as $i) { //Radio and Select fields if (!in_array($fields[$i]->getVar('field_id'), $searchable_fields) || !in_array($fields[$i]->getVar('field_type'), $searchable_types)) { continue; } $fieldname = $fields[$i]->getVar('field_name'); if (in_array($fields[$i]->getVar('field_type'), array('select', 'radio'))) { if (empty($_REQUEST[$fieldname])) { continue; } //If field value is sent through request and is not an empty value switch ($fields[$i]->getVar('field_valuetype')) { case XOBJ_DTYPE_OTHER: case XOBJ_DTYPE_INT: $value = array_map('intval', $_REQUEST[$fieldname]); $searchvars[] = $fieldname; $criteria->add(new Criteria($fieldname, '(' . implode(',', $value) . ')', 'IN')); break; case XOBJ_DTYPE_URL: case XOBJ_DTYPE_TXTBOX: case XOBJ_DTYPE_TXTAREA: $value = array_map(array($GLOBALS['xoopsDB'], 'quoteString'), $_REQUEST[$fieldname]); $searchvars[] = $fieldname; $criteria->add(new Criteria($fieldname, '(' . implode(',', $value) . ')', 'IN')); break; } foreach ($_REQUEST[$fieldname] as $value) { $search_url[] = $fieldname . '[]=' . $value; } } else { //Other fields (not radio, not select) switch ($fields[$i]->getVar('field_valuetype')) { case XOBJ_DTYPE_OTHER: case XOBJ_DTYPE_INT: switch ($fields[$i]->getVar('field_type')) { case 'date': case 'datetime': $value = $_REQUEST[$fieldname . '_larger']; if (!($value = strtotime($_REQUEST[$fieldname . '_larger']))) { $value = (int)$_REQUEST[$fieldname . '_larger']; } if ($value > 0) { $search_url[] = $fieldname . '_larger=' . $value; $searchvars[] = $fieldname; $criteria->add(new Criteria($fieldname, $value, '>=')); } $value = $_REQUEST[$fieldname . '_smaller']; if (!($value = strtotime($_REQUEST[$fieldname . '_smaller']))) { $value = (int)$_REQUEST[$fieldname . '_smaller']; } if ($value > 0) { $search_url[] = $fieldname . '_smaller=' . $value; $searchvars[] = $fieldname; $criteria->add(new Criteria($fieldname, $value + 24 * 3600, '<=')); } break; default: if (isset($_REQUEST[$fieldname . '_larger']) && (int)$_REQUEST[$fieldname . '_larger'] !== 0) { $value = (int)$_REQUEST[$fieldname . '_larger']; $search_url[] = $fieldname . '_larger=' . $value; $searchvars[] = $fieldname; $criteria->add(new Criteria($fieldname, $value, '>=')); } if (isset($_REQUEST[$fieldname . '_smaller']) && (int)$_REQUEST[$fieldname . '_smaller'] !== 0) { $value = (int)$_REQUEST[$fieldname . '_smaller']; $search_url[] = $fieldname . '_smaller=' . $value; $searchvars[] = $fieldname; $criteria->add(new Criteria($fieldname, $value, '<=')); } break; } if (isset($_REQUEST[$fieldname]) && !isset($_REQUEST[$fieldname . '_smaller']) && !isset($_REQUEST[$fieldname . '_larger'])) { if (!is_array($_REQUEST[$fieldname])) { $value = (int)$_REQUEST[$fieldname]; $search_url[] = $fieldname . '=' . $value; $criteria->add(new Criteria($fieldname, $value, '=')); } else { $value = array_map('intval', $_REQUEST[$fieldname]); foreach ($value as $thisvalue) { $search_url[] = $fieldname . '[]=' . $thisvalue; } $criteria->add(new Criteria($fieldname, '(' . implode(',', $value) . ')', 'IN')); } $searchvars[] = $fieldname; } break; case XOBJ_DTYPE_URL: case XOBJ_DTYPE_TXTBOX: case XOBJ_DTYPE_TXTAREA: if (isset($_REQUEST[$fieldname]) && $_REQUEST[$fieldname] !== '') { $value = $myts->addSlashes(trim($_REQUEST[$fieldname])); switch ($_REQUEST[$fieldname . '_match']) { case XOOPS_MATCH_START: $value .= '%'; break; case XOOPS_MATCH_END: $value = '%' . $value; break; case XOOPS_MATCH_CONTAIN: $value = '%' . $value . '%'; break; } $search_url[] = $fieldname . '=' . $_REQUEST[$fieldname]; $search_url[] = $fieldname . '_match=' . $_REQUEST[$fieldname . '_match']; $operator = 'LIKE'; $criteria->add(new Criteria($fieldname, $value, $operator)); $searchvars[] = $fieldname; } break; } } } // if ($_REQUEST['sortby'] == "name") { // $criteria->setSort("name"); // } else if ($_REQUEST['sortby'] == "email") { // $criteria->setSort("email"); // } else if ($_REQUEST['sortby'] == "uname") { // $criteria->setSort("uname"); // } else if (isset($fields[$_REQUEST['sortby']])) { // $criteria->setSort($fields[$_REQUEST['sortby']]->getVar('field_name')); // } // change by zyspec: $sortby = 'uname'; if (!empty($_REQUEST['sortby'])) { switch ($_REQUEST['sortby']) { case 'name': case 'email': case 'uname': $sortby = $_REQUEST['sortby']; break; default: if (isset($fields[$_REQUEST['sortby']])) { $sortby = $fields[$_REQUEST['sortby']]->getVar('field_name'); } break; } $criteria->setSort($sortby); } // add search groups , only for Webmasters $searchgroups = array(); if ($GLOBALS['xoopsUser'] && $GLOBALS['xoopsUser']->isAdmin()) { $searchgroups = empty($_REQUEST['selgroups']) ? array() : array_map('intval', $_REQUEST['selgroups']); foreach ($searchgroups as $group) { $search_url[] = 'selgroups[]=' . $group; } } $order = $_REQUEST['order'] == 0 ? 'ASC' : 'DESC'; $criteria->setOrder($order); $limit = empty($_REQUEST['limit']) ? $limit_default : (int)$_REQUEST['limit']; $criteria->setLimit($limit); $start = isset($_REQUEST['start']) ? (int)$_REQUEST['start'] : 0; $criteria->setStart($start); list($users, $profiles, $total_users) = $profile_handler->search($criteria, $searchvars, $searchgroups); $total = sprintf(_PROFILE_MA_FOUNDUSER, "<span class='red'>{$total_users}</span>") . ' '; $GLOBALS['xoopsTpl']->assign('total_users', $total); //Sort information foreach (array_keys($users) as $k) { $userarray = array(); $userarray['output'][] = "<a href='userinfo.php?uid=" . $users[$k]->getVar('uid') . "' title=''>" . $users[$k]->getVar('uname') . '</a>'; $userarray['output'][] = ($users[$k]->getVar('user_viewemail') == 1 || (is_object($GLOBALS['xoopsUser']) && $GLOBALS['xoopsUser']->isAdmin())) ? $users[$k]->getVar('email') : ''; foreach (array_keys($fields) as $i) { if (in_array($fields[$i]->getVar('field_id'), $searchable_fields) && in_array($fields[$i]->getVar('field_type'), $searchable_types) && in_array($fields[$i]->getVar('field_name'), $searchvars)) { $userarray['output'][] = $fields[$i]->getOutputValue($users[$k], $profiles[$k]); } } $GLOBALS['xoopsTpl']->append('users', $userarray); unset($userarray); } //Get captions $captions[] = _US_NICKNAME; $captions[] = _US_EMAIL; foreach (array_keys($fields) as $i) { if (in_array($fields[$i]->getVar('field_id'), $searchable_fields) && in_array($fields[$i]->getVar('field_type'), $searchable_types) && in_array($fields[$i]->getVar('field_name'), $searchvars)) { $captions[] = $fields[$i]->getVar('field_title'); } } $GLOBALS['xoopsTpl']->assign('captions', $captions); if ($total_users > $limit) { $search_url[] = 'op=results'; $search_url[] = 'order=' . $order; //TODO remove it for final release // $search_url[] = "sortby=" . htmlspecialchars($_REQUEST['sortby']); $search_url[] = 'sortby=' . htmlspecialchars($sortby); // change by zyspec $search_url[] = 'limit=' . $limit; if (isset($search_url)) { $args = implode('&amp;', $search_url); } include_once $GLOBALS['xoops']->path('class/pagenav.php'); $nav = new XoopsPageNav($total_users, $limit, $start, 'start', $args); $GLOBALS['xoopsTpl']->assign('nav', $nav->renderNav(5)); } break; } include __DIR__ . '/footer.php';