]> _ Git - cubeextranet.git/commitdiff
wip #2119 @1.5
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Wed, 27 Jun 2018 17:02:51 +0000 (17:02 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Wed, 27 Jun 2018 17:02:51 +0000 (17:02 +0000)
inc/ws/Util/html5/diaporama/class.ws.html5.links.php

index 687618b72d0087b9cdeb6a21fbafbd6c59233481..5e07a2f2547649680b934374d11cb41fe5bb30af 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
-class wsHTML5Link {
+class wsHTML5Link
+{
 
        public $left;
        public $top;
@@ -47,7 +48,8 @@ class wsHTML5Link {
         * @param wsHTML5Compiler $compiler
         * @return \webLink|\mailLink|\internalLink|\videoLink|\videoPopupLink|\multimediaLink|null|\webVideoLink|\webVideoPopupLink|\actionLink|\basketLink|\colorLink|\imageLink|\fileLink|\htmlMultimediaLink|\normalLink
         */
-       public static function getInstance($id, $init, &$compiler) {
+       public static function getInstance($id, $init, &$compiler)
+       {
                switch ($init['type']) {
                        case 1:
                        case 2:
@@ -109,7 +111,7 @@ class wsHTML5Link {
                                if (stristr($init['to'], '.zip')) {
                                        return new inlineSlideshowLink($id, $init, $compiler);
                                } else {
-                               return new imageLink($id, $init, $compiler);
+                                       return new imageLink($id, $init, $compiler);
                                }
                        case 16:
                                return new fileLink($id, $init, $compiler);
@@ -145,15 +147,16 @@ class wsHTML5Link {
                        case 29:
                                return new facebookLikeLink($id, $init, $compiler);
                                break;
-            case 30:
-                return new slideshowLink($id, $init, $compiler);
-                break;
+                       case 30:
+                               return new slideshowLink($id, $init, $compiler);
+                               break;
                        default:
                                return null;
                }
        }
 
-       public static function getMultimediaInstance($id, $init, &$compiler) {
+       public static function getMultimediaInstance($id, $init, &$compiler)
+       {
                if ($init['alternative'] == '') {
                        return null;
                }
@@ -176,7 +179,8 @@ class wsHTML5Link {
                return null;
        }
 
-       public function __construct($id, $init, &$compiler) {
+       public function __construct($id, $init, &$compiler)
+       {
                $this->_init = $init;
                foreach ($init as $k => $v) {
                        if ($k == 'extra' && CubeIT_Util_Json::isJson($v)) {
@@ -200,11 +204,13 @@ class wsHTML5Link {
                $this->compiler = $compiler;
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return false;
        }
 
-       public function getTooltip() {
+       public function getTooltip()
+       {
                if (is_null($this->infobulle) || !$this->infobulle) {
                        if ($this->getDefaultTooltip() === false) {
                                return;
@@ -214,11 +220,13 @@ class wsHTML5Link {
                return $this->infobulle;
        }
 
-       public function getHTMLContainer() {
+       public function getHTMLContainer()
+       {
                return '<div class="' . $this->getHTMLContainerClass() . '" data-id="' . $this->uid . '" id="l_' . $this->id . '"' . $this->getAdditionnalContent() . '>' . $this->getHTMLContent() . '</div>';
        }
 
-       public function getHTMLContainerClass() {
+       public function getHTMLContainerClass()
+       {
                $res = trim('link ' . $this->class);
                if (intval($this->page) % 2 == 1) {
                        $res .= ' odd';
@@ -237,23 +245,28 @@ class wsHTML5Link {
 
        }
 
-       public function getClasses() {
+       public function getClasses()
+       {
                return array();
        }
 
-       public function copyExternalFile($file, $video = false) {
+       public function copyExternalFile($file, $video = false)
+       {
                $this->compiler->copyLinkFile($file, 'data/links/', $video);
        }
 
-       public function copyExternalDir($dir, $dest = 'data/links') {
+       public function copyExternalDir($dir, $dest = 'data/links')
+       {
                $this->compiler->copyLinkDir($dir, $dest);
        }
 
-       public function unzipFile($file, $moveAssets = false) {
+       public function unzipFile($file, $moveAssets = false)
+       {
                return $this->compiler->unzipFile($file, $moveAssets);
        }
 
-       public function getCssScale() {
+       public function getCssScale()
+       {
                if (is_int($this->page)) {
                        return $this->compiler->getCssScale();
                } else {
@@ -261,12 +274,14 @@ class wsHTML5Link {
                }
        }
 
-       public function getCSSZIndex() {
+       public function getCSSZIndex()
+       {
                $zindex = (($this->zindex + 1) * 1000) - min(999, round(($this->width * $this->height) / 300));
                return 'z-index:' . $zindex . ';';
        }
 
-       public function getCSSContainer() {
+       public function getCSSContainer()
+       {
                if (!($this instanceof contentLink) && intval($this->page) % 2 == 1) {
                        $this->page--;
                        $this->left += $this->compiler->width;
@@ -291,15 +306,18 @@ class wsHTML5Link {
                return $css;
        }
 
-       public function getCSS() {
+       public function getCSS()
+       {
                return '';
        }
 
-       public function keep() {
+       public function keep()
+       {
                return false;
        }
 
-       public static function getUniversalLocation($loc, $css = false) {
+       public static function getUniversalLocation($loc, $css = false)
+       {
                $datas = parse_url($loc);
 
                if (isset($datas['scheme']) && !is_null($datas['scheme']) || strpos($loc, '#') === 0) {
@@ -315,9 +333,11 @@ class wsHTML5Link {
 
 }
 
-class normalLink extends wsHTML5Link {
+class normalLink extends wsHTML5Link
+{
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
                $class = $this->getClasses();
                if ($this->display_area) {
                        $class[] = 'displayArea';
@@ -334,45 +354,55 @@ class normalLink extends wsHTML5Link {
                return '<a href="' . $this->getURL() . '" data-type="' . $this->type . '" target="' . $this->getTarget() . '"' . $tooltip . $c . $this->getAdditionnalContent() . $this->getTrack() . '></a>';
        }
 
-       public function getTrack() {
+       public function getTrack()
+       {
                return '';
        }
 
-       public function getURL() {
+       public function getURL()
+       {
                return '#';
        }
 
-       public function getTarget() {
+       public function getTarget()
+       {
                return '_self';
        }
 
 }
 
-class tooltipLink extends normalLink {
-       public function getClasses() {
+class tooltipLink extends normalLink
+{
+       public function getClasses()
+       {
                return array_merge(array('lazy'), parent::getClasses());
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                $res = parent::getAdditionnalContent();
                $res .= ' data-tooltip-maxwidth="' . $this->compiler->book->parametres->linkTooltipMaxWidth . '" ';
                $res .= ' data-tooltip-touch="1" ';
                return $res;
        }
 
-       public function getURL() {
+       public function getURL()
+       {
                return '#';
        }
 }
 
-class htmlMultimediaImage extends wsHTML5Link {
+class htmlMultimediaImage extends wsHTML5Link
+{
        public $zindex = 2;
 
-       public function getHTMLContainerClass() {
+       public function getHTMLContainerClass()
+       {
                return parent::getHTMLContainerClass() . ' multimedia notinteractive';
        }
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
                $w = $this->width;
                $h = $this->height;
                $this->copyExternalFile($this->alternative);
@@ -382,9 +412,11 @@ class htmlMultimediaImage extends wsHTML5Link {
 
 }
 
-class htmlMultimediaPopupLink extends htmlMultimediaPopupImage {
+class htmlMultimediaPopupLink extends htmlMultimediaPopupImage
+{
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                $i = $this->_init;
                $i['inline'] = true;
                $i['in_popup'] = true;
@@ -398,16 +430,19 @@ class htmlMultimediaPopupLink extends htmlMultimediaPopupImage {
 }
 
 
-class htmlMultimediaPopupImage extends normalLink {
+class htmlMultimediaPopupImage extends normalLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                $this->copyExternalFile($this->alternative);
                $read = ($this->read_mode) ? 'r_' : '';
                return '#/multimedia/' . $read . md5($this->alternative);
        }
 
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                $res = parent::getAdditionnalContent();
                $dim = getimagesize($this->wdir . '/' . $this->alternative);
 
@@ -419,103 +454,127 @@ class htmlMultimediaPopupImage extends normalLink {
                return $res . ' ' . $read . ' data-multimedia="' . rawurlencode($markup) . '" ';
        }
 
-       public function keep() {
+       public function keep()
+       {
                return true;
        }
 
 }
 
-class contentLink extends wsHTML5Link {
+class contentLink extends wsHTML5Link
+{
        public $zindex = 1;
 
-       public function getHTMLContainerClass() {
+       public function getHTMLContainerClass()
+       {
                return parent::getHTMLContainerClass() . ' contentLink';
        }
 
 }
 
-class eventOverlayLink extends wsHTML5Link {
+class eventOverlayLink extends wsHTML5Link
+{
        public $zindex = 3;
 
-       public function getHTMLContainerClass() {
+       public function getHTMLContainerClass()
+       {
                return parent::getHTMLContainerClass() . ' eventOverlayLink';
        }
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
                return '<div></div>';
        }
 }
 
-class webLink extends normalLink {
-       public function getURL() {
+class webLink extends normalLink
+{
+       public function getURL()
+       {
                $res = str_replace('"', '\'', wsHTML5Link::getUniversalLocation($this->to));
                return $res;
        }
 
-       public function getTarget() {
+       public function getTarget()
+       {
                if (strpos($this->getURL(), 'javascript:') === 0) {
                        return '_self';
                }
                return $this->target;
        }
 
-       public function getTrack() {
+       public function getTrack()
+       {
                return ' data-track="' . $this->getURL() . '"';
        }
 
-       public function getCSS() {
+       public function getCSS()
+       {
 
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return 'click to open the link';
        }
 
 }
 
-class mailLink extends normalLink {
+class mailLink extends normalLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                return 'mailto:' . $this->to;
        }
 
-       public function getTrack() {
+       public function getTrack()
+       {
                return ' data-track="' . $this->to . '"';
        }
 
-       public function getTarget() {
+       public function getTarget()
+       {
                return '_self';
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return 'click to send an e-mail';
        }
 
 }
 
-class phoneLink extends mailLink {
+class phoneLink extends mailLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                return 'tel:' . $this->to;
        }
 
-       public function getTarget() {
+       public function getTarget()
+       {
                return '_blank';
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return 'click to call this number';
        }
 
 }
 
-class internalLink extends normalLink {
+class internalLink extends normalLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                return '#/page/' . $this->getPage();
        }
 
-       public function getPage() {
+       public function getPage()
+       {
                if ($this->numerotation == 'physical') {
                        return $this->to;
                } else {
@@ -523,13 +582,15 @@ class internalLink extends normalLink {
                }
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return 'go to page';
        }
 
 }
 
-class videoLink extends wsHTML5Link {
+class videoLink extends wsHTML5Link
+{
        public $zindex = 2;
 
        public static function addVideoJS($compiler)
@@ -537,11 +598,13 @@ class videoLink extends wsHTML5Link {
                $compiler->addVideoJs();
        }
 
-       public function getClasses() {
+       public function getClasses()
+       {
                return array_merge(['videoLink'], parent::getClasses());
        }
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
 
 
                $this->copyExternalFile($this->to, true);
@@ -556,7 +619,8 @@ class videoLink extends wsHTML5Link {
                return $this->makeVideoTag($this, $w, $h, $this->compiler);
        }
 
-       public static function makeVideoTag($linkDatas, $w = null, $h = null, $compiler = null) {
+       public static function makeVideoTag($linkDatas, $w = null, $h = null, $compiler = null)
+       {
                static::addVideoJS($compiler);
 
                $attributes = static::getVideoAttributes($linkDatas, $w, $h, $compiler);
@@ -570,7 +634,8 @@ class videoLink extends wsHTML5Link {
                return $res;
        }
 
-       public static function getVideoAttributes($data, $w = null, $h = null, $compiler = null) {
+       public static function getVideoAttributes($data, $w = null, $h = null, $compiler = null)
+       {
 
                $file = $data->to;
                $e = explode('.', $file);
@@ -601,9 +666,11 @@ class videoLink extends wsHTML5Link {
 
 }
 
-class videoPopupLink extends normalLink {
+class videoPopupLink extends normalLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                $this->copyExternalFile($this->to, true);
                $file = $this->to;
                $e = explode('.', $file);
@@ -613,24 +680,29 @@ class videoPopupLink extends normalLink {
                return '#/video/' . $basename;
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                $this->video_auto_start = true; // Videos should always autoplay
                return ' data-video="' . rawurlencode(videoLink::makeVideoTag($this, null, null, $this->compiler)) . '" ';
        }
 
-       public function keep() {
+       public function keep()
+       {
                return true;
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return 'click to play the video';
        }
 
 }
 
-class audioPopupLink extends normalLink {
+class audioPopupLink extends normalLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                $this->copyExternalFile($this->to, false);
                $file = $this->to;
                $e = explode('.', $file);
@@ -640,23 +712,28 @@ class audioPopupLink extends normalLink {
                return '#/audio/' . $basename;
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                return ' data-audio="' . rawurlencode(audioLink::makeAudioTag($this, null, null, $this->compiler)) . '" ';
        }
 
-       public function keep() {
+       public function keep()
+       {
                return true;
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return 'click to play the audio';
        }
 
 }
 
-class webVideoLink extends videoLink {
+class webVideoLink extends videoLink
+{
 
-       public static function getVideoAttributes($data, $w = null, $h = null, $compiler = null) {
+       public static function getVideoAttributes($data, $w = null, $h = null, $compiler = null)
+       {
                $attributes = parent::getVideoAttributes($data, $w, $h, $compiler);
 
                // Since the admin interface doesn't offer options for setting controls or sound, we will set some defaults here
@@ -668,7 +745,8 @@ class webVideoLink extends videoLink {
                return $attributes;
        }
 
-       public static function getVideoSetup($data, $compiler) {
+       public static function getVideoSetup($data, $compiler)
+       {
 
                static::addVideoJS($compiler); // Ensure videoJS core is included first
 
@@ -721,7 +799,8 @@ class webVideoLink extends videoLink {
 
        }
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
 
                if ($this->video_service !== 0) {
                        return $this->getEmbed();
@@ -733,11 +812,13 @@ class webVideoLink extends videoLink {
                return $this->makeVideoTag($this, $w, $h, $this->compiler);
        }
 
-       public function getEmbed() {
+       public function getEmbed()
+       {
                return '<iframe width="' . $this->width . '" height="' . $this->height . '" src="' . $this->getEmbedURL() . '" frameborder="0" allowfullscreen></iframe>';
        }
 
-       public function getEmbedURL() {
+       public function getEmbedURL()
+       {
                if ($this->video_service == 0) {
                        $url = 'https://www.youtube.com/embed/' . $this->to . '?html5=1';
                } elseif ($this->video_service == 1) {
@@ -753,14 +834,17 @@ class webVideoLink extends videoLink {
 
 }
 
-class actionLink extends internalLink {
+class actionLink extends internalLink
+{
        protected $_share = array('facebook', 'twitter', 'googleplus', 'linkedin', 'viadeo');
 
-       public function getURL() {
+       public function getURL()
+       {
                return '#';
        }
 
-       public function getClasses() {
+       public function getClasses()
+       {
                if (in_array($this->to, $this->_share)) {
                        return array_merge(array('share'), parent::getClasses());
                } else {
@@ -768,7 +852,8 @@ class actionLink extends internalLink {
                }
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                $res = parent::getAdditionnalContent();
                if (is_object($this->extra) || is_array($this->extra)) {
                        $extra = json_encode($this->extra);
@@ -788,7 +873,8 @@ class actionLink extends internalLink {
                return $res;
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return false;
        }
 
@@ -814,24 +900,28 @@ class cartLink extends normalLink
                $res .= 'data-cart-ref="' . $this->to . '" ';
                return $res;
        }
-       }
+}
 
 class remarkableCartLink extends cartLink
 {
 
 }
 
-class colorLink extends contentLink {
+class colorLink extends contentLink
+{
 
-       public function getCSS() {
+       public function getCSS()
+       {
                return 'background-color:' . wsHTML5::colorToCSS($this->to) . ';';
        }
 
 }
 
-class imageLink extends contentLink {
+class imageLink extends contentLink
+{
 
-       public function getCSS() {
+       public function getCSS()
+       {
                $this->copyExternalFile($this->to);
                return 'background-image:url(' . wsHTML5Link::getUniversalLocation($this->to, true) . ');background-size:100% 100%;background-repeat:no-repeat;';
        }
@@ -862,7 +952,8 @@ class inlineSlideshowLink extends contentLink
 class fileLink extends normalLink
 {
 
-       public function getURL() {
+       public function getURL()
+       {
                if ($this->compiler->book->parametres->linkFilePrefix && !CubeIT_Util_Url::isDistant($this->to)) {
                        return $this->compiler->book->parametres->linkFilePrefix . $this->to;
                }
@@ -870,24 +961,29 @@ class fileLink extends normalLink
                return wsHTML5Link::getUniversalLocation($this->to);
        }
 
-       public function getTarget() {
+       public function getTarget()
+       {
                return '_blank';
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return 'click to open the file';
        }
 
 }
 
-class facebookLikeLink extends wsHTML5Link {
-       public function getHTMLContent() {
+class facebookLikeLink extends wsHTML5Link
+{
+       public function getHTMLContent()
+       {
                $this->compiler->addFacebookSDK();
                return '<div class="fb-like" data-href="' . $this->to . '" data-layout="button_count" data-action="like" data-size="large" data-show-faces="false" data-share="false"></div>';
        }
 }
 
-class htmlMultimediaLink extends wsHTML5Link {
+class htmlMultimediaLink extends wsHTML5Link
+{
 
        protected $_config = null;
        protected $_content = '';
@@ -895,7 +991,8 @@ class htmlMultimediaLink extends wsHTML5Link {
        protected $_externalIframe = false;
        public $zindex = 2;
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
                if ($this->_content == '') {
                        $ext = files::getExtension($this->alternative);
 
@@ -978,7 +1075,8 @@ class htmlMultimediaLink extends wsHTML5Link {
                return $this->_content;
        }
 
-       public function getHTMLContainerClass() {
+       public function getHTMLContainerClass()
+       {
                $res = parent::getHTMLContainerClass() . ' multimedia';
                if (!$this->interactive) {
                        $res .= ' notinteractive';
@@ -988,7 +1086,8 @@ class htmlMultimediaLink extends wsHTML5Link {
        }
 
 
-       protected function _correctFiles($dir) {
+       protected function _correctFiles($dir)
+       {
                $files = CubeIT_Files::getRecursiveDirectoryIterator($dir);
                foreach ($files as $f) {
                        /* @var $f SplFileInfo */
@@ -998,7 +1097,8 @@ class htmlMultimediaLink extends wsHTML5Link {
                }
        }
 
-       public function getCSSContainer() {
+       public function getCSSContainer()
+       {
                if (!($this instanceof contentLink) && $this->page % 2 == 1) {
                        $this->page--;
                        $this->left += $this->compiler->width;
@@ -1016,7 +1116,8 @@ class htmlMultimediaLink extends wsHTML5Link {
                return $css;
        }
 
-       public function getCSS() {
+       public function getCSS()
+       {
                $sx = ($this->width / ($this->_config['width'])) * $this->getCssScale();
                $sy = ($this->height / ($this->_config['height'])) * $this->getCssScale();
 
@@ -1029,18 +1130,21 @@ class htmlMultimediaLink extends wsHTML5Link {
                return $res;
        }
 
-       public function getConfigZIP($d) {
+       public function getConfigZIP($d)
+       {
                return $this->compiler->getConfigZIP($d);
        }
 
-       public function getConfigHTML($d, $html) {
+       public function getConfigHTML($d, $html)
+       {
                $res = array('width' => $this->video_width, 'height' => $this->video_height);
                $r = array('html' => $html, 'inject' => array(), 'injectcss' => array(), 'injectjs' => array());
 
                return array_merge($res, $r);
        }
 
-       public function getConfigOAM($d) {
+       public function getConfigOAM($d)
+       {
                $x = simplexml_load_file($d . '/config.xml');
                $config = (string)$x->oamfile['src'];
                $config = str_replace('/Assets', '', $d . '/' . $config);
@@ -1067,7 +1171,8 @@ class htmlMultimediaLink extends wsHTML5Link {
 
 }
 
-class webVideoPopupLink extends videoPopupLink {
+class webVideoPopupLink extends videoPopupLink
+{
 
        //      public function getURL() {
        //              if ($this->video_service == 0) {
@@ -1082,7 +1187,8 @@ class webVideoPopupLink extends videoPopupLink {
        //              return '#/webvideo/' . $service . '/' . $this->to;
        //      }
 
-       public function getURL() {
+       public function getURL()
+       {
 
                switch ($this->video_service) {
                        case 1: // Dailymotion
@@ -1096,16 +1202,19 @@ class webVideoPopupLink extends videoPopupLink {
                }
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                $this->video_auto_start = true; // Videos should always autoplay
                return ' data-video="' . rawurlencode(webVideoLink::makeVideoTag($this, 1280, 720, $this->compiler)) . '" ';
        }
 
 }
 
-class audioLink extends wsHTML5Link {
+class audioLink extends wsHTML5Link
+{
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
                $this->copyExternalFile($this->to);
 
                $w = round($this->width * $this->getCssScale());
@@ -1114,7 +1223,8 @@ class audioLink extends wsHTML5Link {
                return self::makeAudioTag($this, $w, $h, $this->compiler);
        }
 
-       public function getCSSContainer() {
+       public function getCSSContainer()
+       {
                $css = parent::getCSSContainer();
                $css .= '#l_' . $this->id . ' audio{';
                $css .= 'width:' . round($this->width * $this->getCssScale()) . 'px;';
@@ -1124,7 +1234,8 @@ class audioLink extends wsHTML5Link {
                return $css;
        }
 
-       public static function makeAudioTag($linkDatas, $w = null, $h = null, $compiler = null) {
+       public static function makeAudioTag($linkDatas, $w = null, $h = null, $compiler = null)
+       {
                $res = '<audio controls ';
                if ($linkDatas->video_loop) {
                        $res .= 'loop ';
@@ -1139,61 +1250,77 @@ class audioLink extends wsHTML5Link {
 
 }
 
-class wescoLink extends normalLink {
+class wescoLink extends normalLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                return 'https://workshop.fluidbook.com/services/wescoRef?ref=' . $this->to;
        }
 
-       public function getTarget() {
+       public function getTarget()
+       {
                return '_blank';
        }
 
 }
 
-class pierronLink extends normalLink {
+class pierronLink extends normalLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                return 'https://workshop.fluidbook.com/services/pierronRef?ref=' . $this->to;
        }
 
-       public function getTarget() {
+       public function getTarget()
+       {
                return '_blank';
        }
 
 }
 
-class wescoSalesLink extends normalLink {
-       public function getUrl() {
+class wescoSalesLink extends normalLink
+{
+       public function getUrl()
+       {
                return '#';
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                return parent::getAdditionnalContent() . ' data-wescosales-ref="' . $this->to . '" ';
        }
 
-       public function getTooltip() {
+       public function getTooltip()
+       {
                return 'Consulter les ventes de ce produit';
        }
 }
 
-class atlanticDownloadLink extends normalLink {
-       public function getUrl() {
+class atlanticDownloadLink extends normalLink
+{
+       public function getUrl()
+       {
                return '#';
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                return parent::getAdditionnalContent() . ' data-atlanticdownload-ref="' . $this->to . '" ';
        }
 
-       public function getTooltip() {
+       public function getTooltip()
+       {
                return 'Télécharger les documents';
        }
 }
 
-class inpesPopinLink extends htmlMultimediaLink {
+class inpesPopinLink extends htmlMultimediaLink
+{
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
                $this->alternative = $this->to;
                $c = parent::getHTMLContent();
 
@@ -1213,7 +1340,8 @@ class inpesPopinLink extends htmlMultimediaLink {
                return '<a href="#" ' . $tooltip . $c . $this->getAdditionnalContent() . '></a>';
        }
 
-       public function getCSSContainer() {
+       public function getCSSContainer()
+       {
                if (!($this instanceof contentLink) && $this->page % 2 == 1) {
                        $this->page--;
                        $this->left += $this->compiler->width;
@@ -1232,17 +1360,20 @@ class inpesPopinLink extends htmlMultimediaLink {
                return $css;
        }
 
-       public function getCSS() {
+       public function getCSS()
+       {
                return "";
        }
 
-       public function getClasses() {
+       public function getClasses()
+       {
                $res = parent::getClasses();
                $res[] = 'popin';
                return $res;
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                $res = parent::getAdditionnalContent();
                $res .= ' data-src="' . $this->_url . '" data-width="900" data-height="650"';
                return $res;
@@ -1250,40 +1381,49 @@ class inpesPopinLink extends htmlMultimediaLink {
 
 }
 
-class statsTagLink extends wsHTML5Link {
-       public function __construct($id, $init, &$compiler) {
+class statsTagLink extends wsHTML5Link
+{
+       public function __construct($id, $init, &$compiler)
+       {
                parent::__construct($id, $init, $compiler);
                $this->width = 1;
                $this->height = 1;
        }
 
-       public function getHTMLContent() {
+       public function getHTMLContent()
+       {
                return str_replace('%tag%', $this->to, $this->compiler->book->parametres->xiti_page);
        }
 }
 
-class flfLink extends wescoLink {
+class flfLink extends wescoLink
+{
 
-       public function getURL() {
+       public function getURL()
+       {
                return 'https://workshop.fluidbook.com/services/flfRef?ref=' . $this->to;
        }
 
-       public function getTarget() {
+       public function getTarget()
+       {
                return '_blank';
        }
 
-       public function getTooltip() {
+       public function getTooltip()
+       {
                return 'Accéder à la fiche du stage sur notre site flf.fr';
        }
 
 }
 
-class haguenauManifLink extends internalLink {
+class haguenauManifLink extends internalLink
+{
 
-       public function getPage() {
+       public function getPage()
+       {
                $fiches = array(
                        "1" => 7, "2" => 8, "3" => 14, "4" => 16, "5" => 17, "6" => 18, "7" => 19, "8" => 20, "9" => 22, "10" => 23, "11" => 24, "12" => 27
-                       , "13" => 29, "14" => 32, "15" => 34, "16" => 37, "17" => 38, "18" => 41, "19" => 43,
+               , "13" => 29, "14" => 32, "15" => 34, "16" => 37, "17" => 38, "18" => 41, "19" => 43,
                        "20" => 45, "21" => 46, "22" => 52, "23" => 53, "24" => 54, "25" => 56, "26" => 59, "27" => 60
                );
                return $fiches[$this->to];
@@ -1291,21 +1431,26 @@ class haguenauManifLink extends internalLink {
 
 }
 
-class zoomLink extends normalLink {
+class zoomLink extends normalLink
+{
 
-       public function getHTMLContainerClass() {
+       public function getHTMLContainerClass()
+       {
                return parent::getHTMLContainerClass() . ' zoomarea';
        }
 
-       public function getDefaultTooltip() {
+       public function getDefaultTooltip()
+       {
                return 'zoom in';
        }
 
-       public function __construct($id, $init, $compiler) {
+       public function __construct($id, $init, $compiler)
+       {
                parent::__construct($id, $init, $compiler);
        }
 
-       public function getAdditionnalContent() {
+       public function getAdditionnalContent()
+       {
                $res = parent::getAdditionnalContent();
 
                // Data attributes
@@ -1325,7 +1470,8 @@ class zoomLink extends normalLink {
                return $res;
        }
 
-       public function generateImage() {
+       public function generateImage()
+       {
 
                $maxzoom = ((int)$this->to !== 0) ? $this->to : 2; // Max zoom level might not always be set in the link editor
                $maxzoom = min($maxzoom, 4.166666667);
@@ -1387,95 +1533,106 @@ class zoomLink extends normalLink {
        }
 
 
-       public function getClasses() {
+       public function getClasses()
+       {
                return array_merge(['zoomPopup'], parent::getClasses());
        }
 }
 
 
-class slideshowLink extends normalLink {
+class slideshowLink extends normalLink
+{
 
-    protected $path;
-    protected $path_absolute;
+       protected $path;
+       protected $path_absolute;
 
-    public function getURL() {
+       public function getURL()
+       {
 
-        if (empty($this->to)) {
-            return '';
-        }
+               if (empty($this->to)) {
+                       return '';
+               }
 
-        $d = $this->unzipFile($this->to, false);
-        $this->copyExternalDir($d['dir'], $d['fdir']);
+               $d = $this->unzipFile($this->to, false);
+               $this->copyExternalDir($d['dir'], $d['fdir']);
 
-        $this->path = $d['fdir'];
-        $this->path_absolute = $this->compiler->vdir->path($d['fdir']);
+               $this->path = $d['fdir'];
+               $this->path_absolute = $this->compiler->vdir->path($d['fdir']);
 
-        return '#/slideshow/' . $this->uid;
-    }
+               return '#/slideshow/' . $this->uid;
+       }
 
-    public function getAdditionnalContent() {
-        return ' data-slideshow="' . rawurlencode($this->generateSlideshow()) . '" ';
-    }
+       public function getAdditionnalContent()
+       {
+               return ' data-slideshow="' . rawurlencode($this->generateSlideshow()) . '" ';
+       }
 
 //    public function keep() {
 //        return true;
 //    }
 
-    public function getDefaultTooltip() {
-        return 'view slideshow';
-    }
-
-    public function generateSlideshow() {
-
-        $this->compiler->addJs('js/libs/slick/slick.js');
-        $this->compiler->addLess('slick/slick-bundle');
-        $this->compiler->addLess('fluidbook.slideshow');
-
-        $slideshowID = 'slideshow_' . $this->uid;
-        $XML_path = $this->path_absolute . '/slideshow.xml'; // Optional file so it may not exist
-
-        $res = '';
-
-        // If the zip file contained a slideshow.xml file, use that for fetching images and their captions
-        if (file_exists($XML_path)) {
+       public function getDefaultTooltip()
+       {
+               return 'view slideshow';
+       }
 
-            $slideshow_XML = simplexml_load_file($XML_path);
-            $slideshowData = CubeIT_Util_Xml::toObject($slideshow_XML);
-            $slides = [];
+       public function generateSlideshow()
+       {
 
-            foreach ($slideshowData->image as $img) {
-                $full_path = $this->path_absolute . '/' . $img->_name;
-                $slides[$full_path] = $img->_caption;
-            }
+               $this->compiler->addJs('js/libs/slick/slick.js');
+               $this->compiler->addLess('slick/slick-bundle');
+               $this->compiler->addLess('fluidbook.slideshow');
 
-        } else {
-            // Or by default, just get all the images that were in the zip file...
-            $files = glob($this->path_absolute . '/*.jpg'); // ToDo: make this more robust and support multiple extensions (see: https://stackoverflow.com/a/45088052)
+               $extensions = ['jpg', 'png', 'jpeg', 'gif'];
 
-            // Match the format of the array returned from the XML version (path is the key, caption is the value)
-            // Since we have no captions, we will set all the values to null.
-            $slides = array_fill_keys($files, null);
-        }
+               $slideshowID = 'slideshow_' . $this->uid;
+               $XML_path = $this->path_absolute . '/slideshow.xml'; // Optional file so it may not exist
 
-        foreach ($slides as $file => $caption) {
+               $this->getURL();
 
-            $res .= '<div class="fb-slideshow-slide">';
-            $res .= '<img class="fb-slideshow-slide-image" src="'. $this->compiler->vdir->relativePath($file) .'">';
+               $slides = [];
+               // If the zip file contained a slideshow.xml file, use that for fetching images and their captions
+               if (file_exists($XML_path)) {
+                       $slideshow_XML = simplexml_load_file($XML_path);
+                       $slideshowData = CubeIT_Util_Xml::toObject($slideshow_XML);
+                       foreach ($slideshowData->image as $img) {
+                               $full_path = $this->path_absolute . '/' . $img->_name;
+                               $slides[] = ['caption' => $img->_caption, 'path' => $full_path];
+                       }
+               } else {
+                       // Or by default, just get all the images that were in the zip file...
+                       $afiles = CubeIT_Files::getRecursiveDirectoryIterator($this->path_absolute);
 
-            if ($caption) {
-                $res .= '<p class="fb-slideshow-slide-caption">' . $caption . '</p>';
-            }
+                       foreach ($afiles as $afile) {
+                               /** @var SplFileInfo $afile */
+                               if (!$afile->isFile()) {
+                                       continue;
+                               }
+                               $ext = mb_strtolower($afile->getExtension());
+                               if (!in_array($ext, $extensions)) {
+                                       continue;
+                               }
+                               $slides[] = ['path' => $afile->getPathname(), 'caption' => null];
+                       }
+               }
 
-            $res .= '</div>'; // .fb-slideshow-slide
-        }
+               $res = '';
+               foreach ($slides as $slide) {
+                       $res .= '<div class="fb-slideshow-slide">';
+                       $res .= '<img class="fb-slideshow-slide-image" src="' . $this->compiler->vdir->relativePath($slide['path']) . '">';
+                       if (null !== $slide['caption']) {
+                               $res .= '<p class="fb-slideshow-slide-caption">' . $slide['caption'] . '</p>';
+                       }
+                       $res .= '</div>'; // .fb-slideshow-slide
+               }
 
-        $res  = '<div class="fb-slideshow" id="'. $slideshowID .'">'. $res .'</div>';
+               $res = '<div class="fb-slideshow" id="' . $slideshowID . '">' . $res . '</div>';
 
-        $res .= '<script>';
-        $res .= 'fluidbook.slideshow.initSlideshow("'. $slideshowID .'");';
-        $res .= '</script>';
+               $res .= '<script>';
+               $res .= 'fluidbook.slideshow.initSlideshow("' . $slideshowID . '");';
+               $res .= '</script>';
 
-        return $res;
-    }
+               return $res;
+       }
 
 }