%PDF- %PDF-
| Direktori : /home1/lightco1/www/lightingrepublic.com.au/libraries/cegcore/helpers/ |
| Current File : //home1/lightco1/www/lightingrepublic.com.au/libraries/cegcore/helpers/html.php |
<?php
/**
* ChronoCMS version 1.0
* Copyright (c) 2012 ChronoCMS.com, All rights reserved.
* Author: (ChronoCMS.com Team)
* license: Please read LICENSE.txt
* Visit http://www.ChronoCMS.com for regular updates and information.
**/
namespace GCore\Helpers;
/* @copyright:ChronoEngine.com @license:GPLv2 */defined('_JEXEC') or die('Restricted access');
defined("GCORE_SITE") or die;
class Html extends \GCore\Libs\Helper{
static $counter = array();
static $usedIds = array();
//static $last_field_params = array();
//static $template = '';
static $active_set = 'div';
static $sets_config = array(
'table' => array('table', 'tr', 'td'),
'ul' => array('ul', 'li', 'div'),
'div' => array('div', 'div', 'div'),
);
function __construct(){
}
/*
public static function bs(){
self::$template = 'bs';
}
*/
public static function active_set($set = 'table'){
self::$active_set = $set;
}
public static function set_tag($index){
return self::$sets_config[self::$active_set][$index];
}
public static function image($src, $params = array()){
$attributes = array('src', 'height', 'width', 'border', 'alt', 'rel', 'title', 'style', 'class', 'onclick');
$params['src'] = $src;
return self::_concat($params, $attributes, '<img ', ' />');
//break;
}
public static function url($text, $href = '', $params = array()){
$attributes = array('href', 'target', 'alt', 'rel', 'title', 'style', 'class', 'onclick');
//$params['href'] = $href;
return self::_concat($params, $attributes, '<a href="'.$href.'" ', '>'.$text.'</a>');
//break;
}
public static function styles($styles = array()){
if(is_string($styles)){
return $styles;
}
return implode('; ', array_map(create_function('$k,$v', 'return $k.":".$v;'), array_keys($styles), array_values($styles)));
}
private static function _fix_field_params($name, &$params){
//force field id if it doesn't exist
if(!isset($params['id'])){
$new_id = !empty($name) ? \GCore\Libs\Str::clean($name).'__#' : 'fld__#';
$params['id'] = self::_field_uid($new_id);
}
//fix field class
if(!isset($params['class'])){
$params['class'] = '';
}
//fix label params
if(!isset($params['label'])){
$params['label'] = null;
}
if(is_string($params['label']) AND !empty($params['label'])){
$params['label'] = array('text' => $params['label']);
}
if(!isset($params['label']['text']) OR $params['label']['text'] == ''){
$params['label'] = null;
}
if(!empty($params['label'])){
if(!array_key_exists('for', $params['label']) OR (array_key_exists('for', $params['label']) AND strlen($params['label']['for']) == 0 AND $params['label']['for'] !== false)){
$params['label']['for'] = isset($params['id']) ? $params['id'] : '';
}
if(empty($params['label']['position'])){
$params['label']['position'] = 'left';
}
}
//check multi inputs// not needed!
/*if(!empty($params['type']) AND $params['type'] == 'multi' AND !empty($params['inputs'])){
foreach($params['inputs'] as $k => $input){
self::_fix_field_params($input);
$params['inputs'][$k] = $input;
}
}*/
/*if(!array_intersect(explode(' ', $params['class']), array('A', 'SSS', 'SS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL'))){
$params['class'] = self::addClass(array('A'), $params['class']);
}*/
}
public static function _concat($atts = array(), $valid = array(), $prefix = '', $postfix = ''){
$out = array();
foreach($atts as $k => $v){
if(in_array($k, $valid) OR strpos($k, ':') === 0){
if(is_array($v) AND $k == 'style'){
$v = self::styles($v);
}
$k = str_replace(':', '', $k);
$v = str_replace('&', '&', $v);
$out[] = $k.'="'.htmlspecialchars($v, ENT_QUOTES).'"';
}
}
if(!empty($out)){
return $prefix.implode(' ', $out).$postfix;
}
return $prefix.$postfix;
}
private static function _field_uid($id){
/*$new_id = str_replace('__#', self::$counter, $id);
if(!in_array($new_id, self::$usedIds)){
self::$usedIds[] = $id = $new_id;
self::$counter++;
}else{
if($new_id != $id){
self::$counter++;
return self::_field_uid($id);
}
}
return $id;*/
$clean_id = str_replace('__#', '', $id);
$new_id = str_replace('__#', (!empty(self::$counter[$clean_id]) ? self::$counter[$clean_id] : ''), $id);
if(!isset(self::$counter[$clean_id])){
self::$counter[$clean_id] = 0;
}
self::$counter[$clean_id]++;
return $new_id;
}
public static function html_label($params = array(), $f_params = array()){
$attributes = array('for', 'class', 'id');
$tag = 'label';
$params['class'] = empty($params['class']) ? '' : $params['class'];
if(!empty($params['sub'])){
$params['class'] = self::addClass(array('gcore-sub-label'), $params['class']);
}else{
$params['position'] = !empty($params['position']) ? $params['position'] : 'left';
$default_class = 'gcore-label-'.$params['position'];
$params['class'] = empty($params['class']) ? $default_class : $params['class'];
}
return self::_concat($params, $attributes, '<'.$tag.' ', '>'.$params['text'].'</'.$tag.'>');
}
public static function container($tag = 'div', $html = '', $params = array()){
if(!empty($params['id']) AND strpos($params['id'], '__#')){
$params['id'] = self::_field_uid($params['id']);
}
return self::_concat($params, array_keys($params), '<'.$tag.(!empty($params) ? ' ': ''), '>'.$html.'</'.$tag.'>');
}
public static function html_formStart($class = 'gcore-all', $id = ''){
return '<div class="'.$class.'"'.($id ? ' id="'.$id.'"' : '').'>';
}
public static function html_formSecStart($class = 'gcore-section', $id = ''){
return '<'.self::set_tag(0).' class="'.$class.'"'.($id ? ' id="'.$id.'"' : '').'>';
}
public static function html_formSecEnd(){
return '</'.self::set_tag(0).'>';
}
public static function html_formEnd(){
return '</div>';
}
public static function html_formLine($name, $params = array()){
$tags = array();
switch($params['type']){
default:
$formInput = self::formInput($name, $params);
$postfix = !empty($params['id']) ? '-'.$params['id'] : '__#';
$table_cell_class = 'gcore-line-td';
$form_cell = self::container(self::set_tag(2), $formInput, array('class' => $table_cell_class, 'id' => 'ftd'.$postfix));
$tags[] = self::container(self::set_tag(1), $form_cell, array('class' => 'gcore-line-tr gcore-form-row', 'id' => 'ftr'.$postfix));
break;
}
return implode("\n", $tags);
}
public static function html_formInput($name, $params = array(), $formInputParams = array()){
$postfix = !empty($params['id']) ? '-'.$params['id'] : '__#';
$tags = array();
$class = 'gcore-input';
if(!empty($params['label']['position']) AND $params['label']['position'] == 'top'){
$class = 'gcore-input-wide';
}
if(!empty($formInputParams['class'])){
$class .= ' '.$formInputParams['class'];
}else{
$class = (!empty($params['sub_input'])? 'gcore-input-container ' : '').'gcore-display-table '.$class;//gcore-input-container
}
$id = 'fin'.$postfix;
if(!empty($formInputParams['id'])){
$id = $formInputParams['id'];
}
switch($params['type']){
case 'radio':
case 'checkbox_group':
$input = self::input($name, $params);
$column = 'single';
if(!empty($params['horizontal'])){
$column = 'multiple';
}
$input = self::container('div', $input, array('class' => 'gcore-'.$column.'-column', 'id' => 'fclmn__#'));
break;
default:
$input = self::input($name, $params);
break;
}
//$params = self::$last_field_params;
//the main label is NOT a sub label, inject it before the input
if(!empty($params['label']) AND empty($params['label']['sub'])){
$tags[] = self::label($params['label'], $params);
}
if(!empty($params['sublabel'])){
//we have a secondary sublabel description
$tags[] = self::container('div', $input.self::label(array('text' => $params['sublabel'], 'sub' => true), $params), array('class' => $class, 'id' => $id));
}else{
if($params['type'] == 'multi'){
$tags[] = $input;
}else{
$tags[] = self::container('div', $input, array('class' => $class, 'id' => $id));
}
}
//the main label is a sub label, inject it after the input
if(!empty($params['label']) AND !empty($params['label']['sub'])){
$tags[] = self::label($params['label'], $params);
}
return implode("\n", $tags);
}
public static function html_input($name, $params = array()){
$output = '';
$tags = array();
switch($params['type']){
case 'hidden':
$attributes = array('type', 'name', 'id', 'value', 'alt', 'class');
$tags[] = self::_concat($params, $attributes, '<input ', ' />');
break;
case 'submit':
case 'button':
case 'reset':
$attributes = array('type', 'name', 'id', 'value', 'class', 'style', 'onclick');
$tags[] = self::_concat($params, $attributes, '<input ', ' />');
break;
case 'textarea':
$attributes = array('name', 'id', 'class', 'rows', 'cols', 'title', 'style', 'onclick', 'onchange', 'alt', 'placeholder', 'readonly');
$tags[] = self::_concat($params, $attributes, '<textarea ', '>'.(isset($params['value']) ? $params['value'] : '').'</textarea>');
break;
case 'dropdown':
$attributes = array('name', 'id', 'class', 'title', 'multiple', 'size', 'style', 'onclick', 'onchange', 'alt');
if(array_key_exists('multiple', $params) AND empty($params['multiple'])){
unset($params['multiple']);
}
$set_empty = false;
if(array_key_exists('empty', $params) AND !empty($params['empty'])){
$set_empty = true;
}
$tags[] = self::_concat($params, $attributes, '<select ', '>');
if(!empty($params['options']) AND is_string($params['options']) AND strpos($params['options'], '=')){
$params['options'] = \GCore\Libs\Str::list_to_array($params['options'], '=');
}
if(!empty($params['options']) AND is_array($params['options'])){
if($set_empty){
$params['options'] = array('' => $params['empty']) + $params['options'];
}
foreach($params['options'] as $value => $title){
if(is_array($title)){
//this is an optgroup
$tags[] = self::_concat(array('label' => $value), array('value', 'label', 'class'), '<optgroup ', '>');
foreach($title as $opt_v => $opt_l){
$option_params = array('value' => $opt_v);
if(isset($params['values']) AND in_array($opt_v, (array)$params['values'])){
$option_params['selected'] = 'selected';
}
if(!empty($params['options_classes'][$opt_v])){
$option_params['class'] = $params['options_classes'][$opt_v];
}
$tags[] = self::_concat($option_params, array('value', 'selected', 'class'), '<option ', '>'.$opt_l.'</option>');
}
$tags[] = '</optgroup>';
}else{
$option_params = array('value' => $value);
if(isset($params['values']) AND in_array($value, (array)$params['values'])){
$option_params['selected'] = 'selected';
}
if(!empty($params['options_classes'][$value])){
$option_params['class'] = $params['options_classes'][$value];
}
$tags[] = self::_concat($option_params, array('value', 'selected', 'class'), '<option ', '>'.$title.'</option>');
}
}
}
$tags[] = '</select>';
break;
case 'radio':
$attributes = array('type', 'name', 'id', 'class', 'title', 'value', 'style', 'checked', 'onclick', 'onchange', 'alt');
if(!empty($params['ghost']) AND (bool)$params['ghost'] === true){
$tags[] = self::input($params['name'], array('type' => 'hidden', 'id' => $params['id'].'_ghost', ':data-ghost' => 1, 'value' => isset($params['ghost_value']) ? $params['ghost_value'] : ''));
}
if(!empty($params['options']) AND is_array($params['options'])){
$id = $params['id'].'__#';
$originals = $params;
foreach($params['options'] as $value => $label){
unset($params['checked']);
if(isset($originals['value']) AND strlen($originals['value']) AND $value == $originals['value']){
$params['checked'] = 'checked';
}
$params['value'] = $value;
$params['id'] = self::_field_uid($id);
$item = array();
$item[] = self::_concat($params, $attributes, '<input ', ' />');
if(!empty($params['label_input'])){
$label = array_pop($item).$label;
}
$item[] = self::label(array('text' => $label, 'class' => 'gcore-label', 'for' => $params['id']), $params);
$tags[] = self::container('div', implode("\n", $item), array('class' => 'gcore-radio-item', 'id' => 'fitem__#'));
}
$params['id'] = '';
}
break;
case 'checkbox_group':
$attributes = array('type', 'name', 'id', 'class', 'title', 'value', 'style', 'checked', 'onclick', 'onchange', 'alt');
if(!empty($params['ghost']) AND (bool)$params['ghost'] === true){
$tags[] = self::input(str_replace('[]', '', $params['name']), array('type' => 'hidden', 'id' => $params['id'].'_ghost', ':data-ghost' => 1, 'value' => isset($params['ghost_value']) ? $params['ghost_value'] : ''));
}
$params['type'] = 'checkbox';
if(!array_key_exists('brackets', $params) OR $params['brackets'] === true){
$params['name'] = $params['name'].'[]';
}
if(!empty($params['options']) AND is_array($params['options'])){
$id = $params['id'].'__#';
foreach($params['options'] as $value => $label){
unset($params['checked']);
if(isset($params['values']) AND in_array($value, (array)$params['values'])){
$params['checked'] = 'checked';
}
$params['value'] = $value;
$params['id'] = self::_field_uid($id);
$item = array();
$item[] = self::_concat($params, $attributes, '<input ', ' />');
if(!empty($params['label_input'])){
$label = array_pop($item).$label;
}
$item[] = self::label(array('text' => $label, 'class' => 'gcore-label', 'for' => $params['id']), $params);
$tags[] = self::container('div', implode("\n", $item), array('class' => 'gcore-checkbox-item', 'id' => 'fitem__#'));
}
$params['id'] = '';
}
break;
case 'checkbox':
$attributes = array('type', 'name', 'id', 'class', 'title', 'value', 'style', 'checked', 'onclick', 'onchange', 'alt');
if(!empty($params['ghost']) AND (bool)$params['ghost'] === true){
$tags[] = self::input($params['name'], array('type' => 'hidden', 'id' => $params['id'].'_ghost', ':data-ghost' => 1, 'value' => isset($params['ghost_value']) ? $params['ghost_value'] : ''));
}
if(array_key_exists('checked', $params) AND empty($params['checked'])){
unset($params['checked']);
}
if(array_key_exists('checked', $params) AND !empty($params['checked'])){
$params['checked'] = 'checked';
}
if(array_key_exists('secondary_label', $params) AND !empty($params['secondary_label'])){
$item = array();
$item[] = self::_concat($params, $attributes, '<input ', ' />');
$item[] = self::label(array('text' => $params['secondary_label'], 'class' => 'gcore-label', 'for' => $params['id']), $params);
$tags[] = self::container('div', implode("\n", $item), array('class' => 'gcore-checkbox-item', 'id' => 'fitem__#'));
}else{
$tags[] = self::_concat($params, $attributes, '<input ', ' />');
}
break;
case 'file':
$attributes = array('type', 'name', 'id', 'class', 'title', 'style', 'onclick', 'onchange', 'alt', 'multiple');
if(!empty($params['ghost']) AND (bool)$params['ghost'] === true){
$tags[] = self::input($params['name'], array('type' => 'hidden', 'id' => $params['id'].'_ghost', ':data-ghost' => 1, 'value' => isset($params['ghost_value']) ? $params['ghost_value'] : ''));
}
if(!empty($params['multiple']) AND (bool)$params['multiple'] === true){
$params['multiple'] = 'multiple';
}else{
if(isset($params['multiple'])){
unset($params['multiple']);
}
}
$tags[] = self::_concat($params, $attributes, '<input ', ' />');
break;
case 'multi':
$layout = !empty($params['layout']) ? '-'.$params['layout'] : '';
if(!empty($params['inputs'])){
foreach($params['inputs'] as $sub_input){
if(!empty($sub_input['name'])){
//$tags[] = self::formInput($sub_input['name'], $sub_input, array('class' => 'gcore-subinput-container'.$layout, 'id' => 'fitem__#'));
$sub_input['sub_input'] = true;
$postfix = !empty($sub_input['id']) ? '-'.$sub_input['id'] : '__#';
$generated_input = self::formInput($sub_input['name'], $sub_input, array('class' => 'gcore-subfield-container'.$layout, 'id' => 'fld'.$postfix));
$tags[] = self::container('div', $generated_input, array('class' => 'gcore-subinput-container'.$layout, 'id' => 'fitem'.$postfix));
}
}
}
break;
case 'custom':
$tags[] = (isset($params['code']) AND strlen($params['code'])) ? $params['code'] : '';
break;
case 'text':
case 'password':
default:
$attributes = array('type', 'name', 'id', 'value', 'class', 'size', 'maxlength', 'title', 'style', 'onclick', 'onchange', 'alt', 'placeholder', 'readonly');
$params['id'] = self::_field_uid($params['id']);
//clear empty parameters if exists
if(isset($params['size']) AND empty($params['size'])){
unset($params['size']);
}
if(isset($params['maxlength']) AND empty($params['maxlength'])){
unset($params['maxlength']);
}
$tags[] = self::_concat($params, $attributes, '<input ', ' />');
break;
}
//self::$last_field_params = $params;
$return = implode("\n", $tags);
if(!empty($params['beforeInput'])){
$return = $params['beforeInput'].$return;
}
if(!empty($params['afterInput'])){
$return = $return.$params['afterInput'];
}
return $return;
}
public static function addClass($new, $orig){
if(is_array($orig)){
return trim(implode(' ', array_merge($orig, (array)$new)));
}else{
$orig = array_filter(explode(' ', $orig));
return trim(implode(' ', array_merge($orig, (array)$new)));
}
}
public static function removeClass($rem, $orig){
if(is_array($orig)){
foreach($orig as $k => $class){
if(in_array($class, $rem)){
unset($orig[$k]);
}
}
return implode(' ', $orig);
}else{
$orig = array_filter(explode(' ', $orig));
return self::removeClass($rem, $orig);
}
}
private static function _check_args($args){
$name = $args[0];
$params = $args[1];
//make sure that we have a field name and type set
if(empty($name) OR empty($params['type'])){
return null;
}
self::_fix_field_params($name, $params);
$params['name'] = $name;
return array(0 => $name, 1 => $params);
}
public function __call($name, $args){
if(in_array($name, array('input', 'formInput', 'formLine'))){
$args = self::_check_args($args);
if(is_null($args)){
return '';
}
}
return parent::__call($name, $args);
}
public static function __callStatic($name, $args){
if(in_array($name, array('input', 'formInput', 'formLine'))){
$args = self::_check_args($args);
if(is_null($args)){
return '';
}
}
return parent::__callStatic($name, $args);
}
}