function executeProc($procedure, $idProc, $tparams) { global $msg, $dbh, $PMBuserid; global $pmb_procedure_server_credentials, $pmb_procedure_server_address; if (SESSrights & ADMINISTRATION_AUTH) { $name = ""; $report = ""; if ($tparams) { foreach ($tparams as $aparam => $vparam) { global ${$aparam}; ${$aparam} = $vparam; } } switch ($procedure) { case INTERNAL: $hp = new parameters($idProc, "procs"); $hp->get_final_query(); $code_sql = $hp->final_query; $autorisations = $hp->proc->autorisations; break; case EXTERNAL: $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials); if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) { $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1])); $procedure = $aremote_procedure_client->get_proc($idProc, "AP"); $the_procedure = $procedure["procedure"]; if ($procedure["error_message"]) { $report = htmlentities($msg["remote_procedures_error_server"], ENT_QUOTES, $charset) . ":<br><i>" . $procedure["error_message"] . "</i>"; $result = array("name" => $the_procedure->name, "report" => $report); return $result; } else { if ($the_procedure->params && $the_procedure->params != "NULL") { $sql = "CREATE TEMPORARY TABLE remote_proc LIKE procs"; mysql_query($sql, $dbh) or die(mysql_error()); $sql = "INSERT INTO remote_proc (idproc, name, requete, comment, autorisations, parameters, num_classement) VALUES (0, '" . mysql_escape_string($the_procedure->name) . "', '" . mysql_escape_string($the_procedure->sql) . "', '" . mysql_escape_string($the_procedure->comment) . "', '', '" . mysql_escape_string($the_procedure->params) . "', 0)"; mysql_query($sql, $dbh) or die(mysql_error()); $idproc = mysql_insert_id($dbh); $hp = new parameters($idproc, "remote_proc"); $hp->get_final_query(); $the_procedure->sql = $hp->final_query; $name = $the_procedure->name; $code_sql = $the_procedure->sql; $commentaire = $the_procedure->comment; } } } break; } $linetemp = explode(";", $code_sql); if ($autorisations) { $temp_autorisation = explode(" ", $autorisations); } $allow = false; if ($temp_autorisation) { foreach ($temp_autorisation as $userid) { if ($userid == $PMBuserid) { $allow = true; } } if (!$allow) { $report = $msg["11"]; // throw new Exception($message, $code); $result = array("name" => $name, "report" => $report); return $result; } } for ($i = 0; $i < count($linetemp); $i++) { if (trim($linetemp[$i])) { $line[] = trim($linetemp[$i]); } } while (list($cle, $valeur) = each($line)) { if ($valeur) { // traitement des paramètres // traitement tri des colonnes if ($sortfield != "") { // on cherche à trier sur le champ $trifield // compose la chaîne de tri $tri = $sortfield; if ($desc == 1) { $tri .= " DESC"; } else { $tri .= " ASC"; } // on enlève les doubles espaces dans la procédure $valeur = ereg_replace("/\\s+/", " ", $valeur); // supprime un éventuel ; à la fin de la requête $valeur = ereg_replace("/;\$/", "", $valeur); // on recherche la première occurence de ORDER BY $s = stristr($valeur, "order by"); if ($s) { // y'a déjà une clause order by... moins facile... // il faut qu'on sache si on aura besoin de mettre une virgule ou pas if (ereg(",", $s)) { $virgule = true; } else { if (!ereg("{$sortfield}", $s)) { $virgule = true; } else { $virgule = false; } } if ($virgule) { $tri .= ", "; } // regarde si le champ est déjà dans la liste des champs à trier et le remplace si besoin $new_s = preg_replace("/{$sortfield}, /", "", $s); $new_s = preg_replace("/{$sortfield}/", "", $new_s); // ajoute la clause order by correcte $new_s = preg_replace("/order\\s+by\\s+/i", "order by {$tri}", $new_s); // replace l'ancienne chaîne par la nouvelle $valeur = str_replace($s, $new_s, $valeur); } else { $valeur .= " order by {$tri}"; } } $report .= "<strong>" . $msg["procs_ligne"] . " {$cle} </strong>: {$valeur}<br /><br />"; if (explain_requete($valeur)) { $res = @mysql_query($valeur, $dbh); $report .= mysql_error(); $nbr_lignes = @mysql_num_rows($res); $nbr_champs = @mysql_num_fields($res); if ($nbr_lignes) { $report .= "<table >"; for ($i = 0; $i < $nbr_champs; $i++) { $fieldname = mysql_field_name($res, $i); $report .= "<th>{$fieldname}</th>"; } for ($i = 0; $i < $nbr_lignes; $i++) { $row = mysql_fetch_row($res); $report .= "<tr>"; foreach ($row as $dummykey => $col) { if (trim($col) == '') { $col = ' '; } $report .= '<td >' . $col . '</td>'; } $report .= "</tr>"; } $report .= "</table><hr />"; $report .= "<font color='#ff0000'>" . $msg['admin_misc_lignes'] . " " . mysql_affected_rows($dbh) . "</font>"; } else { $report .= "<br /><font color='#ff0000'>" . $msg['admin_misc_lignes'] . " " . mysql_affected_rows($dbh); $err = mysql_error($dbh); if ($err) { $report .= "<br />{$err}"; } $report .= "</font><hr />"; } } else { // erreur explain_requete $report .= $valeur . "<br /><br />" . $msg["proc_param_explain_failed"] . "<br /><br />" . $erreur_explain_rqt; } } } // fin while $result = array("name" => $name, "report" => $report); return $result; } return array(); }
function display_remote_proc($id) { global $pmb_procedure_server_credentials, $pmb_procedure_server_address; global $empr_proc_view_remote; global $type_list; global $msg; $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials); $the_procedure = 0; if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) { $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1])); $procedure = $aremote_procedure_client->get_proc($id); if ($procedure["error_message"]) { $buf_contenu = htmlentities($msg["remote_procedures_error_server"], ENT_QUOTES, $charset) . ":<br><i>" . $procedure["error_message"] . "</i>"; print $buf_contenu; return; } $the_procedure = $procedure["procedure"]; } if (!$the_procedure) { echo htmlentities($msg["remote_procedures_error_client"], ENT_QUOTES, $charset); return; } global $msg; global $admin_proc_form; global $charset; $empr_proc_view_remote = str_replace('!!id!!', $id, $empr_proc_view_remote); $empr_proc_view_remote = str_replace('!!form_title!!', htmlentities($msg["remote_procedures_detail_procedure_distante"], ENT_QUOTES, $charset), $empr_proc_view_remote); $additional_information = $the_procedure->untested ? $msg["remote_procedures_procedure_non_validated_additional_information"] : ""; $empr_proc_view_remote = str_replace('!!additional_information!!', htmlentities($additional_information, ENT_QUOTES, $charset), $empr_proc_view_remote); $empr_proc_view_remote = str_replace('!!name!!', htmlentities($the_procedure->name, ENT_QUOTES, $charset), $empr_proc_view_remote); $empr_proc_view_remote = str_replace('!!name_suppr!!', htmlentities(addslashes($the_procedure->name), ENT_QUOTES, $charset), $empr_proc_view_remote); $empr_proc_view_remote = str_replace('!!ptype!!', htmlentities($the_procedure->type == "PEMPS" ? $msg["caddie_procs_type_SELECT"] : $msg["caddie_procs_type_ACTION"], ENT_QUOTES, $charset), $empr_proc_view_remote); $empr_proc_view_remote = str_replace('!!code!!', htmlentities($the_procedure->sql, ENT_QUOTES, $charset), $empr_proc_view_remote); $empr_proc_view_remote = str_replace('!!comment!!', htmlentities($the_procedure->comment, ENT_QUOTES, $charset), $empr_proc_view_remote); $parameters = $the_procedure->params; $parameters = $aremote_procedure_client->parse_parameters($parameters); // highlight_string(print_r($parameters, true)); if ($parameters) { $empr_proc_view_remote = str_replace('!!parameters_title!!', "<label class='etiquette' for='form_comment'>" . htmlentities($msg["remote_procedures_procedure_parameters"], ENT_QUOTES, $charset) . "</label>", $empr_proc_view_remote); $parameters_display = '<table><tr><th>' . htmlentities($msg["remote_procedures_procedure_parameters_name"], ENT_QUOTES, $charset) . '</th><th>' . htmlentities($msg["remote_procedures_procedure_parameters_title"], ENT_QUOTES, $charset) . '</th><th>' . htmlentities($msg["remote_procedures_procedure_parameters_type"], ENT_QUOTES, $charset) . '</th><th>' . htmlentities($msg["remote_procedures_procedure_parameters"], ENT_QUOTES, $charset) . '</th></tr>'; $parity = 0; foreach ($parameters as $parametername => $parameter) { $pair_impair = $parity++ % 2 ? "even" : "odd"; $tr_javascript = " onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='{$pair_impair}'\" "; $parameters_display .= '<tr class="' . $pair_impair . '" ' . $tr_javascript . '>'; $parameters_display .= '<td align="center">' . htmlentities($parametername, ENT_QUOTES, $charset) . '</td>'; $parameters_display .= '<td align="center">' . htmlentities($parameter["title"]['value'], ENT_QUOTES, $charset) . '</td>'; $parameters_display .= '<td align="center">' . htmlentities($type_list[$parameter["type"]["value"]], ENT_QUOTES, $charset) . '</td>'; switch ($parameter["type"]["value"]) { case "query_list": $parameters_display .= '<td><ul><li>' . htmlentities($msg["procs_options_requete"], ENT_QUOTES, $charset) . ': ' . htmlentities($parameter["options"]["QUERY"][0]["value"], ENT_QUOTES, $charset) . '</li><li>' . htmlentities($msg["procs_options_liste_multi"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["MULTIPLE"][0]["value"] == "yes" ? htmlentities($msg["40"], ENT_QUOTES, $charset) : htmlentities($msg["39"], ENT_QUOTES, $charset)) . '</li></ul></td>'; break; case "text": $parameters_display .= '<td><ul><li>' . htmlentities($msg["procs_options_text_taille"], ENT_QUOTES, $charset) . ': ' . htmlentities($parameter["options"]["SIZE"][0]["value"], ENT_QUOTES, $charset) . '</li><li>' . htmlentities($msg["procs_options_text_max"], ENT_QUOTES, $charset) . ': ' . $parameter["options"]["MAXSIZE"][0]["value"] . '</li></ul></td>'; break; case "list": $parameters_display .= '<td><ul>'; $parameters_display .= '<li>' . htmlentities($msg["procs_options_liste_multi"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["MULTIPLE"][0]["value"] == "yes" ? htmlentities($msg["40"], ENT_QUOTES, $charset) : htmlentities($msg["39"], ENT_QUOTES, $charset)) . '</li>'; $parameters_display .= '<li>' . htmlentities($msg["procs_options_choix_vide"], ENT_QUOTES, $charset) . ': ' . htmlentities($parameter["options"]["UNSELECT_ITEM"][0]["value"], ENT_QUOTES, $charset) . ' (' . htmlentities($parameter["options"]["UNSELECT_ITEM"][0]["VALUE"], ENT_QUOTES, $charset) . ')</li>'; $choix = array(); foreach ($parameter["options"]["ITEMS"][0]["ITEM"] as $achoix) { $choix[] = $achoix["value"] . " (" . $achoix["VALUE"] . ")"; } $parameters_display .= '<li>' . htmlentities($msg["procs_options_liste_options"], ENT_QUOTES, $charset) . ': ' . htmlentities(implode("; ", $choix), ENT_QUOTES, $charset) . '</li>'; $parameters_display .= '</ul></td>'; break; case "date_box": $parameters_display .= '<td><br><br></td>'; break; case "selector": $parameters_display .= '<td><ul>'; $parameters_display .= '<li>' . htmlentities($msg["include_option_methode"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["METHOD"][0]["value"] == "1" ? $msg['parperso_include_option_selectors_id'] : $msg['parperso_include_option_selectors_label']) . '</li>'; $id_captions = array($msg['133'], $msg['134'], $msg['135'], $msg['136'], $msg['137'], $msg['333'], $msg['indexint_menu']); $parameters_display .= '<li>' . htmlentities($msg["include_option_type_donnees"], ENT_QUOTES, $charset) . ': ' . htmlentities($id_captions[$parameter["options"]["DATA_TYPE"][0]["value"]], ENT_QUOTES, $charset) . '</li>'; $parameters_display .= '</ul></td>'; break; case "file_box": $parameters_display .= '<td><ul>'; $parameters_display .= '<li>' . htmlentities($msg["include_option_methode"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["METHOD"][0]["value"] == "1" ? htmlentities($msg["57"], ENT_QUOTES, $charset) : htmlentities($msg["include_option_table"], ENT_QUOTES, $charset)) . '</li>'; $parameters_display .= '<li>' . htmlentities($msg["include_option_nom_table"], ENT_QUOTES, $charset) . ': ' . htmlentities($parameter["options"]["TEMP_TABLE_NAME"][0]["value"], ENT_QUOTES, $charset) . '</li>'; $parameters_display .= '<li>' . htmlentities($msg["include_option_type_donnees"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["DATA_TYPE"][0]["value"] == "1" ? "Chaine" : "Entier") . '</li>'; $parameters_display .= '</ul></td>'; break; default: break; } $parameters_display .= '</tr>'; } $parameters_display .= '</table>'; $empr_proc_view_remote = str_replace('!!parameters_content!!', $parameters_display, $empr_proc_view_remote); } $empr_proc_view_remote = str_replace('!!parameters_title!!', "", $empr_proc_view_remote); $empr_proc_view_remote = str_replace('!!parameters_content!!', "", $empr_proc_view_remote); print $empr_proc_view_remote; }
function make_serialized_task_params() { global $dbh, $type_proc, $form_procs, $form_procs_remote; global $tocsv_checked, $tocsv_sep, $tocsv_filepath, $tocsv_enclosure; global $pmb_procedure_server_credentials, $pmb_procedure_server_address; $t = parent::make_serialized_task_params(); $t['type_proc'] = stripslashes($type_proc); $t['form_procs'] = stripslashes($form_procs); $t['form_procs_remote'] = stripslashes($form_procs_remote); $t['tocsv']['checked'] = $tocsv_checked; $t['tocsv']['sep'] = stripslashes($tocsv_sep); $t['tocsv']['filepath'] = stripslashes($tocsv_filepath); $t['tocsv']['enclosure'] = stripslashes($tocsv_enclosure); if ($form_procs) { $hp = new parameters($form_procs, 'procs'); $t['envt'] = $hp->make_serialized_parameters_params(); } else { if ($form_procs_remote) { $id = $form_procs_remote; $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials); if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) { $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1])); $procedure = $aremote_procedure_client->get_proc($id, "AP"); if (!$procedure['error_message']) { $the_procedure = $procedure['procedure']; if ($the_procedure) { $sql = "CREATE TEMPORARY TABLE remote_proc LIKE procs"; pmb_mysql_query($sql, $dbh) or die(pmb_mysql_error()); $sql = "INSERT INTO remote_proc (idproc, name, requete, comment, autorisations, parameters, num_classement) VALUES (0, '" . pmb_mysql_escape_string($the_procedure->name) . "', '" . pmb_mysql_escape_string($the_procedure->sql) . "', '" . pmb_mysql_escape_string($the_procedure->comment) . "', '', '" . pmb_mysql_escape_string($the_procedure->params) . "', 0)"; pmb_mysql_query($sql, $dbh) or die(pmb_mysql_error()); $idproc = pmb_mysql_insert_id($dbh); $hp = new parameters($idproc, "remote_proc"); $t['envt'] = $hp->make_serialized_parameters_params(); } } } } } return serialize($t); }
function make_serialized_task_params() { global $dbh, $type_proc, $form_procs, $form_procs_remote; global $pmb_procedure_server_credentials, $pmb_procedure_server_address; $t = parent::make_serialized_task_params(); $t["type_proc"] = stripslashes($type_proc); $t["form_procs"] = stripslashes($form_procs); $t["form_procs_remote"] = stripslashes($form_procs_remote); if ($form_procs) { $hp = new parameters($form_procs, "procs"); $t["envt"] = $hp->make_serialized_parameters_params(); } else { if ($form_procs_remote) { $id = $form_procs_remote; $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials); if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) { $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1])); $procedure = $aremote_procedure_client->get_proc($id, "AP"); if (!$procedure["error_message"]) { $the_procedure = $procedure["procedure"]; if ($the_procedure) { $sql = "CREATE TEMPORARY TABLE remote_proc LIKE procs"; mysql_query($sql, $dbh) or die(mysql_error()); $sql = "INSERT INTO remote_proc (idproc, name, requete, comment, autorisations, parameters, num_classement) VALUES (0, '" . mysql_escape_string($the_procedure->name) . "', '" . mysql_escape_string($the_procedure->sql) . "', '" . mysql_escape_string($the_procedure->comment) . "', '', '" . mysql_escape_string($the_procedure->params) . "', 0)"; mysql_query($sql, $dbh) or die(mysql_error()); $idproc = mysql_insert_id($dbh); $hp = new parameters($idproc, "remote_proc"); $t["envt"] = $hp->make_serialized_parameters_params(); } } } } } return serialize($t); }
function executeProc($procedure, $idProc, $tparams) { global $msg, $dbh, $charset, $PMBuserid; global $pmb_procedure_server_credentials, $pmb_procedure_server_address; if (SESSrights & ADMINISTRATION_AUTH) { $name = ''; $report = ''; if ($tparams['envt']) { foreach ($tparams['envt'] as $aparam => $vparam) { global ${$aparam}; ${$aparam} = $vparam; } } switch ($procedure) { case INTERNAL: $hp = new parameters($idProc, 'procs'); $hp->get_final_query(); $code_sql = $hp->final_query; $autorisations = $hp->proc->autorisations; break; case EXTERNAL: $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials); if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) { $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1])); $procedure = $aremote_procedure_client->get_proc($idProc, "AP"); $the_procedure = $procedure['procedure']; if ($procedure['error_message']) { $report = htmlentities($msg['remote_procedures_error_server'], ENT_QUOTES, $charset) . ':<br /><i>' . $procedure['error_message'] . '</i>'; $result = array('name' => $the_procedure->name, 'report' => $report); return $result; } else { if ($the_procedure->params && $the_procedure->params != 'NULL') { $sql = 'CREATE TEMPORARY TABLE remote_proc LIKE procs'; pmb_mysql_query($sql, $dbh) or die(pmb_mysql_error()); $sql = "INSERT INTO remote_proc (idproc, name, requete, comment, autorisations, parameters, num_classement) VALUES (0, '" . pmb_mysql_escape_string($the_procedure->name) . "', '" . pmb_mysql_escape_string($the_procedure->sql) . "', '" . pmb_mysql_escape_string($the_procedure->comment) . "', '', '" . pmb_mysql_escape_string($the_procedure->params) . "', 0)"; pmb_mysql_query($sql, $dbh) or die(pmb_mysql_error()); $idproc = pmb_mysql_insert_id($dbh); $hp = new parameters($idproc, 'remote_proc'); $hp->get_final_query(); $the_procedure->sql = $hp->final_query; $name = $the_procedure->name; $code_sql = $the_procedure->sql; $commentaire = $the_procedure->comment; } } } break; } $linetemp = explode(';', $code_sql); if ($autorisations) { $temp_autorisation = explode(' ', $autorisations); } $allow = false; if ($temp_autorisation) { foreach ($temp_autorisation as $userid) { if ($userid == $PMBuserid) { $allow = true; } } if (!$allow) { $report = $msg[11]; // throw new Exception($message, $code); $result = array('name' => $name, 'report' => $report); return $result; } } $line = array(); for ($i = 0; $i < count($linetemp); $i++) { if (trim($linetemp[$i])) { $line[] = trim($linetemp[$i]); } } while (list($cle, $valeur) = each($line)) { if ($valeur) { $report .= "<strong>" . $msg['procs_ligne'] . " {$cle} </strong>: {$valeur}<br /><br />"; $er = explain_requete($valeur); if ($er) { $res = @pmb_mysql_query($valeur, $dbh); $report .= pmb_mysql_error(); $nbr_lignes = @pmb_mysql_num_rows($res); $nbr_champs = @pmb_mysql_num_fields($res); if ($nbr_lignes) { $report .= "<table >"; for ($i = 0; $i < $nbr_champs; $i++) { $fieldname = pmb_mysql_field_name($res, $i); $report .= "<th>{$fieldname}</th>"; } for ($i = 0; $i < $nbr_lignes; $i++) { $row = pmb_mysql_fetch_row($res); $report .= "<tr>"; foreach ($row as $dummykey => $col) { if (trim($col) == '') { $col = ' '; } $report .= '<td >' . $col . '</td>'; } $report .= "</tr>"; } $report .= "</table><hr />"; $report .= "<font color='#ff0000'>" . $msg['admin_misc_lignes'] . " " . pmb_mysql_affected_rows($dbh) . "</font>"; } else { $report .= "<br /><font color='#ff0000'>" . $msg['admin_misc_lignes'] . " " . pmb_mysql_affected_rows($dbh); $err = pmb_mysql_error($dbh); if ($err) { $report .= "<br />{$err}"; } $report .= "</font><hr />"; } } else { // erreur explain_requete $report .= $valeur . "<br /><br />" . $msg['proc_param_explain_failed'] . "<br /><br />" . $erreur_explain_rqt; } } } // fin while //Export CSV sur le resultat de la derniere requete if ($er && $nbr_lignes && $tparams['tocsv']['checked'] == '1' && $tparams['tocsv']['filepath']) { if (!$tparams['tocsv']['sep']) { $tparams['tocsv']['sep'] = ','; } $trow = array(); if ($tparams['tocsv']['enclosure']) { for ($i = 0; $i < $nbr_champs; $i++) { $trow[] = addcslashes(pmb_mysql_field_name($res, $i), $tparams['tocsv']['enclosure']); } $row = $tparams['tocsv']['enclosure'] . implode($tparams['tocsv']['enclosure'] . $tparams['tocsv']['sep'] . $tparams['tocsv']['enclosure'], $trow) . $tparams['tocsv']['enclosure'] . "\r\n"; } else { $row = implode($tparams['tocsv']['sep'], $trow) . "\r\n"; } file_put_contents($tparams['tocsv']['filepath'], $row); pmb_mysql_data_seek($res, 0); for ($i = 0; $i < $nbr_lignes; $i++) { $trow = pmb_mysql_fetch_row($res); if ($tparams['tocsv']['enclosure']) { foreach ($trow as $k => $v) { $trow[$k] = addcslashes($v, $tparams['tocsv']['enclosure']); } $row = $tparams['tocsv']['enclosure'] . implode($tparams['tocsv']['enclosure'] . $tparams['tocsv']['sep'] . $tparams['tocsv']['enclosure'], $trow) . $tparams['tocsv']['enclosure'] . "\r\n"; } else { $row = implode($tparams['tocsv']['sep'], $trow) . "\r\n"; } file_put_contents($tparams['tocsv']['filepath'], $row, FILE_APPEND); } } $result = array('name' => $name, 'report' => $report); return $result; } return array(); }