*/ // must be run within Dokuwiki if (!defined('DOKU_INC')) die(); if (!defined('DOKU_LF')) define('DOKU_LF', "\n"); if (!defined('DOKU_TAB')) define('DOKU_TAB', "\t"); if (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once DOKU_PLUGIN.'syntax.php'; class syntax_plugin_indobible extends DokuWiki_Syntax_Plugin { function getInfo(){ return confToHash(dirname(__FILE__).'/plugin.info.txt'); } # Required. Define plugin type (see https://www.dokuwiki.org/devel:syntax_plugins) public function getType() { return 'substition'; } # Required. Define paragraph handling (see https://www.dokuwiki.org/devel:syntax_plugins) public function getPType() { return 'normal'; } # Required. Define sort order to determine which plugin trumps which. This value was somewhat arbitrary ## And can be changed without really affecting the plugin. (see https://www.dokuwiki.org/devel:syntax_plugins) public function getSort() { return 275; } #Plugin Part 1 of 3. This is the actual plugin. This part defines how to invoke the plugin public function connectTo($mode) { $this->Lexer->addSpecialPattern('\!\*[a-zA-Z0-9:;\-\s]+\*\!', $mode, 'plugin_indobible'); } #Plugin Part 2 of 3. This is the handler - the workhorse - which takes the matched result from part 1 and modifies it. function handle($match, $state, $pos, Doku_Handler &$handler){ $data = array(); # Blank array # Make sure that we're dealing with the match from our regexp in part 1, which is in the DOKU_LEXER_SPECIAL context. switch ($state) { case DOKU_LEXER_SPECIAL : # Okay awesome, lets process that regexp match. Call my custom function called _fetchBibleVerse(). $match = trim($match, "!*"); $match = trim($match, "*!"); $bibleLink = $this->_getIndoBibleWS($match); # Modified match obtained! Now return that to Dokuwiki for collection in Part 3. return array($bibleLink, $state, $pos); } return $data; # Upon failure, return that blank array } #Plugin part 3 of 3. This takes that result from part 2 and actually renders it to the page. public function render($mode, Doku_Renderer &$renderer, $data) { if ($mode != 'xhtml') { return false; } # If mode is not html, like if it is metadata, just return. //dbglog($data[0]); $renderer->doc .= $data[0]; # Otherwise, fetch that $bibleLink (stored in $data[0]) and pass it to the dokuwiki renderer. return true; } // Method: POST, PUT, GET etc // Data: array("param" => "value") ==> index.php?param=value // source: http://stackoverflow.com/questions/9802788/call-a-rest-api-in-php public function _CallAPI($method, $url, $data = false) { $curl = curl_init(); switch ($method) { case "POST": curl_setopt($curl, CURLOPT_POST, 1); if ($data) curl_setopt($curl, CURLOPT_POSTFIELDS, $data); break; case "PUT": curl_setopt($curl, CURLOPT_PUT, 1); break; default: if ($data) $url = sprintf("%s?%s", $url, http_build_query($data)); } // Optional Authentication: curl_setopt($curl, CURLOPT_HTTPHEADER, array("X-Requested-With: XMLHttpRequest", "Content-Type: application/json; charset=utf-8")); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($curl); curl_close($curl); return $result; } public function _getIndoBibleWS($text) { //buat id unik untuk rujukan ayat $nospace = preg_replace('/[:;\-\s]+/', '', $text); //ganti spasi dengan + $enctext = str_replace(' ', '+', $text); $url = 'http://ws.wiblika.or.id/alkitab/baca/' . $enctext; // ambil json response dari web service $jsonObject = json_decode($this->_CallAPI('GET', $url), true); if ($jsonObject && !isset($jsonObject['code'])) { $isiayat = ''; foreach($jsonObject as $k => $o){ $isiayat .= '(' .$o["Alkitab"]["pasal"] . ':' . $o["Alkitab"]["ayat"] . ') '; $firman = $o["Alkitab"]["firman"]; if (preg_match('/^\/(.)+\*$/', $firman)) { $firman = substr($o["Alkitab"]["firman"], 1, -1); } $isiayat .= str_replace('"', '"', $firman) . '
'; } $txtFocus = ""; if (preg_match('/Chrome/i', $_SERVER['HTTP_USER_AGENT']) || preg_match('/Firefox/i', $_SERVER['HTTP_USER_AGENT'])) { $txtFocus = 'data-trigger="focus"'; } $txt = '' . $text . ''; return $txt; } else { return "[" . $text . "]"; } } }