protected static $_aliases = [Link::PAGE_LABEL => Link::ANCHOR];
+ public static $UIDMissing = false;
+
/**
* @throws Exception
*/
'tooltip' => __('Infobulle'), 'numerotation' => __('Numérotation'),
'display_area' => __('Activer la surbrillance'), 'animation_type' => __('Animation à l\'affichage de la page'),
'tracks' => __('Sous-titres'),
- 'video_loop' => __('Video : boucle'), 'video_auto_start' => __('Video : démarrage automatique'), 'video_controls' => __('Vidéo : afficher les contrôles'), 'video_sound_on' => __('Vidéo : activer le son'),'video_autohide'=>__('Video : masquer lorsque non jouée'), 'video_cc' => __('Vidéo : afficher les sous-titres'),
+ 'video_loop' => __('Video : boucle'), 'video_auto_start' => __('Video : démarrage automatique'), 'video_controls' => __('Vidéo : afficher les contrôles'), 'video_sound_on' => __('Vidéo : activer le son'), 'video_autohide' => __('Video : masquer lorsque non jouée'), 'video_cc' => __('Vidéo : afficher les sous-titres'),
'inline' => __('Vidéo : afficher dans la page'), 'video_width' => __('Vidéo : Largeur du popup'), 'video_height' => __('Vidéo : Hauteur du popup'),
'visibility_os' => __('Visible sur les systèmes'),
'interactive' => __('Interactivité'), 'video_service' => __('Webvideo : service'),
if ($fluidbook->isOnePage() && !$meta['onepage']) {
self::_moveToOnePageLinks($r['links'], $r['rulers'], $fluidbook);
}
+ $rulers = self::_UID($r['rulers']);
+ self::$UIDMissing = false;
$links = self::_UID($r['links']);
- $rulers = self::_UID($r['rulers']);
if ($forceDecrypt || can('fluidbook-publication:links:edit-animations')) {
$links = Link::decryptLinks($links);
protected static function _UID($items)
{
$res = [];
+
foreach ($items as $item) {
if (!isset($item['uid']) || empty($item['uid']) || isset($res[$item['uid']])) {
$item['uid'] = self::generateUID();
+ self::$UIDMissing = true;
}
$res[$item['uid']] = $item;
}
/** @var FluidbookPublication $book */
$book = FluidbookPublication::withoutGlobalScopes()->find($book_id);
- $booleans = array('video_loop', 'video_auto_start', 'video_controls', 'video_sound_on', 'video_cc','video_autohide');
+ $booleans = array('video_loop', 'video_auto_start', 'video_controls', 'video_sound_on', 'video_cc', 'video_autohide');
$numbers = ['left', 'top', 'width', 'height'];
$links = [];
--- /dev/null
+<?php
+
+namespace App\Jobs;
+
+use App\Fluidbook\Link\LinksData;
+use App\Models\FluidbookAuditLink;
+use App\Models\FluidbookPublication;
+use App\Models\FluidbookCollection;
+use Fluidbook\Tools\Links\Link as LinkAlias;
+use Illuminate\Support\Arr;
+use Illuminate\Support\Facades\Log;
+
+class AuditLinkRegister extends Base
+{
+ /**
+ * Create a new job instance.
+ */
+ public function __construct()
+ {
+ }
+
+ public function handle()
+ {
+ $publications = Arr::flatten(FluidbookCollection::where('enable_audit', 1)->pluck('publications')->toArray(), 1);
+
+ $publications = array_map(function ($n) {
+ return $n['fluidbook'];
+ }, $publications);
+
+ // Nécessaire pour vérifier si la liste des fluidbooks fourni par les collections
+ // existent vraiment ou s'ils ont été supprimé sans être supprimé dans la collection
+ $publications = FluidbookPublication::whereIn('id', $publications)->pluck('id');
+
+ // Get all links in the audit base
+ $existing = [];
+ foreach (FluidbookAuditLink::all() as $item) {
+ $key = $item->fluidbook_id . '_' . $item->link_id;
+ $existing[$key] = ['fluidbook_id' => $item->fluidbook_id, 'link_id' => $item->link_id, 'page' => $item->page, 'url' => $item->url];
+ }
+
+ foreach ($publications as $publication) {
+ $publication = (int)$publication;
+ $externalLinks = [];
+ // Get all links in current fluidbook
+ // Access to links in $links variable
+ LinksData::getLinksAndRulers($publication, $links, $rulers);
+ if (LinksData::$UIDMissing) {
+ LinksData::saveLinksInFile($publication, false, 'Save after fixing missing UID', $links, $rulers);
+ }
+
+ // We want only url link begin with http or https and webvideo link
+ // We check every link, because almost any can get an http url as destination.
+ $links = array_filter($links, function ($n) {
+ return (preg_match('/^https?:\/\//', trim($n['to']))) || $n['type'] == LinkAlias::WEBVIDEO;
+ });
+
+ foreach ($links as $link) {
+ $link['to'] = trim($link['to']);
+ if (Arr::exists($link, 'video_service')) {
+ if ($link['type'] == LinkAlias::WEBVIDEO && $link['video_service'] === "youtube") {
+ $link['to'] = "https://youtu.be/" . $link['to'];
+ }
+ }
+
+ if (isset($existing[$publication . '_' . $link['uid']])) {
+ $l = $existing[$publication . '_' . $link['uid']];
+ if ($l['url'] == $link['to'] && $l['page'] == $link['page']) {
+ continue;
+ }
+ FluidbookAuditLink::where('fluidbook_id', $publication)->where('link_id', $link['uid'])->delete();
+ }
+
+ $externalLinks[] = [
+ 'link_id' => $link['uid'],
+ 'fluidbook_id' => $publication,
+ 'page' => $link['page'],
+ 'url' => $link['to'],
+ ];
+ }
+
+ if (count($externalLinks) > 0) {
+ FluidbookAuditLink::insert($externalLinks);
+ }
+ Log::info('Parsed fluidbook ' . $publication . ' : found ' . count($externalLinks) . ' links');
+ }
+
+
+ Log::info('Job exécuté avec succès');
+ }
+}
+++ /dev/null
-<?php
-
-namespace App\Jobs;
-
-use App\Fluidbook\Link\LinksData;
-use App\Models\FluidbookAuditLink;
-use App\Models\FluidbookPublication;
-use App\Models\FluidbookCollection;
-use Cubist\Net\Util;
-use Cubist\Util\CommandLine;
-use Cubist\Util\Files\Files;
-use Illuminate\Support\Arr;
-use Illuminate\Support\Facades\Cache;
-use Illuminate\Support\Facades\Log;
-use mysql_xdevapi\Exception;
-
-class registerLinksForAudit extends Base
-{
- /**
- * Create a new job instance.
- */
- public function __construct() {
- }
-
- public function handle()
- {
- $externalLinks = [];
-
- $publications = Arr::flatten(FluidbookCollection::where('enable_audit',1)->pluck('publications')->toArray(), 1);
-
- $publications = array_map(function($n) {
- return $n['fluidbook'];
- }, $publications);
-
- // Nécessaire pour vérifier si la liste des fluidbooks fourni par les collections
- // existent vraiment ou s'ils ont été supprimé sans être supprimé dans la collection
- $publications = FluidbookPublication::whereIn('id',$publications)->pluck('id');
-
- foreach ($publications as $publication) {
- // Get all links in current fluidbook
- // Access to links in $links variable
- LinksData::getLinksAndRulers($publication, $links, $rulers);
-
- // We want only url link begin with http or https and webvideo link
- // type // 10: web video // 2: url
- $links = array_filter($links, function($n){
- return ($n['type'] == 2 && preg_match('/https?:\/\//', $n['to']) ) || $n['type'] == 10;
- });
-
- foreach ($links as $link) {
- if (Arr::exists($link, 'video_service')) {
- if ($link['video_service'] === "youtube") {
- $link['to'] = "https://youtu.be/" . $link['to'];
- }
- }
-
- $externalLinks[] = [
- 'link_id' => $link['uid'],
- 'fluidbook_id' => intval($publication),
- 'page' => intval($link['page']),
- 'url' => $link['to'],
- 'created_at' => date('Y-m-d H:i:s'),
- 'updated_at'=> date('Y-m-d H:i:s')
- ];
- }
- }
-
- FluidbookAuditLink::upsert($externalLinks, ['link_id','fluidbook_id'], ['url','updated_at','page']);
-
- Log::info('Job exécuté avec succès');
- }
-}
{
parent::setFields();
$this->addField('fluidbook_id', Integer::class, 'Fluidbook ID');
- $this->addField('page', Integer::class, 'Fluidbook ID');
+ $this->addField('page', Text::class, 'Fluidbook ID');
$this->addField('link_id', Text::class, 'Link ID');
$this->addField('http_code', Integer::class, 'HTTP Code');
$this->addField('code_date', Datetime::class);
use App\Http\Controllers\Admin\Operations\FluidbookCollection\PreviewOperation;
use App\Http\Controllers\Admin\Operations\FluidbookCollection\SettingsExportOperation;
use App\Jobs\AuditLink;
+use App\Jobs\AuditLinkRegister;
use App\Jobs\FluidbookCollectionRefreshIndex;
use App\Jobs\GenerateDeliveryThumbnailsPreview;
use App\Jobs\registerLinksForAudit;
{
$res = parent::onSaved();
dispatch(new FluidbookCollectionRefreshIndex($this->id));
+ if($this->enable_audit){
+ AuditLinkRegister::dispatch();
+ }
return $res;
}
- public static function runAuditLink($sync = false)
- {
- dispatch_sync(new AuditLink());
- }
-
- public static function registerLinks() {
- dispatch_sync(new registerLinksForAudit());
- }
-
public static function updateHemsleyCollection($data) {
$c = self::where('title','=','Audit Hemsley');
$collection = $c->get();