      1: <?php
      2:
      3: /**
      4:  * Text HTML input box custom widget
      5:  *
      6:  * @package alpha::view::widgets
      7:  * @since 1.0
      8:  * @author John Collins <dev@alphaframework.org>
      9:  * @version $Id: TextBox.inc 1794 2014-05-05 20:11:40Z alphadevx $
     10:  * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
     11:  * @copyright Copyright (c) 2014, John Collins (founder of Alpha Framework).
     12:  * All rights reserved.
     13:  *
     14:  * <pre>
     15:  * Redistribution and use in source and binary forms, with or
     16:  * without modification, are permitted provided that the
     17:  * following conditions are met:
     18:  *
     19:  * * Redistributions of source code must retain the above
     20:  *   copyright notice, this list of conditions and the
     21:  *   following disclaimer.
     22:  * * Redistributions in binary form must reproduce the above
     23:  *   copyright notice, this list of conditions and the
     24:  *   following disclaimer in the documentation and/or other
     25:  *   materials provided with the distribution.
     26:  * * Neither the name of the Alpha Framework nor the names
     27:  *   of its contributors may be used to endorse or promote
     28:  *   products derived from this software without specific
     29:  *   prior written permission.
     30:  *
     31:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
     32:  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
     33:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     34:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     35:  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
     36:  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     37:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     38:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     39:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     40:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     41:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     42:  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     43:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     44:  * </pre>
     45:  *
     46:  */
     47: class TextBox {
     48:     /**
     49:      * The text object that will be edited by this text box
     50:      *
     51:      * @var Text
     52:      * @since 1.0
     53:      */
     54:     public $textObject;
     55:
     56:     /**
     57:      * The data label for the text object
     58:      *
     59:      * @var string
     60:      * @since 1.0
     61:      */
     62:     public $label;
     63:
     64:     /**
     65:      * The name of the HTML input box
     66:      *
     67:      * @var string
     68:      * @since 1.0
     69:      */
     70:     public $name;
     71:
     72:     /**
     73:      * The amount of rows to display by default
     74:      *
     75:      * @var integer
     76:      * @since 1.0
     77:      */
     78:     public $rows;
     79:
     80:     /**
     81:      * An optional additional idenitfier to append to the id of the text box where many are on one page
     82:      *
     83:      * @var integer
     84:      * @since 1.0
     85:      */
     86:     public $identifier;
     87:
     88:     /**
     89:      * The constructor
     90:      *
     91:      * @param Text $text The text object that will be edited by this text box.
     92:      * @param string $label The data label for the text object.
     93:      * @param string $name The name of the HTML input box.
     94:      * @param integer $rows The display size (rows).
     95:      * @param integer $identifier An additional idenitfier to append to the id of the text box.
     96:      * @since 1.0
     97:      * @throws IllegalArguementException
     98:      */
     99:     public function __construct($text, $label, $name, $rows=5, $identifier=0) {
    100:         global $config;
    101:
    102:         if($text instanceof Text)
    103:             $this->textObject = $text;
    104:         else
    105:             throw new IllegalArguementException('Text object passed ['.var_export($text, true).'] is not a valid Text object!');
    106:
    107:         $this->label = $label;
    108:         $this->rows = $rows;
    109:         $this->identifier = $identifier;
    110:
    111:         if($config->get('security.encrypt.http.fieldnames'))
    112:             $this->name = base64_encode(AlphaSecurityUtils::encrypt($name));
    113:         else
    114:             $this->name = $name;
    115:     }
    116:
    117:     /**
    118:      * Renders the HTML and javascript for the text box
    119:      *
    120:      * @return string
    121:      * @since 1.0
    122:      */
    123:     public function render() {
    124:
    125:         global $config;
    126:
    127:         $html = '<div class="form-group">';
    128:         $html .= '  <label for="'.$this->name.'">'.$this->label.'</label>';
    129:
    130:         $html .= '<textarea class="form-control" maxlength="'.$this->textObject->getSize().'" id="text_field_'.$this->name.'_'.$this->identifier.'" rows="'.$this->rows.'" name="'.$this->name.'">';
    131:
    132:         if($this->textObject->getAllowHTML())
    133:             $html .= InputFilter::decode($this->textObject->getValue(), true);
    134:         else
    135:             $html .= InputFilter::decode($this->textObject->getValue());
    136:
    137:         $html .= '</textarea>';
    138:
    139:         $html .= '</div>';
    140:
    141:
    142:         if($this->textObject->getRule() != '') {
    143:             $html .= '<input type="hidden" id="'.$this->name.'_msg" value="'.$this->textObject->getHelper().'"/>';
    144:             $html .= '<input type="hidden" id="'.$this->name.'_rule" value="'.$this->textObject->getRule().'"/>';
    145:         }
    146:
    147:         return $html;
    148:     }
    149:
    150:     /**
    151:      * Setter for text object
    152:      *
    153:      * @param string $text
    154:      * @since 1.0
    155:      * @throws IllegalArguementException
    156:      */
    157:     public function setTextObject($text) {
    158:         if($text instanceof Text)
    159:             $this->text = $text;
    160:         else
    161:             throw new IllegalArguementException('Text object passed ['.var_export($text, true).'] is not a valid Text object!');
    162:     }
    163:
    164:     /**
    165:      * Getter for text object
    166:      *
    167:      * @return Text
    168:      * @since 1.0
    169:      */
    170:     function getTextObject() {
    171:         return $this->textObject;
    172:     }
    173: }
    174:
    175: ?>