namespace App\Http\Controllers\Admin\Operations\FluidbookCollection;
+use App\Fluidbook\Link\LinksData;
use App\Models\FluidbookAuditLink;
use App\Models\FluidbookCollection;
+use App\Models\FluidbookPublication;
+use Cubist\Excel\Excel;
+use Cubist\Excel\ExcelToArray;
use Cubist\Util\Files\Files;
use Cubist\Util\Str;
use Illuminate\Support\Facades\Route;
protected function setupAuditLinksRoutes($segment, $routeName, $controller)
{
Route::match(['get', 'post'], $segment . '/{id}/export_excel', $controller . '@exportExcel')->name("download_audit_links");
+ Route::match(['get', 'post'], $segment . '/{id}/import_excel', $controller . '@importExcel')->name("import_audit_links");
+ Route::match(['get', 'post'], $segment . '/{cid}/import_excel_confirm', $controller . '@importExcel')->name("import_audit_links");
}
- public function exportExcel($id)
+ protected function importExcel($id)
{
+ ExcelToArray::setCache(protected_path('fluidbookcollection/cache/exceltoarray'));
+ if (!FluidbookCollection::hasPermission($id)) {
+ abort(401);
+ }
+ try {
+ $data = ExcelToArray::excelToArrayIndexKeyVarsAll(request()->file('file')->getPathname());
+ } catch (\Exception $e) {
+ return ['error' => __('Invalid file') . ': ' . $e->getMessage()];
+ }
+
+ $columns = self::_columns();
/** @var FluidbookCollection $collection */
- $collection = FluidbookCollection::find($id);
+ $collection = FluidbookCollection::withoutGlobalScopes()->find($id);
$fluidbooks = $collection->getFluidbooksID();
+ $updates = [];
+ $changedFluidbooks = [];
- $columns = [
+ foreach ($data as $sheet) {
+ foreach ($sheet as $link) {
+ $new_url = $link[$columns['new_url']];
+ if (!$new_url) {
+ continue;
+ }
+ $fluidbook_id = $link[$columns['fluidbook_id']];
+ $link_id = $link[$columns['link_id']];
+ if (in_array($fluidbook_id, $fluidbooks)) {
+ // not in the collection
+ continue;
+ }
+ $changedFluidbooks[] = $fluidbook_id;
+ $updates[] = ['fluidbook_id' => $fluidbook_id, 'link_id' => $link_id, 'new_url' => $new_url];
+ }
+
+ }
+ $allLinks = [];
+ foreach ($changedFluidbooks as $fluidbook_id) {
+ LinksData::getLinksAndRulers($fluidbook_id, $links, $rulers);
+ $allLinks[$fluidbook_id] = $links;
+ }
+
+ $actualUpdates = [];
+ foreach ($updates as $u) {
+ if (!isset($allLinks[$u['fluidbook_id']][$u['link_id']])) {
+ // The links doesnt exists anymore
+ continue;
+ }
+ if ($allLinks[$u['fluidbook_id']][$u['link_id']]['to'] == $u['new_url']) {
+ // The links already has the "new url"
+ continue;
+ }
+ $actualUpdates[] = $u;
+ }
+
+ $count = count($actualUpdates);
+ if ($count == 0) {
+ return ['alert' => __('Ce fichier ne contient aucun lien à modifier')];
+ } else {
+ $cid = rand(1000, 1000000000);
+ cache()->set('auditlinks_confirmation_data_' . $cid, $actualUpdates, 360);
+ return ['confirm' => ['message' => __('Vous vous apprêtez à modifier :nb liens. Veuillez confirmer cette opération.', ['nb' => $count]), 'confirm_action' => url('/fluidbookcollection/' . $cid . '/import_excel_confirm')]];
+ }
+ }
+
+ protected static function _columns()
+ {
+ return [
'fluidbook_id' => 'Fluidbook #',
'page' => 'Page',
'link_id' => 'Link #',
'updated_at' => 'Tested at',
'new_url' => 'New URL',
];
+ }
+
+ public function exportExcel($id)
+ {
+
+ if (!FluidbookCollection::hasPermission($id)) {
+ abort(401);
+ }
+ /** @var FluidbookCollection $collection */
+ $collection = FluidbookCollection::find($id);
+ $fluidbooks = $collection->getFluidbooksID();
+
+
+ $columns = self::_columns();
$links = FluidbookAuditLink::where('http_code', '!=', '200')->whereIn('fluidbook_id', $fluidbooks)->get();
$errors = [];