KumbiaPHP beta2-dev
Framework PHP en español
|
00001 <?php 00025 class Report { 00026 00027 static function generate($form){ 00028 00029 $config = Config::read(); 00030 00031 $weightArray = array(); 00032 $headerArray = array(); 00033 $selectedFields = ""; 00034 $tables = ""; 00035 $whereCondition = ""; 00036 $maxCondition = ""; 00037 $n = 0; 00038 $db = db::raw_connect(); 00039 00040 if(isset($form['dataFilter'])&&$form['dataFilter']){ 00041 if(strpos($form['dataFilter'], '@')){ 00042 ereg("[\@][A-Za-z0-9_]+", $form['dataFilter'], $regs); 00043 foreach($regs as $reg){ 00044 $form['dataFilter'] = str_replace($reg, $_REQUEST["fl_".str_replace("@", "", $reg)], $form['dataFilter']); 00045 } 00046 } 00047 } 00048 if($form['type']=='standard'){ 00049 if(isset($form['joinTables'])&&$form['joinTables']) { 00050 $tables = $form['joinTables']; 00051 } 00052 if(isset($form['joinConditions'])&&$form['joinConditions']) { 00053 $whereCondition = " ".$form['joinConditions']; 00054 } 00055 foreach($form['components'] as $name => $com){ 00056 if(!isset($com['attributes']['value'])){ 00057 $com['attributes']['value'] = ""; 00058 } 00059 if($_REQUEST['fl_'.$name]==$com['attributes']['value']){ 00060 $_REQUEST['fl_'.$name] = ""; 00061 } 00062 if(trim($_REQUEST["fl_".$name])&&$_REQUEST["fl_".$name]!='@'){ 00063 if($form['components'][$name]['valueType']=='date'){ 00064 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'"; 00065 } else { 00066 if($form['components'][$name]['valueType']=='numeric'){ 00067 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'"; 00068 } else { 00069 if($form['components'][$name]['type']=='hidden'){ 00070 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'"; 00071 } else { 00072 if($com['type']=='check'){ 00073 if($_REQUEST["fl_".$name]==$form['components'][$name]['checkedValue']) 00074 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'"; 00075 } else { 00076 if($com['type']=='time'){ 00077 if($_REQUEST["fl_".$name]!='00:00'){ 00078 $whereCondition.=" and {$form['source']}.$name = '".$_REQUEST["fl_".$name]."'"; 00079 } 00080 } else { 00081 if($com['primary']||$com['type']=='combo'){ 00082 $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'"; 00083 } else { 00084 $whereCondition.=" and ".$form['source'].".$name like '%".$_REQUEST["fl_".$name]."%'"; 00085 } 00086 } 00087 } 00088 } 00089 } 00090 } 00091 } 00092 } 00093 } 00094 00095 //Modificaciones para seleccion de la ordenacion del report, si esta acabado en _id, quiere decir foreignkey 00096 //Cojeremos el texto sin el id, tendremos la tabla 00097 ActiveRecord::sql_item_sanizite($_REQUEST['reportTypeField']); 00098 if (substr($_REQUEST['reportTypeField'],strlen($_REQUEST['reportTypeField']) -3,strlen($_REQUEST['reportTypeField'])) == "_id"){ 00099 $OrderFields = substr($_REQUEST['reportTypeField'],0,strlen($_REQUEST['reportTypeField'])-3); 00100 }else{ 00101 $OrderFields =$_REQUEST['reportTypeField']; 00102 } 00103 $maxCondition = $whereCondition; 00104 $n = 0; 00105 foreach($form['components'] as $name => $com){ 00106 if(!isset($com['notReport'])){ 00107 $com['notReport'] = false; 00108 } 00109 if(!isset($com['class'])){ 00110 $com['class'] = false; 00111 } 00112 if(!$com['notReport']){ 00113 if(isset($com['caption'])&&$com['caption']){ 00114 $headerArray[$n] = str_replace("ó", "ó", $com['caption']); 00115 $headerArray[$n] = str_replace("á", "á", $headerArray[$n]); 00116 $headerArray[$n] = str_replace("é", "é", $headerArray[$n]); 00117 $headerArray[$n] = str_replace("í", "í", $headerArray[$n]); 00118 $headerArray[$n] = str_replace("ú", "ú", $headerArray[$n]); 00119 $headerArray[$n] = str_replace("<br/>", " ", $headerArray[$n]); 00120 } else { 00121 $com['caption'] = ""; 00122 } 00123 if($com['type']=='combo'&&$com['class']=='dynamic'){ 00124 if(isset($com['extraTables'])&&$com['extraTables']){ 00125 $tables.="{$com['extraTables']},"; 00126 } 00127 if(isset($com['whereConditionOnQuery'])&&$com['whereConditionOnQuery']){ 00128 $whereCondition.=" and {$com['whereConditionOnQuery']}"; 00129 } 00130 if(strpos(" ".$com['detailField'], "concat(")){ 00131 $selectedFields.=$com['detailField'].","; 00132 } else { 00133 $selectedFields.=$com['foreignTable'].".".$com['detailField'].","; 00134 //Comparamos la Tabla foranea que tenemos, y cuando sea igual, suponiendo no hay 00135 //mas de una clave foranea por tabla, sabremos a que tabla pertenece 00136 if ($com['foreignTable'] == $OrderFields){ 00137 $OrderFields = $com['foreignTable'].".".$com['detailField']; 00138 } 00139 } 00140 $tables.=$com['foreignTable'].","; 00141 if($com['column_relation']){ 00142 $whereCondition.=" and ".$com['foreignTable'].".".$com['column_relation']." = ".$form['source'].".".$name; 00143 } else { 00144 $whereCondition.=" and ".$com['foreignTable'].".".$name." = ".$form['source'].".".$name; 00145 } 00146 $weightArray[$n] = strlen($headerArray[$n])+2; 00147 $n++; 00148 } else { 00149 if($com['type']!='hidden'){ 00150 if($com['class']=='static' && isset($com['type']) && $com['type']=='combo'){ 00151 $weightArray[$n] = strlen($headerArray[$n])+2; 00152 if($config->type=='pgsql'){ 00153 $selectedFields.="case "; 00154 } 00155 if($config->type=='mysql'){ 00156 for($i=0;$i<=count($com['items'])-2;$i++){ 00157 $selectedFields.="if(".$form['source'].".".$name."='".$com['items'][$i][0]."', '".$com['items'][$i][1]."', "; 00158 if($weightArray[$n]<strlen($com['items'][$i][1])) { 00159 $weightArray[$n] = strlen($com['items'][$i][1])+1; 00160 } 00161 } 00162 } 00163 00164 if($config->type=='pgsql'){ 00165 for($i=0;$i<=count($com['items'])-1;$i++){ 00166 $selectedFields.=" when ".$form['source'].".".$name."='".$com['items'][$i][0]."' THEN '".$com['items'][$i][1]."' "; 00167 if($weightArray[$n]<strlen($com['items'][$i][1])) { 00168 $weightArray[$n] = strlen($com['items'][$i][1])+1; 00169 } 00170 } 00171 } 00172 00173 00174 $n++; 00175 if($config->type=='mysql'){ 00176 $selectedFields.="'".$com['items'][$i][1]."')"; 00177 for($j=0;$j<=$i-2;$j++) { 00178 $selectedFields.=")"; 00179 } 00180 } 00181 if($config->type=='pgsql'){ 00182 $selectedFields.=" end "; 00183 } 00184 $selectedFields.=","; 00185 } else { 00186 $selectedFields.=$form['source'].".".$name.","; 00187 //Aqui seguro que no es foranea, entonces tenemos que poner la tabla principal // 00188 //antes para evitar repeticiones 00189 if ($name == $OrderFields){ 00190 $OrderFields = $form['source'].".".$OrderFields; 00191 } 00192 $weightArray[$n] = strlen($headerArray[$n])+2; 00193 $n++; 00194 } 00195 } 00196 } 00197 } 00198 } 00199 $tables.=$form['source']; 00200 $selectedFields = substr($selectedFields, 0, strlen($selectedFields)-1); 00201 00202 if(isset($form['dataRequisite'])&&$form['dataRequisite']){ 00203 $whereCondition.=" and {$form['dataFilter']}"; 00204 } 00205 00206 //Modificacion del order 00207 if($OrderFields){ 00208 $OrderCondition = "Order By ".$OrderFields; 00209 } else { 00210 $OrderCondition = ""; 00211 } 00212 00213 $query = "select $selectedFields from $tables where 1 = 1 ".$whereCondition. " " .$OrderCondition; 00214 00215 $q = $db->query($query); 00216 if(!is_bool($q)){ 00217 if(!$db->num_rows($q)){ 00218 Flash::notice("No hay información para listar"); 00219 return; 00220 } 00221 } else { 00222 Flash::error($db->error()); 00223 return; 00224 } 00225 00226 $result = array(); 00227 $n = 0; 00228 while($row = $db->fetch_array($q, db::DB_NUM)){ 00229 $result[$n++] = $row; 00230 } 00231 00232 foreach($result as $row){ 00233 for($i=0;$i<=count($row)-1;$i++){ 00234 if($weightArray[$i]<strlen(trim($row[$i]))){ 00235 $weightArray[$i] = strlen(trim($row[$i])); 00236 } 00237 } 00238 } 00239 00240 for($i=0;$i<=count($weightArray)-1;$i++){ 00241 $weightArray[$i]*= 1.8; 00242 } 00243 00244 $sumArray = array_sum($weightArray); 00245 00246 if(!$_REQUEST['reportType']){ 00247 $_REQUEST['reportType'] = 'pdf'; 00248 } 00249 00250 if($_REQUEST['reportType']!='html'){ 00251 $title = str_replace("ó", "ó", $form['caption']); 00252 $title = str_replace("á", "á", $title); 00253 $title = str_replace("é", "é", $title); 00254 $title = str_replace("í", "í", $title); 00255 $title = str_replace("ú", "ú", $title); 00256 } else { 00257 $title = $form['caption']; 00258 } 00259 00260 switch($_REQUEST['reportType']){ 00261 case 'pdf': 00262 require_once CORE_PATH . 'extensions/report/format/pdf.php'; 00263 pdf($result, $sumArray, $title, $weightArray, $headerArray); 00264 break; 00265 case 'xls': 00266 require_once CORE_PATH . 'extensions/report/format/xls.php'; 00267 xls($result, $sumArray, $title, $weightArray, $headerArray); 00268 break; 00269 case 'html': 00270 require_once CORE_PATH . 'extensions/report/format/htm.php'; 00271 htm($result, $sumArray, $title, $weightArray, $headerArray); 00272 break; 00273 case 'doc': 00274 require_once CORE_PATH . 'extensions/report/format/doc.php'; 00275 doc($result, $sumArray, $title, $weightArray, $headerArray); 00276 break; 00277 default: 00278 require_once CORE_PATH . 'extensions/report/format/pdf.php'; 00279 pdf($result, $sumArray, $title, $weightArray, $headerArray); 00280 break; 00281 } 00282 00283 } 00284 } 00285 00286 ?>