31 "FREEDOM:VIEWMINIREPORT:T"
43 "title" => _(
"doctitle") ,
44 "revdate" => _(
"revdate") ,
45 "revision" => _(
"revision") ,
46 "state" => _(
"state") ,
57 $action->parent->AddJsRef($action->GetParam(
"CORE_JSURL") .
"/selectbox.js");
58 $action->parent->AddJsRef($action->GetParam(
"CORE_PUBURL") .
"/FREEDOM/Layout/editreport.js");
61 $rdoc =
createDoc($this->dbaccess, $rfamid,
false);
62 $lattr = $rdoc->GetNormalAttributes();
65 while (list($k, $v) = each(
$lattr)) {
67 $tcolumn1[$v->id] = array(
69 "alabel" => $v->getLabel()
75 while (list($k, $v) = each($tinternals)) {
76 $tinternals[$k] = array(
84 foreach ($tcols as $k => $v) {
85 if (isset($tcolumn1[$v])) {
86 $tcolumn2[$v] = $tcolumn1[$v];
89 if (isset($tinternals[$v])) {
90 $tcolumn2[$v] = $tinternals[$v];
91 unset($tinternals[$v]);
95 $this->lay->setBlockData(
"COLUMN1", $tcolumn1);
96 $this->lay->setBlockData(
"INTERNALS", $tinternals);
98 $this->lay->setBlockData(
"COLUMN2", $tcolumn2);
112 $action->parent->AddCssRef(
"FREEDOM:viewreport.css",
true);
113 $action->parent->AddJsRef($action->GetParam(
"CORE_PUBURL") .
"/FREEDOM/Layout/sorttable.js");
116 $rfamid = $this->
getValue(
"SE_FAMID", 1);
117 $rdoc =
createDoc($this->dbaccess, $rfamid,
false);
118 $lattr = $rdoc->GetNormalAttributes();
121 while (list($k, $v) = each(
$lattr)) {
123 $tcolumn1[$v->id] = array(
125 "collabel" => $v->getLabel() ,
126 "rightfornumber" => ($v->type ==
"money") ?
"right" :
"left"
131 foreach ($tinternals as $k => $v) {
132 $tcolumn1[$k] = array(
135 "rightfornumber" =>
"left"
140 foreach ($tcols as $k => & $vcol) {
142 $tcolumn2[$vcol] = $tcolumn1[$vcol];
145 $this->lay->setBlockData(
"COLS", $tcolumn2);
146 $this->lay->set(
"HASCOLS", count($tcolumn2) > 0);
147 include_once (
"FDL/Lib.Dir.php");
149 $this->lay->set(
"reportstyle", $this->
getValue(
"REP_STYLE",
"perso"));
150 $this->lay->set(
"isperso", ($this->
getValue(
"REP_STYLE",
"perso") ==
"perso"));
152 $this->lay->setBlockData(
"PARAMS", array(
160 $limit = $this->
getValue(
"REP_LIMIT",
"ALL");
161 $order = $this->
getValue(
"REP_IDSORT",
"title");
162 $oa = $rdoc->getAttribute($order);
164 if (($oa->type ==
"docid") && ($oa->getOption(
"doctitle") !=
"")) {
165 $order = $oa->getOption(
"doctitle");
166 if ($order ==
'auto') $order = $oa->id .
'_title';
169 $order.=
" " . $this->
getValue(
"REP_ORDERSORT");
170 $tdoc =
getChildDoc($this->dbaccess, $this->initid, 0, $limit, array() , $this->userid,
"TABLE", $rfamid,
false, $order);
172 $tcolor = $this->
getTValue(
"REP_COLORS");
174 while (list($k, $v) = each(
$tdoc)) {
178 "docid" => $rdoc->id,
179 "troddoreven" => $trodd ?
"trodd" :
"treven"
187 foreach ($tcolumn2 as $kc => $vc) {
188 if ($v[$kc] ==
"") $tcell[$kc] = array(
194 $cval = strftime(
"%d/%m/%Y %T", $v[$kc]);
205 $v[$kc] = $rdoc->getHTMLTitle();
206 $trlink = getparam(
"CORE_STANDURL") .
"&app=FDL&action=FDL_CARD&id=$trid";
207 $cval =
"<A target=\"rdoc" . $v[
"id"] .
"\" onmousedown=\"document.noselect=true;\" ";
208 $cval.=
"onclick=\"subwindowm(200,600,'rdoc$trid','$trlink')\" oncontextmenu=\"popdoc(event,'$trlink');return false;\">";
209 $cval.= $v[$kc] .
"</a>";
216 $cval = $rdoc->getHtmlValue(
$lattr[$kc], $v[$kc],
$target, $ulink);
217 if (
$lattr[$kc]->
type ==
"image") $cval =
"<img width=\"40px\" src=\"$cval\">";
224 $tcell[$kc][
"bgcell"] = current($tcolor);
226 $tcell[$kc][
"tdoddoreven"] = $tdodd ?
"tdodd" :
"tdeven";
227 $tcell[$kc][
"rightfornumber"] = (
$lattr[$kc]->type ==
"money") ?
"right" :
"left";
230 $this->lay->setBlockData(
"row$k", $tcell);
232 $this->lay->setBlockData(
"ROWS", $trow);
237 foreach ($tfoots as $k => $v) {
247 foreach ($trow as $kr => $vr) {
248 $ctr = $this->lay->getBlockData($vr[
"CELLS"]);
249 $val+= $ctr[$tcols[$k]][
"rawval"];
251 if ($v ==
"MOY") $val = $val / count($trow);
252 $val = $rdoc->getHtmlValue(
$lattr[$tcols[$k]], $val,
$target, $ulink);
260 "rightfornumber" => $tcolumn2[$tcols[$k]][
"rightfornumber"]
263 $this->lay->setBlockData(
"TFOOT", $tlfoots);
275 public function generateCSVReportStruct($isPivotExport =
false, $pivotId =
"id", $separator =
".", $dateFormat =
"US", $refresh =
true)
277 require_once
'WHAT/Class.twoDimensionalArray.php';
278 require_once
'FDL/Class.SearchDoc.php';
281 $limit = $this->
getValue(
"rep_limit",
"ALL");
282 $order = $this->
getValue(
"rep_idsort",
"title");
286 $search->slice = $limit;
287 $search->orderby = $order;
288 $search->setObjectReturn();
294 if ($isPivotExport) {
295 return $this->
generatePivotCSV($search, $tcols, $famDoc, $pivotId, $refresh, $separator, $dateFormat);
297 return $this->
generateBasicCSV($search, $tcols, $famDoc, $refresh, $separator, $dateFormat);
303 $convertFormat = array(
304 "dateFormat" => $dateFormat,
305 'decimalSeparator' => $separator
308 $pivotColumnName = uniqid();
310 $singleAttributes = array();
311 $multipleAttributes = array();
312 $resultSingleArray = array();
313 $resultMultipleArray = array();
317 $resultSingleArray[$pivotColumnName] = array();
319 foreach ($columns as $currentColumnID) {
320 $attributeObject = $famDoc->
getAttribute($currentColumnID);
321 if (!$attributeObject) {
322 $singleAttributes[] = $currentColumnID;
323 $resultSingleArray[$currentColumnID] = array();
324 } elseif ($attributeObject->isMultiple()) {
325 if ($attributeObject->getOption(
'multiple') ==
"yes" && !$attributeObject->inArray()) {
326 $multipleAttributes[$currentColumnID] = array();
327 $multipleAttributes[$currentColumnID][] = $currentColumnID;
328 $resultMultipleArray[$currentColumnID] = array();
329 $resultMultipleArray[$currentColumnID][$pivotColumnName] = array();
330 $resultMultipleArray[$currentColumnID][$currentColumnID] = array();
332 $arrayID = $attributeObject->fieldSet->id;
333 if (!isset($multipleAttributes[$arrayID])) {
334 $multipleAttributes[$arrayID] = array();
335 $resultMultipleArray[$arrayID] = array();
336 $resultMultipleArray[$arrayID][$pivotColumnName] = array();
338 $multipleAttributes[$arrayID][] = $currentColumnID;
339 $resultMultipleArray[$arrayID][$currentColumnID] = array();
342 $singleAttributes[] = $currentColumnID;
343 $resultSingleArray[$currentColumnID] = array();
347 while ($currentDoc = $search->
nextDoc()) {
349 $currentDoc->refresh();
352 $pivotValue = $pivotAttribute ? $pivotAttribute->getTextualValue($currentDoc, -1, $convertFormat) : $this->
convertInternalElement($pivotId, $currentDoc);
353 $resultSingleArray[$pivotColumnName][] = $pivotValue;
354 foreach ($singleAttributes as $currentColumnID) {
355 $currentAttribute = $famDoc->
getAttribute($currentColumnID);
356 $resultSingleArray[$currentColumnID][] = $currentAttribute ? $currentAttribute->getTextualValue($currentDoc, -1, $convertFormat) : $this->
convertInternalElement($currentColumnID, $currentDoc);
358 foreach ($multipleAttributes as $currentKey => $currentArrayID) {
359 foreach ($currentArrayID as $currentColumnID) {
360 $currentAttribute = $famDoc->
getAttribute($currentColumnID);
361 $nbElement = count($currentDoc->getTValue($currentColumnID));
362 for ($i = 0; $i < $nbElement; $i++) {
363 $resultMultipleArray[$currentKey][$currentColumnID][] = $currentAttribute->getTextualValue($currentDoc, $i, $convertFormat);
366 for ($i = 0; $i < $nbElement; $i++) {
367 $resultMultipleArray[$currentKey][$pivotColumnName][] = $pivotValue;
375 $firstRow[] = _(
"REPORT_pivot");
376 $twoDimStruct->addColumn($resultSingleArray[$pivotColumnName]);
378 foreach ($singleAttributes as $currentColumnID) {
379 $currentAttribute = $famDoc->
getAttribute($currentColumnID);
380 $firstRow[] = $currentAttribute ? $currentAttribute->getLabel() : $internals[$currentColumnID];
381 $twoDimStruct->addColumn($resultSingleArray[$currentColumnID]);
384 foreach ($multipleAttributes as $currentKey => $currentArrayID) {
389 $twoDimStruct->addColumn($emptyArray);
390 $firstRow[] = _(
"REPORT_pivot");
391 $twoDimStruct->addColumn($resultMultipleArray[$currentKey][$pivotColumnName]);
392 foreach ($currentArrayID as $currentColumnID) {
393 $currentAttribute = $famDoc->
getAttribute($currentColumnID);
394 $firstRow[] = $currentAttribute ? $currentAttribute->getLabel() : $internals[$currentColumnID];
395 $twoDimStruct->addColumn($resultMultipleArray[$currentKey][$currentColumnID]);
399 if ($twoDimStruct->insertRow(0, $firstRow,
true) == null) {
400 var_export($twoDimStruct->getLastErrorMessage());
403 return $twoDimStruct->getArray();
416 $convertFormat = array(
417 "dateFormat" => $dateFormat,
418 'decimalSeparator' => $separator
424 foreach ($columns as $currentColumn) {
425 $currentAttribute = $famDoc->
getAttribute($currentColumn);
426 $firstRow[] = $currentAttribute ? $currentAttribute->getLabel() : $internals[$currentColumn];
428 $twoDimStruct->addRow($firstRow);
429 while ($currentDoc = $search->
nextDoc()) {
431 $currentDoc->refresh();
433 $currentRow = array();
434 foreach ($columns as $currentColumn) {
435 $currentAttribute = $famDoc->
getAttribute($currentColumn);
436 $currentRow[] = $currentAttribute ? $currentAttribute->getTextualValue($currentDoc, -1, $convertFormat) : $this->
convertInternalElement($currentColumn, $currentDoc);
438 $twoDimStruct->addRow($currentRow);
440 return $twoDimStruct->getArray();
445 switch ($internalName) {
447 return strftime(
"%x %T", $doc->
getValue($internalName));
449 $stateValue = $doc->getstate();
450 if (empty($stateValue)) {
453 return _($stateValue);
461 return $doc->
getValue($internalName);