Skip to content

Commit

Permalink
This is a first cut of a new formslib.php a library of classes for cr…
Browse files Browse the repository at this point in the history
…eating and securely processing forms in Moodle, based on PEAR QuickForms. Only uses XHTML and CSS and no table tags.

This is NOT YET PART OF THE MOODLE API it is here for experimental purposes.
  • Loading branch information
jamiesensei committed Sep 24, 2006
1 parent e836a7d commit da6f876
Show file tree
Hide file tree
Showing 68 changed files with 12,066 additions and 12 deletions.
5 changes: 5 additions & 0 deletions lang/en_utf8/form.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?php
$string['denotesreq']='$a denotes required field.';
$string['requiredelement']='Required field.';
$string['nonexistentformelements']='Trying to add help buttons to nonexistent form elements : $a';
?>
45 changes: 45 additions & 0 deletions lib/form/checkbox.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php
require_once('HTML/QuickForm/checkbox.php');

/**
* HTML class for a checkbox type element
*
* @author Jamie Pratt
* @access public
*/
class moodleform_checkbox extends HTML_QuickForm_checkbox{
/**
* html for help button, if empty then no help
*
* @var string
*/
var $_helpbutton='';
/**
* set html for help button
*
* @access public
* @param array $help array of arguments to make a help button
*/
function setHelpButton($helpbuttonargs){
if (!is_array($helpbuttonargs)){
$helpbuttonargs=array($helpbuttonargs);
}else{
$helpbuttonargs=$helpbuttonargs;
}
//we do this to to return html instead of printing it
//without having to specify it in every call to make a button.
$defaultargs=array('', '', 'moodle', true, false, '', true);
$helpbuttonargs=$helpbuttonargs + $defaultargs ;
$this->_helpbutton=call_user_func_array('helpbutton', $helpbuttonargs);
}
/**
* get html for help button
*
* @access public
* @return string html for help button
*/
function getHelpButton(){
return $this->_helpbutton;
}
}
?>
159 changes: 159 additions & 0 deletions lib/form/dateselector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
<?php
global $CFG;
require_once "$CFG->libdir/form/group.php";
require_once "$CFG->libdir/formslib.php";

/**
* Class for a group of elements used to input a date.
*
* Emulates moodle print_date_selector function
*
* @author Jamie Pratt <[email protected]>
* @access public
*/
class moodleform_date_selector extends moodleform_group
{
/**
* Control the fieldnames for form elements
*
* day => string day fieldname
* month => string month fieldname
* year => string year fieldname
* timezone => float/string timezone
* applydst => apply users daylight savings adjustment?
*/
var $_options = array('startyear'=>1970, 'stopyear'=>2020,
'timezone'=>99, 'applydst'=>true);

/**
* These complement separators, they are appended to the resultant HTML
* @access private
* @var array
*/
var $_wrap = array('', '');

/**
* Class constructor
*
* @access public
* @param string Element's name
* @param mixed Label(s) for an element
* @param array Options to control the element's display
* @param mixed Either a typical HTML attribute string or an associative array
*/
function moodleform_date_selector($elementName = null, $elementLabel = null, $options = array(), $attributes = null)
{
$this->HTML_QuickForm_element($elementName, $elementLabel, $attributes);
$this->_persistantFreeze = true;
$this->_appendName = true;
$this->_type = 'date_selector';
// set the options, do not bother setting bogus ones
if (is_array($options)) {
foreach ($options as $name => $value) {
if (isset($this->_options[$name])) {
if (is_array($value) && is_array($this->_options[$name])) {
$this->_options[$name] = @array_merge($this->_options[$name], $value);
} else {
$this->_options[$name] = $value;
}
}
}
}
}

// }}}
// {{{ _createElements()

function _createElements()
{
$this->_elements = array();
for ($i=1; $i<=31; $i++) {
$days[$i] = $i;
}
for ($i=1; $i<=12; $i++) {
$months[$i] = userdate(gmmktime(12,0,0,$i,1,2000), "%B");
}
for ($i=$this->_options['startyear']; $i<=$this->_options['stopyear']; $i++) {
$years[$i] = $i;
}
$this->_elements[] =& moodleform::createElement('select', 'day', null, $days, $this->getAttributes(), true);
$this->_elements[] =& moodleform::createElement('select','month', null, $months, $this->getAttributes(), true);
$this->_elements[] =& moodleform::createElement('select','year', null, $years, $this->getAttributes(), true);

}

// }}}
// {{{ setValue()

function setValue($value)
{
if (!($value)) {
$value = time();
}
if (!is_array($value)) {
$currentdate = usergetdate($value);
$value = array(
'day' => $currentdate['mday'],
'month' => $currentdate['mon'],
'year' => $currentdate['year']);

}
parent::setValue($value);
}

// }}}
// {{{ toHtml()

function toHtml()
{
include_once('HTML/QuickForm/Renderer/Default.php');
$renderer =& new HTML_QuickForm_Renderer_Default();
$renderer->setElementTemplate('{element}');
parent::accept($renderer);
return $this->_wrap[0] . $renderer->toHtml() . $this->_wrap[1];
}

// }}}
// {{{ accept()

function accept(&$renderer, $required = false, $error = null)
{
$renderer->renderElement($this, $required, $error);
}

// }}}
// {{{ onQuickFormEvent()

function onQuickFormEvent($event, $arg, &$caller)
{
if ('updateValue' == $event) {
return HTML_QuickForm_element::onQuickFormEvent($event, $arg, $caller);
} else {
return parent::onQuickFormEvent($event, $arg, $caller);
}
}
/**
* Output a timestamp. Give it the name of the group.
*
* @param array $submitValues
* @param bool $assoc
* @return array
*/
function exportValue(&$submitValues, $assoc = false)
{
$value = null;
$valuearray = $this->_elements[0]->exportValue($submitValues[$this->getName()], true);
$valuearray +=$this->_elements[1]->exportValue($submitValues[$this->getName()], true);
$valuearray +=$this->_elements[2]->exportValue($submitValues[$this->getName()], true);
$value[$this->getName()]=make_timestamp($valuearray['year'],
$valuearray['month'],
$valuearray['day'],
0,0,0,
$this->_options['timezone'],
$this->_options['applydst']);
return $value;
}

// }}}
}
?>
45 changes: 45 additions & 0 deletions lib/form/file.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php
require_once('HTML/QuickForm/file.php');

/**
* HTML class for a form element to upload a file
*
* @author Jamie Pratt
* @access public
*/
class moodleform_file extends HTML_QuickForm_file{
/**
* html for help button, if empty then no help
*
* @var string
*/
var $_helpbutton='';
/**
* set html for help button
*
* @access public
* @param array $help array of arguments to make a help button
*/
function setHelpButton($helpbuttonargs){
if (!is_array($helpbuttonargs)){
$helpbuttonargs=array($helpbuttonargs);
}else{
$helpbuttonargs=$helpbuttonargs;
}
//we do this to to return html instead of printing it
//without having to specify it in every call to make a button.
$defaultargs=array('', '', 'moodle', true, false, '', true);
$helpbuttonargs=$helpbuttonargs + $defaultargs ;
$this->_helpbutton=call_user_func_array('helpbutton', $helpbuttonargs);
}
/**
* get html for help button
*
* @access public
* @return string html for help button
*/
function getHelpButton(){
return $this->_helpbutton;
}
}
?>
47 changes: 47 additions & 0 deletions lib/form/group.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php
require_once("HTML/QuickForm/group.php");

/**
* HTML class for a form element group
*
* @author Adam Daniel <[email protected]>
* @author Bertrand Mansion <[email protected]>
* @version 1.0
* @since PHP4.04pl1
* @access public
*/
class moodleform_group extends HTML_QuickForm_group{
/**
* html for help button, if empty then no help
*
* @var string
*/
var $_helpbutton='';
/**
* set html for help button
*
* @access public
* @param array $help array of arguments to make a help button
*/
function setHelpButton($helpbuttonargs){
if (!is_array($helpbuttonargs)){
$helpbuttonargs=array($helpbuttonargs);
}else{
$helpbuttonargs=$helpbuttonargs;
}
//we do this to to return html instead of printing it
//without having to specify it in every call to make a button.
$defaultargs=array('', '', 'moodle', true, false, '', true);
$helpbuttonargs=$helpbuttonargs + $defaultargs ;
$this->_helpbutton=call_user_func_array('helpbutton', $helpbuttonargs);
}
/**
* get html for help button
*
* @access public
* @return string html for help button
*/
function getHelpButton(){
return $this->_helpbutton;
}
}
49 changes: 49 additions & 0 deletions lib/form/htmleditor.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php
global $CFG;
require_once("$CFG->libdir/form/textarea.php");

/**
* HTML class for htmleditor type element
*
* @author Jamie Pratt
* @access public
*/
class moodleform_htmleditor extends moodleform_textarea{
var $_type = 'htmleditor';
var $_elementTemplateType='default';
var $_canUseHtmlEditor;
var $_options=array('course'=>0);
function moodleform_htmleditor($elementName=null, $elementLabel=null, $attributes=null){
$this->_canUseHtmlEditor=can_use_html_editor();
if ($this->_canUseHtmlEditor){
$this->_elementTemplateType='wide';
}else{
$this->_elementTemplateType='default';
}
parent::moodleform_textarea($elementName, $elementLabel, $attributes);
}
function getElementTemplateType(){
return $this->_elementTemplateType;
}
function toHtml(){
ob_start();
use_html_editor($this->getName());
$script=ob_get_clean();
if ($this->_flagFrozen) {
return $this->getFrozenHtml();
} else {
return $this->_getTabs() .
print_textarea($this->_canUseHtmlEditor,
$this->getAttribute('rows'),
$this->getAttribute('cols'),
$this->getAttribute('width'),
$this->getAttribute('height'),
$this->getName(),
preg_replace("/(\r\n|\n|\r)/", '&#010;',$this->getValue()),
$this->_options['course'],
true).$script;
}
} //end func toHtml

}
?>
Loading

0 comments on commit da6f876

Please sign in to comment.