<?php
-class wsHTML5Link {
+class wsHTML5Link
+{
public $left;
public $top;
* @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:
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);
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;
}
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)) {
$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;
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';
}
- 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 {
}
}
- 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;
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) {
}
-class normalLink extends wsHTML5Link {
+class normalLink extends wsHTML5Link
+{
- public function getHTMLContent() {
+ public function getHTMLContent()
+ {
$class = $this->getClasses();
if ($this->display_area) {
$class[] = 'displayArea';
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);
}
-class htmlMultimediaPopupLink extends htmlMultimediaPopupImage {
+class htmlMultimediaPopupLink extends htmlMultimediaPopupImage
+{
- public function getAdditionnalContent() {
+ public function getAdditionnalContent()
+ {
$i = $this->_init;
$i['inline'] = true;
$i['in_popup'] = true;
}
-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);
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 {
}
}
- 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)
$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);
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);
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);
}
-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);
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);
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
return $attributes;
}
- public static function getVideoSetup($data, $compiler) {
+ public static function getVideoSetup($data, $compiler)
+ {
static::addVideoJS($compiler); // Ensure videoJS core is included first
}
- public function getHTMLContent() {
+ public function getHTMLContent()
+ {
if ($this->video_service !== 0) {
return $this->getEmbed();
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) {
}
-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 {
}
}
- public function getAdditionnalContent() {
+ public function getAdditionnalContent()
+ {
$res = parent::getAdditionnalContent();
if (is_object($this->extra) || is_array($this->extra)) {
$extra = json_encode($this->extra);
return $res;
}
- public function getDefaultTooltip() {
+ public function getDefaultTooltip()
+ {
return false;
}
$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;';
}
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;
}
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 = '';
protected $_externalIframe = false;
public $zindex = 2;
- public function getHTMLContent() {
+ public function getHTMLContent()
+ {
if ($this->_content == '') {
$ext = files::getExtension($this->alternative);
return $this->_content;
}
- public function getHTMLContainerClass() {
+ public function getHTMLContainerClass()
+ {
$res = parent::getHTMLContainerClass() . ' multimedia';
if (!$this->interactive) {
$res .= ' notinteractive';
}
- protected function _correctFiles($dir) {
+ protected function _correctFiles($dir)
+ {
$files = CubeIT_Files::getRecursiveDirectoryIterator($dir);
foreach ($files as $f) {
/* @var $f SplFileInfo */
}
}
- public function getCSSContainer() {
+ public function getCSSContainer()
+ {
if (!($this instanceof contentLink) && $this->page % 2 == 1) {
$this->page--;
$this->left += $this->compiler->width;
return $css;
}
- public function getCSS() {
+ public function getCSS()
+ {
$sx = ($this->width / ($this->_config['width'])) * $this->getCssScale();
$sy = ($this->height / ($this->_config['height'])) * $this->getCssScale();
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);
}
-class webVideoPopupLink extends videoPopupLink {
+class webVideoPopupLink extends videoPopupLink
+{
// public function getURL() {
// if ($this->video_service == 0) {
// return '#/webvideo/' . $service . '/' . $this->to;
// }
- public function getURL() {
+ public function getURL()
+ {
switch ($this->video_service) {
case 1: // Dailymotion
}
}
- 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());
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;';
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 ';
}
-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();
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;
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;
}
-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];
}
-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
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);
}
- 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;
+ }
}