]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5475 @12:00
authorsoufiane <soufiane@cubedesigners.com>
Mon, 30 Oct 2023 15:22:35 +0000 (16:22 +0100)
committersoufiane <soufiane@cubedesigners.com>
Mon, 30 Oct 2023 15:22:35 +0000 (16:22 +0100)
app/Http/Controllers/Admin/Operations/FluidbookPublication/StatsOperation.php
resources/views/fluidbook_stats/stats.blade.php

index bb51875ab2366277722dfd9be97d114318de91be..d326226db4fadf1c734946733590b639ab8f032a 100644 (file)
@@ -10,6 +10,13 @@ use Carbon\CarbonInterface;
 use Cubist\Matomo\Reporting;
 use Illuminate\Support\Facades\Route;
 use NumberFormatter;
+use voku\helper\HtmlDomParser;
+use Cubist\Excel\Excel;
+use Cubist\Util\Files\Files;
+use Cubist\Util\Str;
+use PhpOffice\PhpSpreadsheet\Exception;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 // __('!! Statistiques')
 trait StatsOperation
@@ -26,6 +33,10 @@ trait StatsOperation
 
         // API testing tool (intended for superadmins only)
         Route::get($segment . '/stats/API/{id?}', $controller . '@statsAPI');
+
+        //
+        Route::post($segment . '/stats/{fluidbook_id}_{hash}/{date?}/{period_override?}/generate', $controller . '@generateExcel')
+            ->name('generateexcel');
     }
 
     protected function setupStatsDefaults()
@@ -44,7 +55,6 @@ trait StatsOperation
         $data['locale'] = app()->getLocale();
         $data['fluidbook'] = $fluidbook;
         return view('fluidbook_stats.stats', $data);
-
     }
 
     protected function redirectMatomo($fluidbook_id, $hash, $period, $date)
@@ -67,4 +77,37 @@ trait StatsOperation
         return view('fluidbook_stats.API', compact('matomo_tokens', 'id'));
     }
 
+    /**
+     * @throws NotFoundExceptionInterface
+     * @throws ContainerExceptionInterface
+     * @throws Exception
+     */
+    public function generateExcel($fluidbook_id, $hash, $date = null, $period_override = null) {
+        $url = route('stats', compact('fluidbook_id', 'hash', 'date', 'period_override'));
+
+        $name = "excel example";
+        $safename = Str::slug($name);
+        $html = HtmlDomParser::file_get_html($url);
+        $tr = $html->find('table', 0)->find('tr');
+        $excelData = [];
+        $keys = [];
+        $values = [];
+
+
+        foreach ($tr as $lines) {
+            $keys[] = $lines->find('td',0)->text;
+            $values[] = trim(preg_replace('/\s\s+/', ' ', $lines->find('td',1)->text));
+        }
+
+        $excelData[] = $keys;
+        $excelData[] = $values;
+
+        //dump($excelData);
+        //die();
+
+        $tmpfile = Files::tempnam() . '.xlsx';
+        Excel::fromArray('name', $excelData, null, $tmpfile);
+        return response()->download($tmpfile, $safename . '.xlsx')->deleteFileAfterSend(true);
+        die();
+    }
 }
index 2fcb958f31ea6364514ff671729dbe1d51f0212d..7c10b8972efc36c591c4af5a61b740f47743cbf4 100644 (file)
         <h2 class="mt-4">
             {{ __('Statistiques') }}
         </h2>
+        <form action="{{ route("generateexcel", compact('fluidbook_id', 'hash') + ['date'=>$start_date.','.$end_date, 'period_override'=>$period]) }}" method="POST">
+            @csrf
+            <button type="submit">Generate</button>
+        </form>
 
         <div data-daterangepicker class="mb-4" style="cursor: pointer"
              title="{{ __('PĂ©riode').' - '.__('Cliquer pour changer l\'intervalle') }}">
             <i class="las la-calendar-week align-middle mr-1" style="font-size: 32px;"></i>
             <span class="date-range-text">
-        {!! $formatted_date_range !!}
-    </span>
+                {!! $formatted_date_range !!}
+            </span>
         </div>