<?php
/*
Module: Objects
Version: 3.23
Description: Object manager for WHMCS Billing
Author: Written by Simon Roberts aka. Wishcraft (hide@address.com)
Owner: Frilogg
License: See docs - End User Licence.pdf
*/
defined('XOOPS_ROOT_PATH') or die('Restricted access');
xoops_load('XoopsFormElement');
class XoopsFormSelectForum extends XoopsFormElement
{
/**
* Options
*
* @var array
* @access private
*/
var $_options = array();
/**
* Allow multiple selections?
*
* @var bool
* @access private
*/
var $_multiple = false;
/**
* Number of rows. "1" makes a dropdown list.
*
* @var int
* @access private
*/
var $_size;
/**
* Pre-selcted values
*
* @var array
* @access private
*/
var $_value = array();
/**
* Constructor
*
* @param string $caption Caption
* @param string $name "name" attribute
* @param mixed $value Pre-selected value (or array of them).
* @param int $size Number or rows. "1" makes a drop-down-list
* @param bool $multiple Allow multiple selections?
*/
function XoopsFormSelectForum($caption, $name, $value = null, $size = 1, $multiple = false, $ownid = 0, $nonone = false)
{
$this->setCaption($caption);
$this->setName($name);
$this->_multiple = $multiple;
$this->_size = intval($size);
if (isset($value)) {
$this->setValue($value);
}
if ($nonone == false)
$this->addOption(0, 'None');
foreach ($this->GetCategories($ownid, $searchable) as $id => $object)
$this->addOption($id, $object);
}
function GetForums($ownid, $searchable){
$category_handler =& xoops_getmodulehandler('forum', 'xforum');
$categories = $category_handler->getObjects($criteria, true);
$langs_array = $this->TreeMenu(array(), $categories, -1, $ownid, $searchable);
return $langs_array;
}
function TreeMenu($langs_array, $categories, $level, $ownid=null, $searchable=false) {
$level++;
$category_handler =& xoops_getmodulehandler('forum', 'xforum');
foreach($categories as $catid => $category) {
if ($catid!=$ownid) {
$langs_array[$catid] = str_repeat('--', $level) . $category->getVar('forum_name');
$criteria = new CriteriaCompo(new Criteria('parent_forum', $catid));
if ($categoriesb = $category_handler->getObjects($criteria, true)){
$langs_array = $this->TreeMenu($langs_array, $categoriesb, $level);
}
}
}
$level--;
return ($langs_array);
}
/**
* Are multiple selections allowed?
*
* @return bool
*/
function isMultiple()
{
return $this->_multiple;
}
/**
* Get the size
*
* @return int
*/
function getSize()
{
return $this->_size;
}
/**
* Get an array of pre-selected values
*
* @param bool $encode To sanitizer the text?
* @return array
*/
function getValue($encode = false)
{
if (! $encode) {
return $this->_value;
}
$value = array();
foreach($this->_value as $val) {
$value[] = $val ? htmlspecialchars($val, ENT_QUOTES) : $val;
}
return $value;
}
/**
* Set pre-selected values
*
* @param $value mixed
*/
function setValue($value)
{
if (is_array($value)) {
foreach($value as $v) {
$this->_value[] = $v;
}
} elseif (isset($value)) {
$this->_value[] = $value;
}
}
/**
* Add an option
*
* @param string $value "value" attribute
* @param string $name "name" attribute
*/
function addOption($value, $name = '')
{
if ($name != '') {
$this->_options[$value] = $name;
} else {
$this->_options[$value] = $value;
}
}
/**
* Add multiple options
*
* @param array $options Associative array of value->name pairs
*/
function addOptionArray($options)
{
if (is_array($options)) {
foreach($options as $k => $v) {
$this->addOption($k, $v);
}
}
}
/**
* Get an array with all the options
*
* Note: both name and value should be sanitized. However for backward compatibility, only value is sanitized for now.
*
* @param int $encode To sanitizer the text? potential values: 0 - skip; 1 - only for value; 2 - for both value and name
* @return array Associative array of value->name pairs
*/
function getOptions($encode = false)
{
if (! $encode) {
return $this->_options;
}
$value = array();
foreach($this->_options as $val => $name) {
$value[$encode ? htmlspecialchars($val, ENT_QUOTES) : $val] = ($encode > 1) ? htmlspecialchars($name, ENT_QUOTES) : $name;
}
return $value;
}
/**
* Prepare HTML for output
*
* @return string HTML
*/
function render()
{
$ele_name = $this->getName();
$ele_title = $this->getTitle();
$ele_value = $this->getValue();
$ele_options = $this->getOptions();
$ret = '<select size="' . $this->getSize() . '"' . $this->getExtra();
if ($this->isMultiple() != false) {
$ret .= ' name="' . $ele_name . '[]" id="' . $ele_name . '" title="'. $ele_title. '" multiple="multiple">' ;
} else {
$ret .= ' name="' . $ele_name . '" id="' . $ele_name . '" title="'. $ele_title. '">' ;
}
foreach($ele_options as $value => $name) {
$ret .= '<option value="' . htmlspecialchars($value, ENT_QUOTES) . '"';
if (count($ele_value) > 0 && in_array($value, $ele_value)) {
$ret .= ' selected="selected"';
}
$ret .= '>' . $name . '</option>' ;
}
$ret .= '</select>';
return $ret;
}
/**
* Render custom javascript validation code
*
* @seealso XoopsForm::renderValidationJS
*/
function renderValidationJS()
{
// render custom validation code if any
if (! empty($this->customValidationCode)) {
return implode("\n", $this->customValidationCode);
// generate validation code if required
} elseif ($this->isRequired()) {
$eltname = $this->getName();
$eltcaption = $this->getCaption();
$eltmsg = empty($eltcaption) ? sprintf(_FORM_ENTER, $eltname) : sprintf(_FORM_ENTER, $eltcaption);
$eltmsg = str_replace('"', '\"', stripslashes($eltmsg));
return "\nvar hasSelected = false; var selectBox = myform.{$eltname};" . "for (i = 0; i < selectBox.options.length; i++ ) { if (selectBox.options[i].selected == true) { hasSelected = true; break; } }" . "if (!hasSelected) { window.alert(\"{$eltmsg}\"); selectBox.focus(); return false; }";
}
return '';
}
}
?>