KumbiaPHP  beta2
Framework PHP
 Todo Estructuras de Datos Namespaces Archivos Funciones Variables Páginas
report.php
Ir a la documentación de este archivo.
1 <?php
25 class Report {
26 
27  static function generate($form){
28 
30 
31  $weightArray = array();
32  $headerArray = array();
33  $selectedFields = "";
34  $tables = "";
35  $whereCondition = "";
36  $maxCondition = "";
37  $n = 0;
38  $db = db::raw_connect();
39 
40  if(isset($form['dataFilter'])&&$form['dataFilter']){
41  if(strpos($form['dataFilter'], '@')){
42  ereg("[\@][A-Za-z0-9_]+", $form['dataFilter'], $regs);
43  foreach($regs as $reg){
44  $form['dataFilter'] = str_replace($reg, $_REQUEST["fl_".str_replace("@", "", $reg)], $form['dataFilter']);
45  }
46  }
47  }
48  if($form['type']=='standard'){
49  if(isset($form['joinTables'])&&$form['joinTables']) {
50  $tables = $form['joinTables'];
51  }
52  if(isset($form['joinConditions'])&&$form['joinConditions']) {
53  $whereCondition = " ".$form['joinConditions'];
54  }
55  foreach($form['components'] as $name => $com){
56  if(!isset($com['attributes']['value'])){
57  $com['attributes']['value'] = "";
58  }
59  if($_REQUEST['fl_'.$name]==$com['attributes']['value']){
60  $_REQUEST['fl_'.$name] = "";
61  }
62  if(trim($_REQUEST["fl_".$name])&&$_REQUEST["fl_".$name]!='@'){
63  if($form['components'][$name]['valueType']=='date'){
64  $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
65  } else {
66  if($form['components'][$name]['valueType']=='numeric'){
67  $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
68  } else {
69  if($form['components'][$name]['type']=='hidden'){
70  $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
71  } else {
72  if($com['type']=='check'){
73  if($_REQUEST["fl_".$name]==$form['components'][$name]['checkedValue'])
74  $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
75  } else {
76  if($com['type']=='time'){
77  if($_REQUEST["fl_".$name]!='00:00'){
78  $whereCondition.=" and {$form['source']}.$name = '".$_REQUEST["fl_".$name]."'";
79  }
80  } else {
81  if($com['primary']||$com['type']=='combo'){
82  $whereCondition.=" and ".$form['source'].".$name = '".$_REQUEST["fl_".$name]."'";
83  } else {
84  $whereCondition.=" and ".$form['source'].".$name like '%".$_REQUEST["fl_".$name]."%'";
85  }
86  }
87  }
88  }
89  }
90  }
91  }
92  }
93  }
94 
95  //Modificaciones para seleccion de la ordenacion del report, si esta acabado en _id, quiere decir foreignkey
96  //Cojeremos el texto sin el id, tendremos la tabla
97  ActiveRecord::sql_item_sanizite($_REQUEST['reportTypeField']);
98  if (substr($_REQUEST['reportTypeField'],strlen($_REQUEST['reportTypeField']) -3,strlen($_REQUEST['reportTypeField'])) == "_id"){
99  $OrderFields = substr($_REQUEST['reportTypeField'],0,strlen($_REQUEST['reportTypeField'])-3);
100  }else{
101  $OrderFields =$_REQUEST['reportTypeField'];
102  }
103  $maxCondition = $whereCondition;
104  $n = 0;
105  foreach($form['components'] as $name => $com){
106  if(!isset($com['notReport'])){
107  $com['notReport'] = false;
108  }
109  if(!isset($com['class'])){
110  $com['class'] = false;
111  }
112  if(!$com['notReport']){
113  if(isset($com['caption'])&&$com['caption']){
114  $headerArray[$n] = str_replace("&oacute;", "ó", $com['caption']);
115  $headerArray[$n] = str_replace("&aacute;", "á", $headerArray[$n]);
116  $headerArray[$n] = str_replace("&eacute;", "é", $headerArray[$n]);
117  $headerArray[$n] = str_replace("&iacute;", "í", $headerArray[$n]);
118  $headerArray[$n] = str_replace("&uacute;", "ú", $headerArray[$n]);
119  $headerArray[$n] = str_replace("<br/>", " ", $headerArray[$n]);
120  } else {
121  $com['caption'] = "";
122  }
123  if($com['type']=='combo'&&$com['class']=='dynamic'){
124  if(isset($com['extraTables'])&&$com['extraTables']){
125  $tables.="{$com['extraTables']},";
126  }
127  if(isset($com['whereConditionOnQuery'])&&$com['whereConditionOnQuery']){
128  $whereCondition.=" and {$com['whereConditionOnQuery']}";
129  }
130  if(strpos(" ".$com['detailField'], "concat(")){
131  $selectedFields.=$com['detailField'].",";
132  } else {
133  $selectedFields.=$com['foreignTable'].".".$com['detailField'].",";
134  //Comparamos la Tabla foranea que tenemos, y cuando sea igual, suponiendo no hay
135  //mas de una clave foranea por tabla, sabremos a que tabla pertenece
136  if ($com['foreignTable'] == $OrderFields){
137  $OrderFields = $com['foreignTable'].".".$com['detailField'];
138  }
139  }
140  $tables.=$com['foreignTable'].",";
141  if($com['column_relation']){
142  $whereCondition.=" and ".$com['foreignTable'].".".$com['column_relation']." = ".$form['source'].".".$name;
143  } else {
144  $whereCondition.=" and ".$com['foreignTable'].".".$name." = ".$form['source'].".".$name;
145  }
146  $weightArray[$n] = strlen($headerArray[$n])+2;
147  $n++;
148  } else {
149  if($com['type']!='hidden'){
150  if($com['class']=='static' && isset($com['type']) && $com['type']=='combo'){
151  $weightArray[$n] = strlen($headerArray[$n])+2;
152  if($config->type=='pgsql'){
153  $selectedFields.="case ";
154  }
155  if($config->type=='mysql'){
156  for($i=0;$i<=count($com['items'])-2;$i++){
157  $selectedFields.="if(".$form['source'].".".$name."='".$com['items'][$i][0]."', '".$com['items'][$i][1]."', ";
158  if($weightArray[$n]<strlen($com['items'][$i][1])) {
159  $weightArray[$n] = strlen($com['items'][$i][1])+1;
160  }
161  }
162  }
163 
164  if($config->type=='pgsql'){
165  for($i=0;$i<=count($com['items'])-1;$i++){
166  $selectedFields.=" when ".$form['source'].".".$name."='".$com['items'][$i][0]."' THEN '".$com['items'][$i][1]."' ";
167  if($weightArray[$n]<strlen($com['items'][$i][1])) {
168  $weightArray[$n] = strlen($com['items'][$i][1])+1;
169  }
170  }
171  }
172 
173 
174  $n++;
175  if($config->type=='mysql'){
176  $selectedFields.="'".$com['items'][$i][1]."')";
177  for($j=0;$j<=$i-2;$j++) {
178  $selectedFields.=")";
179  }
180  }
181  if($config->type=='pgsql'){
182  $selectedFields.=" end ";
183  }
184  $selectedFields.=",";
185  } else {
186  $selectedFields.=$form['source'].".".$name.",";
187  //Aqui seguro que no es foranea, entonces tenemos que poner la tabla principal //
188  //antes para evitar repeticiones
189  if ($name == $OrderFields){
190  $OrderFields = $form['source'].".".$OrderFields;
191  }
192  $weightArray[$n] = strlen($headerArray[$n])+2;
193  $n++;
194  }
195  }
196  }
197  }
198  }
199  $tables.=$form['source'];
200  $selectedFields = substr($selectedFields, 0, strlen($selectedFields)-1);
201 
202  if(isset($form['dataRequisite'])&&$form['dataRequisite']){
203  $whereCondition.=" and {$form['dataFilter']}";
204  }
205 
206  //Modificacion del order
207  if($OrderFields){
208  $OrderCondition = "Order By ".$OrderFields;
209  } else {
210  $OrderCondition = "";
211  }
212 
213  $query = "select $selectedFields from $tables where 1 = 1 ".$whereCondition. " " .$OrderCondition;
214 
215  $q = $db->query($query);
216  if(!is_bool($q)){
217  if(!$db->num_rows($q)){
218  Flash::notice("No hay informaci&oacute;n para listar");
219  return;
220  }
221  } else {
222  Flash::error($db->error());
223  return;
224  }
225 
226  $result = array();
227  $n = 0;
228  while($row = $db->fetch_array($q, db::DB_NUM)){
229  $result[$n++] = $row;
230  }
231 
232  foreach($result as $row){
233  for($i=0;$i<=count($row)-1;$i++){
234  if($weightArray[$i]<strlen(trim($row[$i]))){
235  $weightArray[$i] = strlen(trim($row[$i]));
236  }
237  }
238  }
239 
240  for($i=0;$i<=count($weightArray)-1;$i++){
241  $weightArray[$i]*= 1.8;
242  }
243 
244  $sumArray = array_sum($weightArray);
245 
246  if(!$_REQUEST['reportType']){
247  $_REQUEST['reportType'] = 'pdf';
248  }
249 
250  if($_REQUEST['reportType']!='html'){
251  $title = str_replace("&oacute;", "ó", $form['caption']);
252  $title = str_replace("&aacute;", "á", $title);
253  $title = str_replace("&eacute;", "é", $title);
254  $title = str_replace("&iacute;", "í", $title);
255  $title = str_replace("&uacute;", "ú", $title);
256  } else {
257  $title = $form['caption'];
258  }
259 
260  switch($_REQUEST['reportType']){
261  case 'pdf':
262  require_once CORE_PATH . 'extensions/report/format/pdf.php';
263  pdf($result, $sumArray, $title, $weightArray, $headerArray);
264  break;
265  case 'xls':
266  require_once CORE_PATH . 'extensions/report/format/xls.php';
267  xls($result, $sumArray, $title, $weightArray, $headerArray);
268  break;
269  case 'html':
270  require_once CORE_PATH . 'extensions/report/format/htm.php';
271  htm($result, $sumArray, $title, $weightArray, $headerArray);
272  break;
273  case 'doc':
274  require_once CORE_PATH . 'extensions/report/format/doc.php';
275  doc($result, $sumArray, $title, $weightArray, $headerArray);
276  break;
277  default:
278  require_once CORE_PATH . 'extensions/report/format/pdf.php';
279  pdf($result, $sumArray, $title, $weightArray, $headerArray);
280  break;
281  }
282 
283  }
284 }
285 
286 ?>