<?php /* * This file is part of NOALYSS. * * NOALYSS is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * NOALYSS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NOALYSS; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ // Copyright Author Dany De Bontridder danydb@aevalys.eu /*! \file * \brief This class is used to create all the HTML INPUT TYPE */ /*! * \brief class widget This class is used to create all the HTML INPUT TYPE * and some specials which works with javascript like * js_search. * * special value * js_search and js_search_only :you need to add a span widget the name * of the js_* widget + '_label' , the member extra contains cred,deb to * filter the search of cred of deb of a jrn or contains a string with * a list of frd_id. * Possible type * $type * - TEXT * - HIDDEN * - BUTTON in this->js you have the javascript code * - SELECT the options are passed via this->value, this array is * build thanks the make_array function, each array (of the * array) aka row must contains a field value and a field label * - PASSWORD * - CHECKBOX * - RADIO * - TEXTAREA * - RICHTEXT * - FILE * - SPAN */ class HtmlInput { var $type; /*!< $type type of the widget */ var $name; /*!< $name field NAME of the INPUT */ var $value; /*!< $value what the INPUT contains */ var $readOnly; /*!< $readonly true : we cannot change value */ var $size; /*!< $size size of the input */ var $selected; /*!< $selected for SELECT RADIO and CHECKBOX the selected value */ var $table; /*!< $table =1 add the table tag */ var $label; /*!< $label the question before the input */ var $disabled; /*!< $disabled poss. value == true or nothing, to disable INPUT*/ var $extra; /*!< $extra different usage, it depends of the $type */ var $extra2; /*!< $extra2 different usage, it depends of the $type */ var $javascript; /*!< $javascript is the javascript to add to the widget */ var $ctrl; /*!<$ctrl is the control to update (see js_search_card_control) */ var $tabindex; function __construct($p_name="",$p_value="",$p_id="") { $this->name=$p_name; $this->readOnly=false; $this->size=20; $this->width=50; $this->heigh=20; $this->value=$p_value; $this->selected=""; $this->table=0; $this->disabled=false; $this->javascript=""; $this->extra2="all"; $this->attribute=array(); $this->id=$p_id; } function setReadOnly($p_read) { $this->readOnly=$p_read; } /*!\brief set the extra javascript property for the INPUT field *\param $p_name name of the parameter *\param $p_value default value of this parameter */ public function set_attribute($p_name,$p_value) { $this->attribute[]=array($p_name,$p_value); $this->$p_name=$p_value; } /** *@brief you can add attribute to this in javascript * this function is a wrapper and create a script (in js) to modify * "this" (in javascript) with the value of obj->attribute from PHP *@return return string with the javascript code */ public function get_js_attr() { require_once NOALYSS_INCLUDE.'/function_javascript.php'; $attr=""; if ( count($this->attribute) == 0) return ""; /* Add properties at the widget */ for ($i=0;$i< count($this->attribute);$i++) { list($name,$value)=$this->attribute[$i]; $tmp1=sprintf("$('%s').%s='%s';", $this->name, $name, $value); $attr.=$tmp1; } $attr=create_script($attr); return $attr; } /** * Make a JSON object, this method create a javascript object * with the attribute set, it returns a javascript string with the object * @param $p_name : name of the object, can be null. If the name is not null, return * $p_name={} otherwise only the object {} * @return javascript string with the object * @note: there is not check on the key->value, so you could need to escape * special char as quote, single-quote... * @code $a=new IButton() $a->set_attribute('prop','1'); $a->set_attribute('prop','2'); $a->set_attribute('prop','3'); $string = $a->make_object('property'); echo $string => property={'prop':'1','prop2':'2','prop3':'3'}; $string = $a->make_object(null); echo $string => {'prop':'1','prop2':'2','prop3':'3'}; @endcode */ public function make_object($p_name=null) { $name=($p_name != null)?$p_name.'=':''; if ( count($this->attribute) == 0) return $name."{}"; $ret=$name."{"; $and=''; for ($i=0;$i< count($this->attribute);$i++) { list($name,$value)=$this->attribute[$i]; $tmp1=sprintf($and."'%s':'%s'", $name, $value); $ret.=$tmp1; $and=','; } $ret.='}'; return $ret; } //##################################################################### /* Debug */ function debug() { echo "Type ".$this->type."<br>"; echo "name ".$this->name."<br>"; echo "value". $this->value."<br>"; $readonly=($this->readonly==false)?"false":"true"; echo "read only".$readonly."<br>"; } static function submit ($p_name,$p_value,$p_javascript="",$p_class="smallbutton") { return '<INPUT TYPE="SUBMIT" class="'.$p_class.'" NAME="'.$p_name.'" ID="'.$p_name.'_submit_id" VALUE="'.$p_value.'" '.$p_javascript.'>'; } static function button ($p_name,$p_value,$p_javascript="",$p_class="smallbutton") { return '<INPUT TYPE="button" class="'.$p_class.'" NAME="'.$p_name.'" ID="'.$p_name.'" VALUE="'.$p_value.'" '.$p_javascript.'>'; } static function reset ($p_value) { return '<INPUT TYPE="RESET" class="smallbutton" VALUE="'.$p_value.'">'; } static function hidden($p_name,$p_value,$p_id="") { if ($p_id=="") $p_id=$p_name; return '<INPUT TYPE="hidden" id="'.$p_id.'" NAME="'.$p_name.'" VALUE="'.$p_value.'">'; } static function extension() { return self::hidden('plugin_code',$_REQUEST['plugin_code']); } /*!\brief create a button with a ref *\param $p_label the text *\param $p_value the location of the window, *\param $p_name the id of the span *\param $p_javascript javascript for this button *\return string with htmlcode */ static function button_anchor($p_label,$p_value,$p_name="",$p_javascript="",$p_class="button") { $r=sprintf('<span id="%s" > <A class="'.$p_class.'" style="display:inline;" href="%s" %s >%s</A></span>', $p_name, $p_value, $p_javascript, $p_label); return $r; } static function infobulle($p_comment) { $r='<A HREF="#" tabindex="-1" style="display:inline;color:black;background-color:yellow;padding-left:4px;width:2em;padding-right:4px;text-decoration:none;" onmouseover="showBulle(\''.$p_comment.'\')" onclick="showBulle(\''.$p_comment.'\')" onmouseout="hideBulle(0)">?</A>'; return $r; } static function warnbulle($p_comment) { $r='<A HREF="#" tabindex="-1" style="display:inline;color:red;background-color:white;padding-left:4px;padding-right:4px;text-decoration:none;" onmouseover="showBulle(\''.$p_comment.'\')" onclick="showBulle(\''.$p_comment.'\')" onmouseout="hideBulle(0)">Δ</A>'; return $r; } /** * return a string containing the html code for calling the modifyOperation */ static function detail_op($p_jr_id,$p_mesg) { return sprintf('<A class="detail" style="text-decoration:underline;display:inline" HREF="javascript:modifyOperation(%d,%d)">%s</A>', $p_jr_id,dossier::id(),$p_mesg); } /** * @brief return an anchor to view the detail of an action * @param $ag_id * @param $p_mesg * @param $p_modify let you modify an operation * */ static function detail_action($ag_id,$p_mesg,$p_modify=1) { return sprintf('<A class="detail" style="text-decoration:underline;display:inline" HREF="javascript:view_action(%d,%d,%d)">%s</A>', $ag_id,dossier::id(),$p_modify,$p_mesg); } /** * return a string containing the html code for calling the modifyModeleDocument */ static function detail_modele_document($p_id,$p_mesg) { return sprintf('<A class="detail" style="text-decoration:underline" HREF="javascript:modifyModeleDocument(%d,%d)">%s</A>', $p_id,dossier::id(),$p_mesg); } /** * return a string containing the html code for calling the removeStock */ static function remove_stock($p_id,$p_mesg) { return sprintf('<A class="detail" style="text-decoration:underline" HREF="javascript:removeStock(%d,%d)">%s</A>', $p_id,dossier::id(),$p_mesg); } /** * display a div with the history of the card */ static function history_card($f_id,$p_mesg,$p_style="") { $view_history= sprintf('<A class="detail" style="text-decoration:underline;%s" HREF="javascript:view_history_card(\'%s\',\'%s\')" >%s</A>', $p_style,$f_id, dossier::id(), $p_mesg); return $view_history; } /** * display a div with the history of the card */ static function history_card_button($f_id,$p_mesg) { static $e=0; $e++; $js= sprintf('onclick="view_history_card(\'%s\',\'%s\')"', $f_id, dossier::id()); $view_history=HtmlInput::button("hcb"+$e,$p_mesg,$js); return $view_history; } /** * display a div with the history of the account */ static function history_account($p_account,$p_mesg,$p_style="") { $view_history= sprintf('<A class="detail" style="text-decoration:underline;%s" HREF="javascript:view_history_account(\'%s\',\'%s\')" >%s</A>', $p_style,$p_account, dossier::id(), $p_mesg); return $view_history; } /** * return the html code to create an hidden div and a button * to show this DIV. This contains all the available ledgers * for the user in READ or RW *@param $selected is an array of checkbox *@param $div div suffix *@note the choosen ledger are stored in the array r_jrn (_GET) */ static function select_ledger($p_type,$p_selected,$div='') { global $g_user; $r = ''; /* security : filter ledger on user */ $p_array = $g_user->get_ledger($p_type, 3); ob_start(); /* create a hidden div for the ledger */ echo '<div id="div_jrn'.$div.'" >'; echo HtmlInput::title_box(_("Journaux"), $div."jrn_search"); echo '<div style="padding:5px">'; echo '<form method="GET" id="'.$div.'search_frm" onsubmit="return hide_ledger_choice(\''.$div.'search_frm\')">'; echo HtmlInput::hidden('nb_jrn', count($p_array)); echo _('Filtre ').HtmlInput::filter_table($div.'tb_jrn', '0,1,2', 2); echo '<table class="result" id="'.$div.'tb_jrn">'; echo '<tr>'; echo th(_('Nom')); echo th(_('Description')); echo th(_('Type')); echo '</tr>'; echo '<tr>'; echo '<td>'; echo HtmlInput::button('sel_'.$div,_('Inverser la sélection'),' onclick = "toggle_checkbox(\''."{$div}search_frm".'\')"'); echo '</td>'; echo '</tr>'; for ($e=0;$e<count($p_array);$e++) { $row=$p_array[$e]; $r=new ICheckBox($div.'r_jrn'.$e,$row['jrn_def_id']); $idx=$row['jrn_def_id']; if ( $p_selected != null && in_array($row['jrn_def_id'],$p_selected)) { $r->selected=true; } $class=($e%2==0)?' class="even" ':' class="odd" '; echo '<tr '.$class.'>'; echo '<td style="white-space: nowrap">'.$r->input().$row['jrn_def_name'].'</td>'; echo '<td >'.$row['jrn_def_description'].'</td>'; echo '<td >'.$row['jrn_def_type'].'</td>'; echo '</tr>'; } echo '</table>'; echo HtmlInput::hidden('div',$div); echo HtmlInput::submit('save',_('Valider')); echo HtmlInput::button_close($div."jrn_search"); echo '</form>'; echo '</div>'; echo '</div>'; $ret=ob_get_contents(); ob_end_clean(); return $ret; } /** *create a hidden plus button to select the cat of ledger *@note the selected value is stored in the array p_cat */ static function select_cat($array_cat) { ob_start(); $ledger=new ISmallButton('l'); $ledger->label=_("Catégorie"); $ledger->javascript=" show_cat_choice()"; echo $ledger->input(); /* create a hidden div for the ledger */ echo '<div id="div_cat">'; echo '<h2 class="info">'._('Choix des categories').'</h2>'; $selected=(isset($_GET['r_cat']))?$_GET['r_cat']:null; echo '<ul>'; for ($e=0;$e<count($array_cat);$e++) { $row=$array_cat[$e]; $re=new ICheckBox('r_cat['.$e.']',$row['cat']); if ( $selected != null && isset($selected[$e])) { $re->selected=true; } echo '<li style="list-style-type: none;">'.$re->input().$row['name'].'('.$row['cat'].')</li>'; } echo '</ul>'; $hide=new IButton('l2'); $hide->label=_("Valider"); $hide->javascript=" hide_cat_choice() "; echo $hide->input(); echo '</div>'; $r=ob_get_contents(); ob_end_clean(); return $r; } static function display_periode($p_id) { $r=sprintf('<a href="javascript:void(0)" onclick="display_periode(%d,%d)">Modifier</a>', dossier::id(), $p_id); return $r; } /** *close button for the HTML popup *@see add_div modify_operation *@param $div_name is the name of the div to remove */ static function button_close($div_name) { $a=new IButton('Fermer'); $a->label=_("Fermer"); $a->javascript="removeDiv('".$div_name."')"; $html=$a->input(); return $html; } /** * Return a html string with an anchor which close the inside popup. (top-right corner) *@param name of the DIV to close */ static function anchor_close($div,$p_js="") { $r=''; $r.='<div style="position:absolute;right:2px;margin:2px;padding:0px;">'; $r.= '<A id="close_div" class="input_text" onclick="removeDiv(\''.$div.'\');'.$p_js.'">⨉</A>'; $r.='</div>'; return $r; } /** * button Html *@param $action action action to perform (message) without onclick *@param $javascript javascript to execute */ static function button_action($action,$javascript,$id="xx",$p_class="button") { if ($id=="xx"){ $id=HtmlInput::generate_id("xx"); } $r=""; $r.='<input type="button" id="'.$id.'" class="'.$p_class.'" onclick="'.$javascript.'" value="'.h($action).'">'; return $r; } /** * button Html image *@param $javascript javascript to execute * @param $id id of the button * @param $class class of the button * @param $p_image image */ static function button_image($javascript,$id="xx",$p_class='class="button"',$p_image="") { if ($id=="xx"){ $id=HtmlInput::generate_id("xx"); } $r=""; $r.='<image id="'.$id.'" '.$p_class.' onclick="'.$javascript.'" src="'.$p_image.'" />'; return $r; } /** * Return a html string with an anchor to hide a div, put it in the right corner *@param $action action action to perform (message) *@param $javascript javascript *@note not protected against html *@see Acc_Ledger::display_search_form */ static function anchor_hide($action,$javascript) { $r=''; $r.='<div style="position:absolute;margin:2px;right:2px">'; $r.= '<span id="close_div" class="input_text" onclick="'.$javascript.'">'.$action.'</span>'; $r.='</div>'; return $r; } /** * Javascript to print the current window */ static function print_window() { $r=''; $r.=HtmlInput::button('print','Imprimer','onclick="window.print();"'); return $r; } /** *show the detail of a card */ static function card_detail($p_qcode,$pname='',$p_style="",$p_nohistory=false) { //if ($pname=='')$pname=$p_qcode; $r=""; $histo=($p_nohistory==true)?' ,nohistory:1':""; $r.=sprintf('<a href="javascript:void(0)" %s onclick="fill_ipopcard({qcode:\'%s\' %s})">%s [%s]</a>', $p_style,$p_qcode,$histo,$pname,$p_qcode); return $r; } /** *transform request data to hidden *@param $array is an of indices *@param $request name of the superglobal $_POST $_GET $_REQUEST(default) *@return html string with the hidden data */ static function array_to_hidden($array,$global_array ) { $r=""; if ( count($global_array )==0) return ''; foreach ($array as $a) { if (isset($global_array [$a])) if (is_array($global_array[$a]) == false ) { $r.=HtmlInput::hidden($a,$global_array [$a]); } else { if (count($global_array[$a]) > 0) { foreach ($global_array[$a] as $value) { $r.=HtmlInput::hidden($a."[]",$value); } } } } return $r; } /** *transform $_GET data to hidden *@param $array is an of indices *@see HtmlInput::request_to_hidden *@return html string with the hidden data */ static function get_to_hidden($array) { $r=self::array_to_hidden($array,$_GET ); return $r; } /** *transform $_POST data to hidden *@param $array is an of indices *@see HtmlInput::request_to_hidden *@return html string with the hidden data */ static function post_to_hidden($array) { $r=self::array_to_hidden($array,$_POST ); return $r; } /** *transform $_REQUEST data to hidden *@param $array is an of indices *@see HtmlInput::request_to_hidden *@return html string with the hidden data */ static function request_to_hidden($array) { $r=self::array_to_hidden($array,$_REQUEST ); return $r; } /** *transform request data to string *@param $array is an of indices *@param $request name of the superglobal $_POST $_GET $_REQUEST(default) *@return html string with the string data */ static function array_to_string($array,$global_array,$start="?" ) { $r=$start; if ( count($global_array )==0) return ''; $and=""; foreach ($array as $a) { if (isset($global_array [$a])) { if (is_array($global_array[$a]) == false ) { $r.=$and."$a=".$global_array [$a]; } else { for ($i=0;$i<count($global_array[$a]);$i++) { $r.=$and."$a"."[]=".$global_array[$a][$i]; $and="&"; } } } $and="&"; } return $r; } /** *transform $_GET data to string *@param $array is an of indices *@see HtmlInput::request_to_string *@return html string with the string data */ static function get_to_string($array,$start="?") { $r=self::array_to_string($array,$_GET ,$start); return $r; } /** *transform $_POST data to string *@param $array is an of indices *@see HtmlInput::request_to_string *@return html string with the string data */ static function post_to_string($array) { $r=self::array_to_string($array,$_POST ); return $r; } /** *transform $_REQUEST data to string *@param $array is an of indices *@see HtmlInput::request_to_string *@return html string with the string data */ static function request_to_string($array,$start="?") { $r=self::array_to_string($array,$_REQUEST,$start ); return $r; } /** * generate an unique id for a widget, *@param $p_prefix prefix *@see HtmlInput::IDate *@return string with a unique id */ static function generate_id($p_prefix) { $r=sprintf('%s_%d',$p_prefix,mt_rand(0,999999)); return $r; } /** * return default if the value if the value doesn't exist in the array *@param $ind the index to check *@param $default the value to return *@param $array the array */ static function default_value($ind,$default,$array) { if ( ! isset($array[$ind])) { return $default; } return $array[$ind]; } /** * return default if the value if the value doesn't exist in $_GET * @param $ind name of the variable * @param type $default * @return type */ static function default_value_get($ind, $default) { if (!isset($_GET[$ind])) { return $default; } return $_GET[$ind]; } /** * return default if the value if the value doesn't exist in $_POST * @param $ind name of the variable * @param type $default * @return type */ static function default_value_post($ind, $default) { if (!isset($_POST[$ind])) { return $default; } return $_POST[$ind]; } /** * return default if the value if the value doesn't exist in $_REQUEST * @param $ind name of the variable * @param type $default * @return type */ static function default_value_request($ind, $default) { if (!isset($_REQUEST[$ind])) { return $default; } return $_REQUEST[$ind]; } /** * Title for boxes, you can customize the symbol thanks symbol with * the mode "custom" * @param type $name Title * @param type $div element id, except for mode none or custom * @param type $mod hide , close , zoom , custom or none, with * custom , the $name contains all the code * @param type $p_js contains the javascript with "custom" contains button + code * @return type */ static function title_box($name,$div,$mod="close",$p_js="") { if ($mod=='close') {$r=HtmlInput::anchor_close($div,$p_js); }else if ($mod=='hide') {$r=HtmlInput::anchor_hide("⨉","$('$div').hide();$p_js");} else if ($mod=='zoom') {$r='<span id="span_'.$div.'" style="float:right;margin-right:5px">'.HtmlInput::anchor("⬜","",$p_js,' name="small'.$div.'" id="close_div" class="input_text" ').'</span>'; } else if ( $mod == 'custom') {$r='<span id="span_'.$div.'" style="float:right;margin-right:5px">'.$p_js."</span>";} else if ( $mod == 'none') {$r="" ; } else die (__FILE__.":".__LINE__._('Paramètre invaide')); $r.=h2($name,' class="title" '); return $r; } /** * @brief let you create only a link and set an id on it. * After create a javascript for getting the event * onclick = function() {...} * @param type $p_text Text to display * @param type $p_id id of the link * @param type $type title of the link * @code * echo HtmlInput::anchor_empty('go','go_id'); * <script>$("go_id").onclick=function (e) { ...}</script> * @endcode */ static function anchor_empty($p_text,$p_id,$p_title="") { $p_url="javascript:void(0)"; $str=sprintf('<a id="%s" href="javascript:void(0)" class="line" title="%s">%s</a>', $p_id,$p_title,$p_text); return $str; } /** *Return a simple anchor with a url or a javascript * if $p_js is not null then p_url will be javascript:void(0) * we don't add the event onclick. You must give p_url OR p_js * default CSS class=line * @param string $p_text text of the anchor * @param string $p_url url * @param string $p_js javascript * @param string $p_style is the visuable effect (class, style...) */ static function anchor($p_text,$p_url="",$p_js="",$p_style=' class="line" ') { if ($p_js != "") { $p_url="javascript:void(0)"; } $str=sprintf('<a %s href="%s" %s>%s</a>', $p_style,$p_url,$p_js,$p_text); return $str; } /** *Create an ISelect object containing the available repository for reading * or writing * @global $g_user * @param $p_cn db object * @param $p_name name of the select * @param $p_mode is 'R' for reading, 'W' for writinh * @return ISelect * @throws Exception if p_mode is wrong */ static function select_stock( $p_cn, $p_name,$p_mode) { global $g_user; if ( ! in_array($p_mode,array('R','W') ) ) { throw new Exception (__FILE__.":".__LINE__." $p_mode invalide"); } $profile=$g_user->get_profile(); $sel=new ISelect($p_name); if ($p_mode == 'W') { $sel->value=$p_cn->make_array(" select r_id,r_name from stock_repository join profile_sec_repository using (r_id) where ur_right='W' and p_id=".sql_string($profile). " order by 2" ); return $sel; } if ($p_mode == 'R') { $sel->value=$p_cn->make_array(" select r_id,r_name from stock_repository join profile_sec_repository using (r_id) where p_id=".sql_string($profile). " order by 2" ); return $sel; } } static function filter_table($p_table_id,$p_col,$start_row) { $r= " <span> <input id=\"lk_".$p_table_id."\" autocomplete=\"off\" class=\"input_text\" name=\"filter\" onkeyup=\"filter_table(this, '$p_table_id','$p_col',$start_row )\" type=\"text\"> <input type=\"button\" class=\"smallbutton\" onclick=\"$('lk_".$p_table_id."').value='';filter_table($('lk_".$p_table_id."'), '$p_table_id','$p_col',$start_row );\" value=\"X\"> </span> "; $r.=' <span class="notice" id="info_'.$p_table_id.'"></span>'; return $r; } static function show_reconcile($p_div, $let,$span="") { $r = '<A style="color:red;text-decoration:underline" href="javascript:void(0)" onclick="show_reconcile(\'' . $p_div . '\',\'' . $let . '\')">' . $let.$span . '</A>'; return $r; } /** * Zoom the calendar * @param type $obj objet json for the javascript * @see calendar_zoom in scripts.js */ static function calendar_zoom($obj) { $button=new ISmallButton("calendar", _("Calendrier")); $button->javascript="calendar_zoom($obj)"; return $button->input(); } /** * * @param type $p_array indice * - div div name * - type ALL, VEN, ACH or ODS * - all_type 1 yes 0 no * */ static function button_choice_ledger($p_array) { extract ($p_array); $bledger_param = json_encode(array( 'dossier' => $_REQUEST['gDossier'], 'type' => $type, 'all_type' => $all_type, 'div' => $div, 'class'=>'inner_box' )); $bledger_param = str_replace('"', "'", $bledger_param); $bledger = new ISmallButton('l'); $bledger->label = _("choix des journaux"); $bledger->javascript = " show_ledger_choice($bledger_param)"; $f_ledger = $bledger->input(); $hid_jrn = ""; if (isset($_REQUEST[$div . 'nb_jrn'])) { for ($i = 0; $i < $_REQUEST[$div . 'nb_jrn']; $i++) { if (isset($_REQUEST[$div . "r_jrn"][$i])) $hid_jrn.=HtmlInput::hidden($div . 'r_jrn[' . $i . ']', $_REQUEST[$div . "r_jrn"][$i]); } $hid_jrn.=HtmlInput::hidden($div . 'nb_jrn', $_REQUEST[$div . 'nb_jrn']); } else { $hid_jrn = HtmlInput::hidden($div . 'nb_jrn', 0); } echo $f_ledger; echo '<span id="ledger_id' . $div . '">'; echo $hid_jrn; echo '</span>'; } /** * Returns HTML code for displaying a icon with a link to a receipt document from * the ledger * @global $cn database connx * @param $p_jr_id jrn.jr_id * @return nothing or HTML Code for a link to the document */ static function show_receipt_document($p_jr_id) { global $cn; $array=$cn->get_array('select jr_def_id,jr_pj_name,jr_grpt_id from jrn where jr_id=$1',array($p_jr_id)); if (count($array)==0) return ""; if ($array[0]['jr_pj_name'] == "") return ""; $str_dossier=Dossier::get(); $image='<IMG style="width:24px;height:24px;border:0px" SRC="image/documents.png" title="' . $array[0]['jr_pj_name'] . '" >'; $r=sprintf('<A class="detail" HREF="show_pj.php?jrn=%s&jr_grpt_id=%s&%s">%s</A>', $array[0]['jr_def_id'], $array[0]['jr_grpt_id'], $str_dossier, $image); return $r; } /** * * @param type $p_operation_jr_id action_gestion_operation.ago_id */ static function button_action_remove_operation($p_operation) { $rmOperation=sprintf("javascript:confirm_box(null,'"._('Voulez-vous effacer cette relation ')."',function () {remove_operation('%s','%s');});", dossier::id(), $p_operation); $js= '<a class="tinybutton" id="acop'.$p_operation.'" href="javascript:void(0)" onclick="'.$rmOperation.'">'.SMALLX.'</a>'; return $js; } static function button_action_add_concerned_card($p_agid) { $dossier=Dossier::id(); $javascript= <<<EOF obj={dossier:$dossier,ag_id:$p_agid};action_add_concerned_card(obj); EOF; $js=HtmlInput::button_action(_('Ajout autres'), $javascript,'xx','smallbutton'); return $js; } static function button_action_add() { $dossier=Dossier::id(); $js=HtmlInput::button_action(_('Nouvel événement'),'action_add('.$dossier.')','xx','smallbutton'); return $js; } }