protected $stylesheets = array();
protected $logfp = null;
protected $logtime = null;
+ protected $beginBody = array();
+ protected $seoArticles = [];
+ protected $securityPolicyWhitelist = ['*.google-analytics.com', '*.youtube.com', '*.ytimg.com'];
function __construct($book_id, $version = 'stable', $phonegap = false, $phonegapVersion = 'latest', $dir = null, $standalone = false, $appcache = false, $home = false) {
$this->logtime = $currenttime;
}
+ public function addFacebookSDK() {
+ $lang = str_replace('-', '_', $this->book->lang);
+ $e = explode('_', $lang);
+ if (count($e) > 1) {
+ $e[1] = mb_strtoupper($lang);
+ }
+ $lang = implode('_', $e);
+ $this->beginBody[] = "<div id=\"fb-root\"></div>
+<script>(function(d, s, id) {
+ var js, fjs = d.getElementsByTagName(s)[0];
+ if (d.getElementById(id)) return;
+ js = d.createElement(s); js.id = id;
+ js.src = 'https://connect.facebook.net/" . $lang . "/sdk.js#xfbml=1&version=v2.11&appId=132006430233560';
+ fjs.parentNode.insertBefore(js, fjs);
+}(document, 'script', 'facebook-jssdk'));</script>";
+ $this->securityPolicyWhitelist[] = '*.facebook.net';
+ $this->securityPolicyWhitelist[] = 'data:';
+ }
+
public function addPageLabel($page, $label) {
$this->pageLabels[$label] = $page;
}
$this->log('Extras written');
$this->writeJs();
$this->log('Js written');
+ $this->writeSEO();
$this->vdir->sync($delete);
$this->log('Files Synced');
}
$pagesContents = '';
$cache = '';
- if ($this->appcache) {
- $cache = ' manifest="cache.appcache"';
- }
+
+ $beginbody = implode("\n", array_unique($this->beginBody));
$iscript = '';
if (count($this->htmlmultimedia)) {
}
}
+ $securitypolicywhitelist = implode(' ', array_unique($this->securityPolicyWhitelist));
- $vars = array('titre', 'credits', 'statsfooter', 'ga', 'style', 'script', 'pagesContents', 'description', 'print', 'hiddenContents', 'splash', 'cache', 'bgcolor', 'message', 'favicon', 'svg');
+ $vars = array('titre', 'credits', 'statsfooter', 'ga', 'style', 'script', 'pagesContents', 'description', 'print', 'hiddenContents', 'splash', 'cache', 'bgcolor', 'message', 'favicon', 'svg', 'beginbody', 'securitypolicywhitelist');
foreach ($vars as $v) {
$html = str_replace('<!-- $' . $v . ' -->', $$v, $html);
}
}
}
+ function writeSEO() {
+ foreach ($this->seoArticles as $seoArticle) {
+ $html = file_get_contents($this->assets . '/_seo.html');
+ $a = $seoArticle;
+ unset($a['image']);
+ $a['imageurl'] = 'https://workshop.fluidbook.com/services/facebook_thumbnail?id=15793&j=' . time();
+ if ($seoArticle['image']) {
+ $a['imageurl'] .= '&image=' . $seoArticle['image'];
+ }
+ $dim = getimagesize($a['imageurl']);
+ $a['imagewidth'] = $dim[0];
+ $a['imageheight'] = $dim[1];
+ foreach ($a as $k => $v) {
+ $html = str_replace('$' . $k, $v, $html);
+ }
+ $this->vdir->file_put_contents('p/' . $seoArticle['url'], $html);
+ }
+ }
+
protected function writeScorm() {
$manifest = file_get_contents($this->assets . '/_imsmanifest.xml');
if (!$this->book->parametres->scorm_title) {
foreach ($links as $linkData) {
- if (isset($linkData['image']) && $linkData['image']) {
+ if (isset($linkData['image']) && $linkData['image'] && $linkData['type'] != 28) {
$dupData = $linkData;
$dupData['image'] = '';
$dupData['to'] = $linkData['image'];
if (in_array($linkData['type'], $ignore)) {
continue;
}
+ if ($linkData['type'] == 28) {
+ $this->addSEOArticle($linkData['page'], $linkData['to'], $linkData['extra'], $linkData['image']);
+ continue;
+ }
$link = wsHTML5Link::getInstance($this->base62($i), $linkData, $this);
if (is_null($link)) {
continue;
return $css;
}
+ public function addSEOArticle($page, $title, $intro, $image) {
+ $this->seoArticles[$title] = ['title' => $title, 'description' => $intro, 'image' => $image, 'content' => '', 'page' => $page, 'url' => CubeIT_Text::str2URL($title) . '.html'];
+ }
+
public function _sortLinks($a, $b) {
$priorities = array(26 => 1);
}
}
$this->config->rasterizePages = cubeArray::parseRange($this->config->rasterizePages);
+ $this->config->seoArticles = $this->seoArticles;
return 'var DATAS=' . json_encode($this->config) . ';' . "\n";
}
case 27:
return new eventOverlayLink($id, $init, $compiler);
break;
+ case 29:
+ return new facebookLikeLink($id, $init, $compiler);
+ break;
default:
return null;
}
}
public function getAdditionnalContent() {
+ $res = parent::getAdditionnalContent();
+ if ($this->extra) {
+ $res .= ' data-extra="' . $this->extra . '"';
+ }
+
if (in_array($this->to, $this->_share)) {
- return parent::getAdditionnalContent() . ' data-service="' . $this->to . '" ';
+ $res .= ' data-service="' . $this->to . '" ';
} else {
- return /*parent::getClasses()*/
+ $res .= /*parent::getClasses()*/
' data-action="' . $this->to . '" ';
}
+ return $res;
}
public function getDefaultTooltip() {
}
+class facebookLikeLink extends wsHTML5Link {
+ public function getHTMLContent() {
+ $this->compiler->addFacebookSDK();
+ return '<div class="fb-like" data-href="' . $this->to . '" data-layout="standard" data-action="like" data-size="large" data-show-faces="false" data-share="false"></div>';
+ }
+}
+
class htmlMultimediaLink extends wsHTML5Link {
protected $_config = null;