New helper methods and new AJAX service
This commit is contained in:
parent
4b31cb0eea
commit
6bc097ce97
4 changed files with 108 additions and 50 deletions
84
action.php
84
action.php
|
@ -17,6 +17,12 @@ if(!defined('DOKU_INC')) die();
|
|||
*/
|
||||
class action_plugin_semantic extends DokuWiki_Action_Plugin {
|
||||
|
||||
private $helper = null;
|
||||
|
||||
public function __construct() {
|
||||
$this->helper =& $this->loadHelper('semantic');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register events
|
||||
*
|
||||
|
@ -40,9 +46,47 @@ class action_plugin_semantic extends DokuWiki_Action_Plugin {
|
|||
$controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'meta_dublin_core');
|
||||
}
|
||||
|
||||
$controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'ajax');
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Export in JSON-LD format
|
||||
*
|
||||
* @param Doku_Event &$event
|
||||
* @return string
|
||||
*/
|
||||
public function ajax(Doku_Event &$event, $param) {
|
||||
|
||||
if ($event->data !== 'plugin_semantic') {
|
||||
return false;
|
||||
}
|
||||
|
||||
//no other ajax call handlers needed
|
||||
$event->stopPropagation();
|
||||
$event->preventDefault();
|
||||
|
||||
global $INPUT;
|
||||
|
||||
$export = $INPUT->str('export');
|
||||
$id = $INPUT->str('id');
|
||||
|
||||
if (! $id) return false;
|
||||
|
||||
$this->helper->getMetadata($id);
|
||||
$json_ld = $this->helper->getJsonLD();
|
||||
|
||||
//if ($INPUT->str('export') == 'json-ld' && $page = $INPUT->str('page') && $json_ld = $this->helper->getJsonLD()) {
|
||||
header('Content-Type: application/ld+json');
|
||||
print json_encode($json_ld);
|
||||
return true;
|
||||
//}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* JSON-LD Event handler
|
||||
*
|
||||
|
@ -50,32 +94,28 @@ class action_plugin_semantic extends DokuWiki_Action_Plugin {
|
|||
*/
|
||||
public function json_ld(Doku_Event &$event, $param) {
|
||||
|
||||
$helper = $this->loadHelper('semantic');
|
||||
global $ID;
|
||||
|
||||
if ($json_ld = $helper->getStructuredData()) {
|
||||
$this->helper->getMetadata($ID);
|
||||
$json_ld = $this->helper->getJsonLD();
|
||||
|
||||
$event->data["script"][] = array (
|
||||
"type" => "application/ld+json",
|
||||
"_data" => json_encode($json_ld),
|
||||
);
|
||||
if (! count($json_ld)) return false;
|
||||
|
||||
}
|
||||
|
||||
if ($json_ld_relations = $helper->getBacklinks()) {
|
||||
$event->data["script"][] = array (
|
||||
"type" => "application/ld+json",
|
||||
"_data" => json_encode($json_ld_relations),
|
||||
);
|
||||
}
|
||||
$event->data["script"][] = array (
|
||||
"type" => "application/ld+json",
|
||||
"_data" => json_encode($json_ld),
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function meta_description(Doku_Event &$event, $params) {
|
||||
|
||||
$helper = $this->loadHelper('semantic');
|
||||
global $ID;
|
||||
|
||||
if ($description = $helper->getDescription()) {
|
||||
$this->helper->getMetadata($ID);
|
||||
|
||||
if ($description = $this->helper->getDescription()) {
|
||||
|
||||
$description = str_replace("\n", ' ', $description);
|
||||
|
||||
|
@ -91,9 +131,11 @@ class action_plugin_semantic extends DokuWiki_Action_Plugin {
|
|||
|
||||
public function meta_author(Doku_Event &$event, $params) {
|
||||
|
||||
$helper = $this->loadHelper('semantic');
|
||||
global $ID;
|
||||
|
||||
if ($author = $helper->getAuthor()) {
|
||||
$this->helper->getMetadata($ID);
|
||||
|
||||
if ($author = $this->helper->getAuthor()) {
|
||||
|
||||
$event->data['meta'][] = array(
|
||||
'name' => 'author',
|
||||
|
@ -107,9 +149,11 @@ class action_plugin_semantic extends DokuWiki_Action_Plugin {
|
|||
|
||||
public function meta_dublin_core(Doku_Event &$event, $params) {
|
||||
|
||||
$helper = $this->loadHelper('semantic');
|
||||
global $ID;
|
||||
|
||||
foreach ($helper->getDublinCore() as $name => $content) {
|
||||
$this->helper->getMetadata($ID);
|
||||
|
||||
foreach ($this->helper->getDublinCore() as $name => $content) {
|
||||
|
||||
if (! $content) continue;
|
||||
|
||||
|
|
58
helper.php
58
helper.php
|
@ -12,12 +12,9 @@ if(!defined('DOKU_INC')) die();
|
|||
class helper_plugin_semantic extends DokuWiki_Plugin {
|
||||
|
||||
private $meta = array();
|
||||
private $page = null;
|
||||
|
||||
public function __construct() {
|
||||
$this->meta = $this->getMetadata();
|
||||
}
|
||||
|
||||
private function getMetadata() {
|
||||
public function getMetadata($page) {
|
||||
|
||||
global $INFO;
|
||||
global $ID;
|
||||
|
@ -25,13 +22,17 @@ class helper_plugin_semantic extends DokuWiki_Plugin {
|
|||
global $auth;
|
||||
global $conf;
|
||||
|
||||
if ((bool) preg_match('/'. trim($this->getConf('excludedPages')) .'/', $ID)) return false;
|
||||
$this->page = cleanID($page);
|
||||
|
||||
if (! $INFO['perm']) return false;
|
||||
$auth_check = auth_quickaclcheck($this->page);
|
||||
|
||||
$this->meta = $INFO['meta'];
|
||||
if ((bool) preg_match('/'. trim($this->getConf('excludedPages')) .'/', $this->page)) return false;
|
||||
|
||||
if (isset($this->meta['semantic']['enabled']) && ! $this->meta['semantic']['enabled']) {
|
||||
if (! $auth_check) return false;
|
||||
|
||||
$this->meta = p_get_metadata($page);
|
||||
|
||||
if (isset($this->meta['plugin']['semantic']['enabled']) && ! $this->meta['plugin']['semantic']['enabled']) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -42,8 +43,9 @@ class helper_plugin_semantic extends DokuWiki_Plugin {
|
|||
}
|
||||
|
||||
public function getSchemaOrgType() {
|
||||
return ((isset($this->meta['semantic']['schema.org']['type']))
|
||||
? $this->meta['semantic']['schema.org']['type']
|
||||
|
||||
return ((isset($this->meta['plugin']['semantic']['schema.org']['type']))
|
||||
? $this->meta['plugin']['semantic']['schema.org']['type']
|
||||
: $this->getConf('defaultSchemaOrgType'));
|
||||
}
|
||||
|
||||
|
@ -88,8 +90,6 @@ class helper_plugin_semantic extends DokuWiki_Plugin {
|
|||
*/
|
||||
public function getStructuredData() {
|
||||
|
||||
global $INFO;
|
||||
global $ID;
|
||||
global $auth;
|
||||
global $conf;
|
||||
|
||||
|
@ -99,17 +99,18 @@ class helper_plugin_semantic extends DokuWiki_Plugin {
|
|||
$type = $this->getSchemaOrgType();
|
||||
$user_data = $auth->getUserData($this->getAuthorID());
|
||||
$license_url = $license['url'];
|
||||
$page_url = wl($ID, '', true);
|
||||
$page_url = wl($this->page, '', true);
|
||||
$image_url = $this->getFirstImageURL();
|
||||
$description = $this->getDescription();
|
||||
$created = date(DATE_W3C, $this->getCreatedDate());
|
||||
$modified = date(DATE_W3C, $this->getModifiedDate());
|
||||
$title = (isset($this->meta['title']) ? $this->meta['title'] : $this->page);
|
||||
|
||||
$json_ld = array(
|
||||
'@context' => 'http://schema.org',
|
||||
'@type' => $type,
|
||||
'headline' => @$this->meta['title'],
|
||||
'name' => @$this->meta['title'],
|
||||
'headline' => $title,
|
||||
'name' => $title,
|
||||
'image' => array($image_url),
|
||||
'datePublished' => $created,
|
||||
'dateCreated' => $created,
|
||||
|
@ -146,11 +147,27 @@ class helper_plugin_semantic extends DokuWiki_Plugin {
|
|||
|
||||
}
|
||||
|
||||
|
||||
public function getJsonLD() {
|
||||
|
||||
$json_ld = array();
|
||||
|
||||
if ($structured_data = $this->getStructuredData()) {
|
||||
$json_ld[] = $structured_data;
|
||||
}
|
||||
|
||||
if ($backlinks = $this->getBacklinks()) {
|
||||
$json_ld[] = $backlinks;
|
||||
}
|
||||
|
||||
return $json_ld;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function getBacklinks() {
|
||||
|
||||
global $ID;
|
||||
|
||||
if (! $backlinks = ft_backlinks($ID)) return false;
|
||||
if (! $backlinks = ft_backlinks($this->page)) return false;
|
||||
|
||||
$json_ld_webpage = array(
|
||||
'@context' => 'http://schema.org',
|
||||
|
@ -169,7 +186,6 @@ class helper_plugin_semantic extends DokuWiki_Plugin {
|
|||
public function getDublinCore() {
|
||||
|
||||
global $conf;
|
||||
global $ID;
|
||||
|
||||
if (! $this->meta) return array();
|
||||
|
||||
|
@ -192,7 +208,7 @@ class helper_plugin_semantic extends DokuWiki_Plugin {
|
|||
'DC.Created' => date(DATE_W3C, $this->getCreatedDate()),
|
||||
'DC.Modified' => date(DATE_W3C, $this->getModifiedDate()),
|
||||
'DC.Date' => date(DATE_W3C, $this->getCreatedDate()),
|
||||
'DC.Identifier' => "urn:$ID",
|
||||
'DC.Identifier' => "urn:" . $this->page,
|
||||
);
|
||||
|
||||
return $dublin_core;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
base semantic
|
||||
author Giuseppe Di Terlizzi
|
||||
email giuseppe.diterlizzi@gmail.com
|
||||
date 2015-11-12
|
||||
date 2015-11-21
|
||||
name Semantic Plugin
|
||||
desc Add Semantic Data in DokuWiki
|
||||
url http://www.dokuwiki.org/plugin:semantic
|
||||
|
|
14
syntax.php
14
syntax.php
|
@ -34,23 +34,21 @@ class syntax_plugin_semantic extends DokuWiki_Syntax_Plugin {
|
|||
|
||||
function render($mode, Doku_Renderer $renderer, $data) {
|
||||
|
||||
if ($mode == 'xthml') {
|
||||
return true; // don't output anything
|
||||
} elseif ($mode == 'metadata') {
|
||||
if ($mode == 'metadata') {
|
||||
|
||||
list($match, $state, $pos) = $data;
|
||||
|
||||
|
||||
|
||||
if ($match == '~~NOSEMANTIC~~') {
|
||||
$renderer->meta['semantic']['enabled'] = false;
|
||||
$renderer->meta['plugin']['semantic']['enabled'] = false;
|
||||
} else {
|
||||
$renderer->meta['semantic']['schema.org']['type'] = trim(str_replace('Schema.org/', '', $match), '~~');
|
||||
$renderer->meta['semantic']['enabled'] = true;
|
||||
$renderer->meta['plugin']['semantic']['schema.org']['type'] = trim(str_replace('Schema.org/', '', $match), '~~');
|
||||
$renderer->meta['plugin']['semantic']['enabled'] = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue