00001 <?php
00030 function xhtml_start_tag($tag, $attrs=null) {
00031 $params = is_array($tag) ? $tag : Util::getParams(func_get_args());
00032 $xw = new xmlWriter();
00033 $xw->openMemory();
00034
00035 if(APP_CHARSET != 'UTF-8'){
00036 $params = utf8_encode($params);
00037 }
00038 if(isset($params[1]) && is_array($params[1])) {
00039 $attrs = $params[1];
00040 unset($params[1]);
00041 $attrs = array_merge($attrs, $params);
00042 } else {
00043 $attrs = $params;
00044 }
00045
00046 $xw->startElement($tag);
00047
00048 foreach ($attrs as $k => $v) {
00049 if (! is_numeric($k)) {
00050 $xw->writeAttribute($k, $v);
00051 }
00052 }
00053
00054 return $xw->outputMemory(true) . '>';
00055 }
00056
00063 function xhtml_end_tag($tag) {
00064 $params = is_array($tag) ? $tag : Util::getParams(func_get_args());
00065 $tag = $params[0];
00066 return "</$tag>";
00067 }
00068
00084 function xhtml_tag($tag, $attrs=null) {
00085 $params = is_array($tag) ? $tag : Util::getParams(func_get_args());
00086 $xw = new xmlWriter();
00087 $xw->openMemory();
00088
00089 if(APP_CHARSET != 'UTF-8'){
00090 $params = utf8_encode($params);
00091 }
00092
00096 $short_close = array('input', 'link', 'img');
00100 $need_cdata = array('script', 'style','a');
00101
00102 $tag = $params[0];
00103 unset($params[0]);
00104
00108 if(isset($params['content'])) {
00109 $content = $params['content'];
00110 unset($params['content']);
00111 } else {
00112 $content = '';
00113 }
00114
00115 if(isset($params[1]) && is_array($params[1])) {
00116 $attrs = $params[1];
00117 unset($params[1]);
00118 $attrs = array_merge($attrs, $params);
00119 } else {
00120 $attrs = $params;
00121 }
00122 $xw->startElement($tag);
00123 foreach($attrs as $k=>$v) {
00124 if (! is_numeric($k)) {
00125 $xw->writeAttribute($k, $v);
00126 }
00127 }
00128 if($content || !in_array($tag, $short_close)) {
00129 if($tag == 'select' || in_array($tag, $need_cdata)) {
00130 $xw->writeRaw($content);
00131 } else {
00132 $xw->text($content);
00133 }
00134 }
00135 $xw->endElement();
00136 return $xw->outputMemory(true);
00137 }
00138
00150 function link_to($action, $text=''){
00151 $params = is_array($action) ? $action : Util::getParams(func_get_args());
00152
00153 if(isset($params['confirm'])&&$params['confirm']){
00154 if(isset($params['onclick'])) {
00155 $params['onclick'] = "if(!confirm(\"{$params['confirm']}\")) { return false; }; ".$params['onclick'];
00156 } else {
00157 $params['onclick'] = "if(!confirm(\"{$params['confirm']}\")) { return false; };";
00158 }
00159 unset($params['confirm']);
00160 }
00161
00162 if(isset($params['text'])) {
00163 $params[1] = $params['text'];
00164 unset($params['text']);
00165 }
00166
00167 if(!isset($params[1])) {
00168 $text = strtr($params[0], '_/', ' ');
00169 $params[1] = ucwords($text);
00170 }
00171
00172 $params['href'] = get_kumbia_url($params[0]);
00173
00174 return xhtml_tag('a', $params, "content: {$params[1]}");
00175 }
00176
00187 function link_to_action($action, $text=''){
00188 $params = is_array($action) ? $action : Util::getParams(func_get_args());
00189
00190 if(isset($params['confirm'])&&$params['confirm']){
00191 if(isset($params['onclick'])) {
00192 $params['onclick'] = "if(!confirm(\"{$params['confirm']}\")) { return false; }; ".$params['onclick'];
00193 } else {
00194 $params['onclick'] = "if(!confirm(\"{$params['confirm']}\")) { return false; };";
00195 }
00196 unset($params['confirm']);
00197 }
00198
00199 if(isset($params['text'])) {
00200 $params[1] = $params['text'];
00201 unset($params['text']);
00202 }
00203
00204 if(!isset($params[1])) {
00205 $text = strtr($params[0], '_/', ' ');
00206 $params[1] = ucwords($text);
00207 }
00208
00209 $module_name = Router::get('module');
00210 $controller_name = Router::get('controller');
00211 if($module_name) {
00212 $path = "$module_name/$controller_name";
00213 } else {
00214 $path = $controller_name;
00215 }
00216 $params['href'] = get_kumbia_url("$path/{$params[0]}");
00217
00218 return xhtml_tag('a', $params, "content: {$params[1]}");
00219 }
00220
00235 function link_to_remote($action){
00236 $params = is_array($action) ? $action : Util::getParams(func_get_args());
00237
00238 if(!isset($params['update'])||!$params['update']){
00239 $update = isset($params[2]) ? $params[2] : "";
00240 } else {
00241 $update = $params['update'];
00242 }
00243 if(!isset($params['text'])||!$params['text']){
00244 $text = isset($params[1]) ? $params[1] : "";
00245 } else {
00246 $text = $params['text'];
00247 }
00248 if(!$text){
00249 $text = $params[0];
00250 }
00251 if(!isset($params['action'])||!$params['action']){
00252 $action = $params[0];
00253 } else {
00254 $action = $params['action'];
00255 }
00256
00257 $code = '';
00258 if(isset($params['confirm'])){
00259 $code.= "if(confirm('{$params['confirm']}')) {";
00260 }
00261 $code.= "new AJAX.viewRequest({action: '$action', container: '$update'";
00262
00263 $call = array();
00264 if(isset($params['before'])){
00265 $call["before"] = "before: function(){ {$params['before']} }";
00266 }
00267 if(isset($params['oncomplete'])){
00268 $call["oncomplete"] = "oncomplete: function(){ {$params['oncomplete']} }";
00269 }
00270 if(isset($params['success'])){
00271 $call["success"] = "success: function(){ {$params['success']} }";
00272 }
00273 if(count($call)){
00274 $code.=", callbacks: { ";
00275 $code.=join(",", $call);
00276 $code.="}";
00277 }
00278 $code.="})";
00279 if(isset($params['confirm'])){
00280 $code.=" }";
00281 }
00282 $code.="; return false;";
00283
00284 $params['onclick'] = $code;
00285 $params['href'] = '#';
00286
00287 unset($params['action']);
00288 unset($params['before']);
00289 unset($params['oncomplete']);
00290 unset($params['success']);
00291 unset($params['loading']);
00292 unset($params['update']);
00293 unset($params['confirm']);
00294
00295 return xhtml_tag('a',$params, "content: $text");
00296 }
00297
00308 function javascript_include_tag($src=''){
00309 $params = is_array($src) ? $src : Util::getParams(func_get_args());
00310
00311 if(isset($params['cache']) && $params['cache']=='false') {
00312 $cache = false;
00313 unset($params['cache']);
00314 } else {
00315 $cache = true;
00316 }
00317
00318 if(!isset($params[0])) {
00319 $params[0] = Router::get('controller');
00320 }
00321
00322 $code = '';
00323 foreach($params as $src) {
00324 $src.=".js";
00325 if(!$cache) {
00326 $src.="?nocache=".md5(uniqid());
00327 }
00328 $src = PUBLIC_PATH."javascript/$src";
00329 $code.=xhtml_tag('script', $params, 'type: text/javascript', "src: $src");
00330 }
00331
00332 return $code;
00333 }
00334
00341 function javascript_library_tag($src){
00342 $params = is_array($src) ? $src : Util::getParams(func_get_args());
00343 $code = '';
00344 foreach($params as $src) {
00345 $src = PUBLIC_PATH."javascript/kumbia/$src.js";
00346 $code.=xhtml_tag('script', 'type: text/javascript', "src: $src");
00347 }
00348 return $code;
00349 }
00350
00361 function stylesheet_link_tag($name){
00362 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00363 $params['rel'] = 'stylesheet';
00364 $params['type'] = 'text/css';
00365
00366 $kb = substr(PUBLIC_PATH, 0, strlen(PUBLIC_PATH)-1);
00367 $code = '';
00368 for($i=0; isset($params[$i]); $i++){
00369 $src = $params[$i];
00370 $params['href'] = PUBLIC_PATH."css/$src.css";
00371 $code.=xhtml_tag('link',$params);
00372 }
00373
00374 if(!$i){
00375 $src = $_REQUEST['action'];
00376 $params['href'] = PUBLIC_PATH."css/$src.css";
00377 $code.=xhtml_tag('link',$params);
00378 }
00379 Kumbia::$data['KUMBIA_CSS_IMPORTS'][]=$code;
00380 return;
00381 }
00382
00394 function img_tag($img){
00395 $params = is_array($img) ? $img : Util::getParams(func_get_args());
00396
00397 if(!isset($params['src']) && isset($params[0])){
00398 $params['src'] = PUBLIC_PATH."img/{$params[0]}";
00399 }
00400 if(!isset($params['alt'])) {
00401 $params['alt'] = '';
00402 }
00403
00404 if(isset($params['drag'])&&$params['drag']) {
00405 $drag = true;
00406 unset($params['drag']);
00407 } else {
00408 $drag = false;
00409 }
00410 if(isset($params['reflect'])&&$params['reflect']) {
00411 $reflect = true;
00412 unset($params['reflect']);
00413 } else{
00414 $reflect = false;
00415 }
00416
00417 $code = xhtml_tag('img', $params);
00418 if($drag){
00419 $code.=xhtml_tag('script', 'type: text/javascript', "content: new Draggable('{$atts['id']}', {revert:true})");
00420 }
00421 if($reflect){
00422 $code.=xhtml_tag('script', 'type: text/javascript', "content: new Reflector.reflect('{$atts['id']}')");
00423 }
00424
00425 return $code;
00426 }
00427
00440 function form_remote_tag($data){
00441 $params = is_array($data) ? $data : Util::getParams(func_get_args());
00442
00443 if(!isset($params['action'])||!$params['action']) {
00444 $params['action'] = $params[0];
00445 }
00446 if(!isset($params['method'])||!$params['method']) {
00447 $params['method'] = 'post';
00448 }
00449
00450 if(isset($params['update'])) {
00451 $update = $params['update'];
00452 unset($params['update']);
00453 } else {
00454 $update = '';
00455 }
00456
00457 $callbacks = array();
00458 $id = Router::get('id');
00459 if(isset($params['complete'])&&$params['complete']){
00460 $callbacks[] = " complete: function(){ ".$params['complete']." }";
00461 unset($params['complete']);
00462 }
00463 if(isset($params['before'])&&$params['before']){
00464 $callbacks[] = " before: function(){ ".$params['before']." }";
00465 unset($params['before']);
00466 }
00467 if(isset($params['success'])&&$params['success']){
00468 $callbacks[] = " success: function(){ ".$params['success']." }";
00469 unset($params['sucess']);
00470 }
00471 if(isset($params['required'])&&$params['required']){
00472 $requiredFields = Util::encomillar($params['required']);
00473 $params['onsubmit'] = "if(validaForm(this,new Array({$requiredFields}))){ return ajaxRemoteForm(this,\"{$update}\",{".join(",",$callbacks)."}); } else{ return false; }";
00474 unset($params['required']);
00475 } else{
00476 $params['onsubmit'] = "return ajaxRemoteForm(this, \"{$update}\", { ".join(",", $callbacks)." });";
00477 }
00478 $params['action'] = get_kumbia_url("{$params['action']}/$id");
00479
00480 return xhtml_start_tag('form', $params);
00481 }
00482
00483
00493 function form_tag($action){
00494 $params = is_array($action) ? $action : Util::getParams(func_get_args());
00495 if(!isset($params['action']) && isset($params[0])) {
00496 $params['action'] = $params[0];
00497 }
00498 if(isset($params['action'])) {
00499 $params['action'] = get_kumbia_url("{$params['action']}");
00500 }
00501 if(!isset($params['method'])||!$params['method']) {
00502 $params['method'] = "post";
00503 }
00504 if(isset($params['confirm'])&&$params['confirm']){
00505 if(isset($params['onsubmit'])) {
00506 $params['onsubmit'].=";if(!confirm(\"{$params['confirm']}\")) { return false; }";
00507 } else {
00508 $params['onsubmit'] = "if(!confirm(\"{$params['confirm']}\")) { return false; }";
00509 }
00510 unset($params['confirm']);
00511 }
00512 return xhtml_start_tag('form', $params);
00513 }
00514
00515
00516
00522 function end_form_tag(){
00523 $str = "</form>\r\n";
00524 return $str;
00525 }
00526
00533 function submit_tag($caption){
00534 $params = is_array($caption) ? $caption : Util::getParams(func_get_args());
00535 if(isset($params['caption'])) {
00536 $params['value'] = $params['caption'];
00537 unset($params['caption']);
00538 } elseif(isset($params[0])) {
00539 $params['value'] = $params[0];
00540 }
00541 return xhtml_tag('input', $params, 'type: submit');
00542 }
00543
00557 function submit_remote_tag($caption){
00558 $params = is_array($caption) ? $caption : Util::getParams(func_get_args());
00559
00560 if(isset($params['caption'])) {
00561 $params['value'] = $params['caption'];
00562 unset($params['caption']);
00563 } elseif(isset($params[0])) {
00564 $params['value'] = $params[0];
00565 }
00566
00567 if(isset($params['update'])) {
00568 $update = $params['update'];
00569 unset($params['update']);
00570 } else {
00571 $update = '';
00572 }
00573
00574 $callbacks = array();
00575 if(isset($params['complete']) && $params['complete']){
00576 $callbacks[] = " complete: function(){ ".$params['complete']." }";
00577 unset($params['complete']);
00578 }
00579 if(isset($params['before']) && $params['before']){
00580 $callbacks[] = " before: function(){ ".$params['before']." }";
00581 unset($params['before']);
00582 }
00583 if(isset($params['success']) && $params['success']){
00584 $callbacks[] = " success: function(){ ".$params['success']." }";
00585 unset($params['success']);
00586 }
00587
00588 if(isset($params['onclick'])) {
00589 $params['onclick'].= "; return ajaxRemoteForm(this.form, \"$update\", { ".join(",", $callbacks)." });";
00590 } else {
00591 $params['onclick'] = "return ajaxRemoteForm(this.form, \"$update\", { ".join(",", $callbacks)." });";
00592 }
00593
00594 return xhtml_tag('input', $params, 'type: submit');
00595 }
00596
00606 function submit_image_tag($caption, $src=''){
00607 $params = is_array($caption) ? $caption : Util::getParams(func_get_args());
00608 if(isset($params['caption'])) {
00609 $params['value'] = $params['caption'];
00610 unset($params['caption']);
00611 } elseif(isset($params[0])) {
00612 $params['value'] = $params[0];
00613 }
00614 if(!isset($params['src']) && isset($params[1])) {
00615 $params['src'] = PUBLIC_PATH.'/'.$params[1];
00616 }
00617 return xhtml_tag('input', $params, 'type: image');
00618 }
00619
00628 function button_tag($caption=''){
00629 $params = is_array($caption) ? $caption : Util::getParams(func_get_args());
00630 if(isset($params['caption'])) {
00631 $params['value'] = $params['caption'];
00632 unset($params['caption']);
00633 } elseif(isset($params[0])) {
00634 $params['value'] = $params[0];
00635 }
00636 return xhtml_tag('input', $params, 'type: button');
00637 }
00638
00648 function get_value_from_action($name){
00649 $p = explode('.', $name);
00650 if(count($p)>1) {
00651 $value = get_value_from_action($p[0]);
00652 if(is_object($value) && isset($value->$p[1])) {
00653 return $value->$p[1];
00654 }elseif(is_array($value) && isset($value[$p[1]])) {
00655 return $value[$p[1]];
00656 }else {
00657 return '';
00658 }
00659 } else {
00660 $controller = Dispatcher::get_controller();
00661
00662 if(isset($controller->$name)){
00663 return $controller->$name;
00664 } else {
00665 return "";
00666 }
00667 }
00668 }
00669
00676 function get_id_and_name($value){
00677 $p = explode('.', $value);
00678 if(count($p)>1) {
00679 $id = "{$p[0]}_{$p[1]}";
00680 $name = "{$p[0]}[{$p[1]}]";
00681 } else {
00682 $id = $name = $value;
00683 }
00684 return array('id'=>$id, 'name'=>$name);
00685 }
00686
00687 # Helpers
00688
00693 function input_field_tag($name) {
00694 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00698 if(isset($params[0])) {
00699 $params = array_merge(get_id_and_name($params[0]), $params);
00700 $value = get_value_from_action($params[0]);
00701 if(!isset($params['value'])) {
00702 if($value) {
00703 $params['value'] = $value;
00704 }
00705 } elseif($params['type']=='radio' || $params['type']=='checkbox') {
00706 if($params['value']==$value) {
00707 $params['checked'] = 'checked';
00708 }
00709 }
00710 }
00711 return xhtml_tag('input', $params);
00712 }
00713
00720 function text_field_tag($name){
00721 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00722 $params['type'] = 'text';
00723 return input_field_tag($params);
00724 }
00725
00732 function checkbox_field_tag($name){
00733 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00734 $params['type'] = 'checkbox';
00735 return input_field_tag($params);
00736 }
00737
00744 function numeric_field_tag($name){
00745 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00746 if(!isset($params['onkeydown'])) {
00747 $params['onkeydown'] = "valNumeric(event)";
00748 } else {
00749 $params['onkeydown'].=";valNumeric(event)";
00750 }
00751 return text_field_tag($params);
00752 }
00753
00760 function textupper_field_tag($name){
00761 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00762 if(!isset($params['onblur'])) {
00763 $params['onblur'] = "keyUpper2(this)";
00764 } else {
00765 $params['onblur'].=";keyUpper2(this)";
00766 }
00767 return text_field_tag($params);
00768 }
00769
00780 function date_field_tag($name){
00781 static $i = false;
00782 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00783
00784 if(isset($params['format'])){
00785 $format = $params['format'];
00786 unset($params['format']);
00787 } else {
00788 $format = "%d-%m-%Y";
00789 }
00790 if(isset($params['theme'])){
00791 $theme = $params['theme'];
00792 unset($params['theme']);
00793 } else {
00794 $theme = "theme-1";
00795 }
00796 if(isset($params['language'])){
00797 $language = $params['language'];
00798 unset($params['language']);
00799 } else {
00800 $language = "calendar-es";
00801 }
00802
00803 if(isset($params[0])) {
00804 $params = array_merge(get_id_and_name($params[0]), $params);
00805 }
00806
00807 $code = '';
00808 if($i == false){
00809 $i = true;
00810 $code .= javascript_library_tag('jscalendar/calendar');
00811 $code .= javascript_library_tag('jscalendar/calendar-setup');
00812 $code .= javascript_library_tag("jscalendar/$language");
00813 }
00814
00815 $code .= text_field_tag($params);
00816 $code .= img_tag("calendar.gif","id: ".$params['id']."tigger","style: cursor: pointer;")."\n";
00817
00818
00819 $code .= stylesheet_link_tag("style-calendar/$theme");
00820 $script= "Calendar.setup({ inputField:'".$params['id']."', ifFormat:'".$format."', daFormat:'".$format."', button:'".$params['id']."tigger"."'}); ";
00821 $code .= xhtml_tag('script', 'type: text/javascript', "content: $script");
00822
00823 return $code;
00824 }
00825
00832 function file_field_tag($name){
00833 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00834 $params['type'] = 'file';
00835 return input_field_tag($params);
00836 }
00837
00844 function radio_field_tag($name){
00845 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00846 $params['type'] = 'radio';
00847 return input_field_tag($params);
00848 }
00849
00857 function textarea_tag($name, $value=null){
00858 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00862 $params = array_merge(get_id_and_name($name), $params);
00863
00864 if(isset($params[1]))
00865 $value = $params[1];
00866 else
00867 $value = get_value_from_action($name);
00868
00869 $value = htmlspecialchars($value, ENT_QUOTES, APP_CHARSET);
00870
00871 if(!isset($params['rows'])) {
00872 $params['rows'] = '25';
00873 }
00874 if(!isset($params['cols'])) {
00875 $params['cols'] = '50';
00876 }
00877
00878 $code = xhtml_start_tag('textarea', $params);
00879 $code.= $value;
00880 $code.= xhtml_end_tag('textarea');
00881 return $code;
00882 }
00883
00890 function password_field_tag($name){
00891 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00892 $params['type'] = 'password';
00893 return input_field_tag($params);
00894 }
00895
00902 function hidden_field_tag($name){
00903 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00904 $params['type'] = 'hidden';
00905 return input_field_tag($params);
00906 }
00907
00930 function select_tag($name, $data=array()){
00931 $params = is_array($name) ? $name : Util::getParams(func_get_args());
00932
00936 $params = array_merge(get_id_and_name($params[0]), $params);
00937 if(!isset($params['selected'])) {
00938 $value = get_value_from_action($params[0]);
00939 if($value) {
00940 $params['selected'] = $value;
00941 }
00942 }
00943
00944 if(!isset($params[1])) {
00945 return xhtml_start_tag('select', $params);
00946 }
00947
00948 if(isset($params['selected'])) {
00949 $selected = $params['selected'];
00950 unset($params['selected']);
00951 }
00952 if(isset($params['separator'])) {
00953 $separator = $params['separator'];
00954 unset($params['separator']);
00955 } else {
00956 $separator = '';
00957 }
00958
00959 $options = '';
00960 if(isset($params['include_blank'])) {
00961 $options.="\t".xhtml_tag('option', array('value'=>''), "content: {$params['include_blank']}");
00962 unset($params['include_blank']);
00963 }
00964
00965 if(is_array($params[1])){
00966 if(isset($params[1][0]) && is_object($params[1][0])){
00967 if(isset($params['option'])) {
00968 $fields = array_map('trim', explode(',', $params['option']));
00969 unset($params['option']);
00970 } else {
00971 $fields = array('id');
00972 }
00973
00974 foreach($params[1] as $item) {
00975 $value = $item->primary_key[0];
00976 $vals = array();
00977 foreach($fields as $option) {
00978 array_push($vals, $item->$option);
00979 }
00980
00981 $k = $item->$value;
00982 $v = implode($vals, $separator);
00983
00984 if(isset($selected) && $selected==$k) {
00985 $options.="\t".option_tag($k, $v, 'selected: selected');
00986 } else {
00987 $options.="\t".option_tag($k, $v);
00988 }
00989 }
00990 } else {
00991 foreach($params[1] as $k=>$v){
00992 if(isset($selected) && $selected==$k) {
00993 $options.= option_tag($k, $v, 'selected: selected');
00994 } else {
00995 $options.= option_tag($k, $v);
00996 }
00997 }
00998 }
00999 } elseif(is_string($params[1])) {
01000 if(isset($params['option'])) {
01001 $fields = array_map('trim', explode(',', $params['option']));
01002 unset($params['option']);
01003 } else {
01004 $fields = array('id');
01005 }
01006
01010 $m = ActiveRecord::get($params[1]);
01011
01012 if(isset($params['value'])) {
01013 $value = $params['value'];
01014 unset($params['value']);
01015 } else {
01016 $m2 = clone $m;
01017 $m2->dump_model();
01018 $value = $m2->primary_key[0];
01019 }
01020
01021 if(isset($params[2]) && $params[2]) {
01022 $items = $m2->find_all_by_sql($params[2]);
01023 } else {
01027 $find_args = array();
01028
01032 if(isset($params['conditions'])) {
01033 array_push($find_args, "conditions: {$params['conditions']}");
01034 unset($params['conditions']);
01035 }
01036 if(isset($params['columns'])) {
01037 array_push($find_args, "columns: {$params['columns']}");
01038 unset($params['columns']);
01039 }
01040 if(isset($params['join'])) {
01041 array_push($find_args, "join: {$params['join']}");
01042 unset($params['join']);
01043 }
01044 if(isset($params['group'])) {
01045 array_push($find_args, "group: {$params['group']}");
01046 unset($params['group']);
01047 }
01048 if(isset($params['having'])) {
01049 array_push($find_args, "having: {$params['having']}");
01050 unset($params['having']);
01051 }
01052 if(isset($params['order'])) {
01053 array_push($find_args, "order: {$params['order']}");
01054 unset($params['order']);
01055 }
01056 if(isset($params['distinct'])) {
01057 array_push($find_args, "distinct: {$params['distinct']}");
01058 unset($params['distinct']);
01059 }
01060 if(isset($params['limit'])) {
01061 array_push($find_args, "limit: {$params['limit']}");
01062 unset($params['limit']);
01063 }
01064 if(isset($params['offset'])) {
01065 array_push($find_args, "limit: {$params['offset']}");
01066 unset($params['offset']);
01067 }
01068
01069 $items = call_user_func_array(array($m2, 'find'), $find_args);
01070 }
01071
01072 foreach($items as $item) {
01073 $vals = array();
01074 foreach($fields as $option) {
01075 array_push($vals, $item->$option);
01076 }
01077
01078 $k = $item->$value;
01079 $v = implode($vals, $separator);
01080
01081 if(isset($selected) && $selected==$k) {
01082 $options.="\t".option_tag($k, $v, 'selected: selected');
01083 } else {
01084 $options.="\t".option_tag($k, $v);
01085 }
01086 }
01087 }
01088 return xhtml_tag('select', $params, "content: $options");
01089 }
01090
01098 function option_tag($value, $text=''){
01099 $params = is_array($value) ? $value : Util::getParams(func_get_args());
01100
01101 $params['value'] = $params[0];
01102 if(isset($params[1])) {
01103 $text = $params[1];
01104 } else {
01105 $text = '';
01106 }
01107 return xhtml_tag('option', $params, "content: $text");
01108 }
01109
01110
01117 function upload_image_tag($name){
01118 $opts = is_array($name) ? $name : Util::getParams(func_get_args());
01119 $code = '';
01120
01121 if(isset($opts[0])){
01122 $opts['name'] = $opts[0];
01123 } else {
01124 $opts['name'] = '';
01125 }
01126 if(isset($opts['value'])){
01127 $opts['value'] = $opts[1];
01128 } else {
01129 $opts['value'] = '';
01130 }
01131
01132 $code.="<span id='{$opts['name']}_span_pre'>
01133 <select name='{$opts[0]}' id='{$opts[0]}' onchange='show_upload_image(this)'>";
01134 $code.="<option value='@'>Seleccione...\n";
01135 foreach(scandir("public/img/upload") as $file){
01136 if($file!='index.html'&&$file!='.'&&$file!='..'&&$file!='Thumbs.db'&&$file!='desktop.ini'){
01137 $nfile = str_replace('.gif', '', $file);
01138 $nfile = str_replace('.jpg', '', $nfile);
01139 $nfile = str_replace('.png', '', $nfile);
01140 $nfile = str_replace('.bmp', '', $nfile);
01141 $nfile = strtr($nfile, '_', ' ');
01142 $nfile = ucfirst($nfile);
01143 if(urlencode("upload/$file")==$opts['value']){
01144 $code.="<option selected='selected' value='upload/$file' style='background: #EAEAEA'>$nfile</option>\n";
01145 } else {
01146 $code.="<option value='upload/$file'>$nfile</option>\n";
01147 }
01148 }
01149 }
01150 $code.="</select> <a href='#{$opts['name']}_up' name='{$opts['name']}_up' id='{$opts['name']}_up' onclick='enable_upload_file(\"{$opts['name']}\")'>Subir Imagen</a></span>
01151 <span style='display:none' id='{$opts['name']}_span'>
01152 <input type='file' id='{$opts['name']}_file' onchange='upload_file(\"{$opts['name']}\")' />
01153 <a href='#{$opts['name']}_can' name='{$opts['name']}_can' id='{$opts['name']}_can' style='color:red' onclick='cancel_upload_file(\"{$opts['name']}\")'>Cancelar</a></span>
01154 ";
01155 if(!isset($opts['width'])) {
01156 $opts['width'] = 128;
01157 }
01158 if(!isset($opts['value'])){
01159 $opts['style']="border: 1px solid black;margin: 5px;".$opts['value'];
01160 } else {
01161 $opts['style']="border: 1px solid black;display:none;margin: 5px;".$opts['value'];
01162 }
01163 $code.="<div>".img_tag(urldecode($opts['value']), 'width: '.$opts['width'], 'style: '.$opts['style'], 'id: '.$opts['name']."_im")."</div>";
01164 return $code;
01165 }
01166
01176 function set_droppable($obj, $action=''){
01177 $params = is_array($obj) ? $obj : Util::getParams(func_get_args());
01178 if(!isset($params['name']) || !$params['name']){
01179 $params['name'] = $params[0];
01180 }
01181 if(!isset($params['action']) || !$params['action']){
01182 $params['action'] = $params[1];
01183 }
01184 return xhtml_tag('script', 'type: text/javascript', "content: Droppables.add('{$params['name']}', {hoverclass: '{$params['hover_class']}',onDrop:{$params['action']}})");
01185 }
01186
01187 function tr_break($x=''){
01188 static $l;
01189 if($x=='') {
01190 $l = 0;
01191 return;
01192 }
01193 if(!$l) {
01194 $l = 1;
01195 } else {
01196 $l++;
01197 }
01198 if(($l%$x)==0) {
01199 print "</tr><tr>";
01200 }
01201 }
01202
01203 function br_break($x=''){
01204 static $l;
01205 if($x=='') {
01206 $l = 0;
01207 return;
01208 }
01209 if(!$l) {
01210 $l = 1;
01211 } else {
01212 $l++;
01213 }
01214 if(($l%$x)==0) {
01215 print "<br/>\n";
01216 }
01217 }
01222 function tr_color(){
01223 static $i;
01224 if(func_num_args()>1){
01225 $params = Util::getParams(func_get_args());
01226 }
01227 if(!$i) {
01228 $i = 1;
01229 }
01230 print "<tr bgcolor=\"{$params[$i-1]}\"";
01231 if(count($params)==$i) {
01232 $i = 1;
01233 } else {
01234 $i++;
01235 }
01236 if(isset($params)){
01237 if(is_array($params)){
01238 foreach($params as $key => $value){
01239 if(!is_numeric($key)){
01240 print " $key = '$value'";
01241 }
01242 }
01243 }
01244 }
01245 print ">";
01246 }
01253 function tr_color_class(){
01254 static $i;
01255 static $c = true;
01256 $id = "";
01257 $code = "";
01258 $params = Util::getParams(func_get_args());
01259 if(isset($params['id'])){
01260 $id = " id=\"{$params['id']}\"";
01261 }
01262 if($c){
01263 $code = "<tr class='$params[0]' $id";
01264 $c = false;
01265 } else {
01266 $code = "<tr class='$params[1]' $id";
01267 $c = true;
01268 }
01269 $code .= ">";
01270 return $code;
01271 }
01272
01286 function button_to_action($caption, $action='', $classCSS=''){
01287 $params= is_array($caption) ? $caption : Util::getParams(func_get_args());
01288
01289 if(isset($params['caption'])) {
01290 $caption = $params['caption'];
01291 unset($params['caption']);
01292 } elseif(isset($params[0])) {
01293 $caption = $params[0];
01294 } else {
01295 $caption = '';
01296 }
01297 if(isset($params['action'])) {
01298 $action = $params['action'];
01299 unset($params['action']);
01300 } elseif(isset($params[1])) {
01301 $action = $params[1];
01302 } else {
01303 $action = '';
01304 }
01305 if(isset($params[2])) {
01306 $params['class'] = $params[2];
01307 }
01308
01309 if(isset($params['onclick'])) {
01310 $params['onclick'].=';window.location="'.get_kumbia_url($action).'";';
01311 } else {
01312 $params['onclick'] = 'window.location="'.get_kumbia_url($action).'";';
01313 }
01314
01315 return xhtml_tag('button', $params, "content: $caption");
01316 }
01317
01327 function button_to_remote_action($caption, $action='', $classCSS=''){
01328 $opts = is_array($caption) ? $caption : Util::getParams(func_get_args());
01329 if(func_num_args()==2){
01330 $opts['action'] = $opts[1];
01331 $opts['caption'] = $opts[0];
01332 } else {
01333 if(!isset($opts['action'])||!$opts['action']) {
01334 $opts['action'] = $opts[1];
01335 }
01336 if(!isset($opts['caption'])||!$opts['caption']) {
01337 $opts['caption'] = $opts[0];
01338 }
01339 }
01340 if(!isset($opts['update'])){
01341 $opts['update'] = "";
01342 }
01343
01344 if(!isset($opts['success'])){
01345 $opts['success'] = '';
01346 }
01347 if(!isset($opts['before'])){
01348 $opts['before'] = '';
01349 }
01350 if(!isset($opts['complete'])){
01351 $opts['complete'] = '';
01352 }
01353
01354 $code = "<button onclick='AJAX.execute({action:\"{$opts['action']}\", container:\"{$opts['update']}\", callbacks: { success: function(){{$opts['success']}}, before: function(){{$opts['before']}} } })'";
01355 unset($opts['action']);
01356 unset($opts['success']);
01357 unset($opts['before']);
01358 unset($opts['complete']);
01359 foreach($opts as $k => $v){
01360 if(!is_numeric($k)&&$k!='caption'){
01361 $code.=" $k='$v' ";
01362 }
01363 }
01364 $code.=">{$opts['caption']}</button>";
01365 return $code;
01366 }
01367
01383 function updater_select($name, $data=array()){
01384 $params = is_array($name) ? $name : Util::getParams(func_get_args());
01385
01389 if(isset($params[0])) {
01390 $params = array_merge(get_id_and_name($params[0]), $params);
01391 if(!isset($params['selected'])) {
01392 $value = get_value_from_action($params[0]);
01393 if($value) {
01394 $params['selected'] = $value;
01395 }
01396 }
01397 }
01398
01399 if(isset($params['container'])) {
01400 $update = $params['container'];
01401 unset($params['container']);
01402 } elseif(isset($params['update'])) {
01403 $update = $params['update'];
01404 unset($params['update']);
01405 } else {
01406 $update = '';
01407 }
01408
01409 if(isset($params['action'])) {
01410 $action = $params['action'];
01411 unset($params['action']);
01412 } else {
01413 $action = '';
01414 }
01415
01416 $onchange = "AJAX.viewRequest({action: '$action/'+$(\"{$params['id']}\").value, container: '$update'";
01417 $call = array();
01418 if(isset($params['before'])){
01419 $call["before"] = "before: function(){ {$params['before']} }";
01420 unset($params['before']);
01421 }
01422 if(isset($params['oncomplete'])){
01423 $call["oncomplete"] = "oncomplete: function(){ {$params['oncomplete']} }";
01424 unset($params['oncomplete']);
01425 }
01426 if(isset($params['success'])){
01427 $call["success"] = "success: function(){ {$params['success']} }";
01428 unset($params['success']);
01429 }
01430 if(count($call)){
01431 $onchange.=", callbacks: { ";
01432 $onchange.=implode(",", $call);
01433 $onchange.="}";
01434 }
01435 $onchange.="})";
01436
01437 if(isset($params['onchange'])) {
01438 $params['onchange'].=';'.$onchange;
01439 } else {
01440 $params['onchange'] = $onchange;
01441 }
01442
01443 return select_tag($params);
01444 }
01445
01457 function text_field_with_autocomplete($name){
01458 $params = is_array($name) ? $name : Util::getParams(func_get_args());
01459
01463 if(isset($params[0])) {
01464 $params = array_merge(get_id_and_name($params[0]), $params);
01465 if(!isset($params['value'])) {
01466 $value = get_value_from_action($params[0]);
01467 if($value) {
01468 $params['value'] = $value;
01469 }
01470 }
01471 }
01472
01473 $hash = md5(uniqid());
01474
01475 if(isset($params['after_update'])) {
01476 $after_update = $params['after_update'];
01477 unset($params['after_update']);
01478 }else {
01479 $after_update = 'function(){}';
01480 }
01481 if(isset($params['action'])) {
01482 $action = $params['action'];
01483 unset($params['action']);
01484 }else {
01485 $action = '';
01486 }
01487 if(isset($params['message'])) {
01488 $message = $params['message'];
01489 unset($params['message']);
01490 }else {
01491 $message = 'Consultando..';
01492 }
01493
01494 $code = text_field_tag($params);
01495
01496 $code.= "
01497 <span id='indicator$hash' style='display: none'><img src='".PUBLIC_PATH."img/spinner.gif' alt='$message'/></span>
01498 <div id='{$params[0]}_choices' class='autocomplete'></div>
01499 <script type='text/javascript'>
01500 <!-- <![CDATA[
01501 new Ajax.Autocompleter(\"{$params['id']}\", \"{$params['id']}_choices\", \"".get_kumbia_url($action)."\", { minChars: 2, indicator: 'indicator$hash', afterUpdateElement : {$after_update}});
01502 // ]]> -->
01503 </script>
01504 ";
01505 return $code;
01506 }
01507
01513 function xhtml_template($template='template'){
01514 print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
01515 <html xmlns="http://www.w3.org/1999/xhtml">
01516 <head>
01517 <title>Kumbia PHP Framework</title>
01518 <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />';
01519 print stylesheet_link_tag("style", 'use_variables: true');
01520 kumbia::stylesheet_link_tags().
01521 print '</head>
01522 <body class="'.$template.'">';
01523 content();
01524 print '
01525 </body>
01526 </html>';
01527
01528 }
01529
01530 function tab_tag($tabs, $color='green', $width=800){
01531
01532 switch($color){
01533 case 'blue':
01534 $col1 = '#E8E8E8'; $col2 = '#C0c0c0'; $col3 = '#000000';
01535 break;
01536
01537 case 'pink':
01538 $col1 = '#FFE6F2'; $col2 = '#FFCCE4'; $col3 = '#FE1B59';
01539 break;
01540
01541 case 'orange':
01542 $col1 = '#FCE6BC'; $col2 = '#FDF1DB'; $col3 = '#DE950C';
01543 break;
01544
01545 case 'green':
01546 $col2 = '#EAFFD7'; $col1 = '#DAFFB9'; $col3 = '#008000';
01547 break;
01548 }
01549
01550
01551 print "
01552 <table cellspacing=0 cellpadding=0 width=$width>
01553 <tr>";
01554 $p = 1;
01555 $w = $width;
01556 foreach($tabs as $tab){
01557 if($p==1) $color = $col1;
01558 else $color = $col2;
01559 $ww = (int) ($width * 0.22);
01560 $www = (int) ($width * 0.21);
01561 print "<td align='center'
01562 width=$ww style='padding-top:5px;padding-left:5px;padding-right:5px;padding-bottom:-5px'>
01563 <div style='width:$www"."px;border-top:1px solid $col3;border-left:1px solid $col3;border-right:1px solid $col3;background:$color;padding:2px;color:$col3;cursor:pointer' id='spanm_$p'
01564 onclick='showTab($p, this)'
01565 >".$tab['caption']."</div></td>";
01566 $p++;
01567 $w-=$ww;
01568 }
01569 print "
01570 <script>
01571 function showTab(p, obj){
01572 for(i=1;i<=$p-1;i++){
01573 $('tab_'+i).hide();
01574 $('spanm_'+i).style.background = '$col2';
01575 }
01576 $('tab_'+p).show();
01577 obj.style.background = '$col1'
01578 }
01579 </script>
01580 ";
01581 $p = $p + 1;
01582
01583 print "<td width=$w></td><tr>";
01584 print "<td colspan=$p style='border:1px solid $col3;background:$col1;padding:10px'>";
01585 $p = 1;
01586 foreach($tabs as $tab){
01587 if($p!=1){
01588 print "<div id='tab_$p' style='display:none'>";
01589 } else {
01590 print "<div id='tab_$p'>";
01591 }
01592 View::partial($tab['partial']);
01593 print "</div>";
01594 $p++;
01595 }
01596 print "<br></td><td width=30></td>";
01597 print "</table>";
01598 }
01599
01604 function js_execute($s) {
01605 return xhtml_tag('script', 'type: text/javascript', "content: $s");
01606 }
01607
01612 function js_alert($s) {
01613 return js_execute('alert("'.addslashes($s).'");');
01614 }
01615
01624 function time_field_tag($name='') {
01625 $params = is_array($name) ? $name : Util::getParams(func_get_args());
01626
01627 $hours = array ('00' => '00', '01' => '01', '02' => '02', '03' => '03', '04' => '04', '05' => '05' , '06' => '06',
01628 '07' => '07', '08' => '08', '09' => '09', '10' => '10', '11' => '11', '12' => '12', '13' => '13',
01629 '14' => '14', '15' => '15', '16' => '16', '17' => '17', '18' => '18', '19' => '19', '20' => '20',
01630 '21' => '21', '22' => '22', '23' => '23');
01631
01632 $mins = array ('00' => '00', '01' => '01', '02' => '02', '03' => '03', '04' => '04', '05' => '05' , '06' => '06',
01633 '07' => '07', '08' => '08', '09' => '09', '10' => '10', '11' => '11', '12' => '12', '13' => '13',
01634 '14' => '14', '15' => '15', '16' => '16', '17' => '17', '18' => '18', '19' => '19', '20' => '20',
01635 '21' => '21', '22' => '22', '23' => '23', '24' => '24', '25' => '25', '26' => '26', '27' => '27',
01636 '28' => '28', '29' => '29', '30' => '30', '31' => '31', '32' => '32', '33' => '33', '34' => '34',
01637 '35' => '35', '36' => '36', '37' => '37', '38' => '38', '39' => '39', '40' => '40', '41' => '41',
01638 '42' => '42', '43' => '43', '44' => '44', '45' => '45', '46' => '46', '47' => '47', '48' => '48', '49' => '49',
01639 '50' => '50', '51' => '51' , '52' => '52', '53' => '53', '54' => '54', '55' => '55', '56' => '56',
01640 '57' => '57', '58' => '58', '59' => '59' );
01641
01642 if(isset($params['value'])) {
01643 $value = $params['value'];
01644 unset($params['value']);
01645 } else {
01646 $value = get_value_from_action($name);
01647 }
01648
01649 if(!$value) {
01650 $value = '00:00:00';
01651 }
01652
01653 $format = isset($params['format']) ? $params['format']: '%h:%m';
01654 $hidden = hidden_field_tag($params[0], "value: $value");
01655
01656 if($value) {
01657 $value = explode(':', $value);
01658 }
01659
01660 $data = get_id_and_name($params[0]);
01661 $code = '';
01662 $format = explode(':', $format);
01663
01664 $onchange = "
01665 var hora = document.getElementById('{$data['id']}_h');
01666 var min = document.getElementById('{$data['id']}_m');
01667 var seg = document.getElementById('{$data['id']}_s');
01668 var value = '';
01669 if(hora) {
01670 value+=hora.value;
01671 } else {
01672 value+='00';
01673 }
01674 value+=':';
01675 if(min) {
01676 value+=min.value;
01677 } else {
01678 value+='00';
01679 }
01680 value+=':';
01681 if(seg) {
01682 value+=seg.value;
01683 } else {
01684 value+='00';
01685 }
01686 document.getElementById('{$data['id']}').value = value;
01687 ";
01688
01689 if(isset($params['onchange'])) {
01690 $params['onchange'].=$onchange;
01691 } else {
01692 $params['onchange'] = $onchange;
01693 }
01694
01695 foreach($format as $f) {
01696 if($f=='%h') {
01697 if($code) {
01698 $code.=':';
01699 }
01700 if($value) {
01701 $params['selected'] = $value[0];
01702 }
01703 $params[1] = $hours;
01704 $code.=select_tag(array_merge($params, array('name'=>'', 'id'=>$data['id'].'_h')));
01705 unset($params['selected']);
01706 } elseif($f=='%m') {
01707 if($code) {
01708 $code.=':';
01709 }
01710 if($value) {
01711 $params['selected'] = $value[1];
01712 }
01713 $params[1] = $mins;
01714 $code.=select_tag(array_merge($params, array('name'=>'', 'id'=>$data['id'].'_m')));
01715 unset($params['selected']);
01716 } elseif($f=='%s') {
01717 if($code) {
01718 $code.=':';
01719 }
01720 if($value) {
01721 $params['selected'] = $value[2];
01722 }
01723 $params[1] = $mins;
01724 $code.=select_tag(array_merge($params, array('name'=>'', 'id'=>$data['id'].'_s')));
01725 unset($params['selected']);
01726 }
01727 }
01728
01729 return $code.$hidden;
01730 }
01731
01738 function month_field_tag($name) {
01739 $params = is_array($name) ? $name : Util::getParams(func_get_args());
01740 if(isset($params['use_month_numbers'])) {
01741 $meses = array('01'=>'01', '02'=>'02', '03'=>'03', '04'=>'04', '05'=>'05','06'=>'06',
01742 '07'=>'07', '08'=>'08', '09'=>'09', '10'=>'10', '11'=>'11', '12'=>'12');
01743 unset($params['use_month_numbers']);
01744 } else {
01745 $meses = array('01'=>'Enero', '02'=>'Febrero', '03'=>'Marzo', '04'=>'Abril', '05'=>'Mayo','06'=>'Junio',
01746 '07'=>'Julio', '08'=>'Agosto', '09'=>'Septiembre', '10'=>'Octubre', '11'=>'Noviembre', '12'=>'Diciembre');
01747 }
01748 $params[1] = $meses;
01749 return select_tag($params);
01750 }
01751
01763 function swf_tag($data){
01764 $params = is_array($data) ? $data : Util::getParams(func_get_args());
01765
01766 if(!isset($params['data']) && isset($params[0])){
01767 $temp = str_replace(".swf", "", $params[0]);
01768 $params['data'] = PUBLIC_PATH."swf/{$temp}.swf";
01769 unset($params[0]);
01770 }else{
01771 $temp = str_replace(".swf", "", $params['data']);
01772 $params['data'] = PUBLIC_PATH."swf/{$temp}.swf";
01773 }
01774
01775 if(!isset($params['type'])){
01776 $params['type'] = 'application/x-shockwave-flash';
01777 }
01778
01779 if(!isset($params['wmode'])){
01780 $wmode = 'transparent';
01781 }else{
01782 $wmode = $params['wmode'];
01783 unset($params['wmode']);
01784 }
01785
01786 $code = xhtml_start_tag('object', $params);
01787 $code .= '<param name="movie" value="'.$params['data'].'" />';
01788 $code .= '<param name="wmode" value="'.$wmode.'" />';
01789 $code .= xhtml_end_tag('object');
01790
01791 return $code;
01792 }
01799 function get_kumbia_url($url){
01800 $return_url = URL_PATH;
01801
01802 $action = $url;
01803 $module = '';
01804 if(is_array($url)){
01805 $action = $url[0];
01806 if(isset($url['module'])){
01807 $module = $url['module'];
01808 }
01809 if(isset($url['application']) && $url['application']){
01810 $application = $url['application'];
01811 }
01812 }
01813 if($module){
01814 $return_url.=$module.'/';
01815 }
01816 $return_url.=$action;
01817 return $return_url;
01818 }