Plugin for bludit CMS to use "isso" as commenting system
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

270 lines
10 KiB

  1. <?php
  2. class pluginIsso extends Plugin {
  3. private $enable;
  4. public function init()
  5. {
  6. $this->dbFields = array(
  7. 'enablePages'=>0,
  8. 'enablePosts'=>0,
  9. 'enableDefaultHomePage'=>1,
  10. 'pathData'=>'',
  11. 'pathSrc'=>'',
  12. 'pathCss'=>'',
  13. 'dataLang'=>'',
  14. 'dataReplySelf'=>'false',
  15. 'dataRequireAuthor'=>'true',
  16. 'dataRequireEmail'=>'false',
  17. 'dataCommentsTop'=>'10',
  18. 'dataCommentsNested'=>'5',
  19. 'dataRevealClick'=>'5',
  20. 'dataAvatar'=>'true',
  21. 'dataAvatarBg'=>'',
  22. 'dataAvatarFg'=>'',
  23. 'dataVote'=>'true'
  24. );
  25. }
  26. function __construct()
  27. {
  28. parent::__construct();
  29. global $Url;
  30. $this->enable = false;
  31. if( $this->getDbField('enablePosts') && ($Url->whereAmI()=='post') ) {
  32. $this->enable = true;
  33. }
  34. elseif( $this->getDbField('enablePages') && ($Url->whereAmI()=='page') ) {
  35. $this->enable = true;
  36. }
  37. elseif( $this->getDbField('enableDefaultHomePage') && ($Url->whereAmI()=='home') ) {
  38. $this->enable = true;
  39. }
  40. }
  41. public function form()
  42. {
  43. global $Language;
  44. $html = '<div style="margin: 2em 0;">';
  45. $html .= '<i>'.$Language->get('intro-header').'</i>';
  46. $html .= '</div>';
  47. $html .= '<div>';
  48. $html .= '<input name="enablePages" type="hidden" value="0">';
  49. $html .= '<input name="enablePages" id="jsenablePages" type="checkbox" value="1" '.($this->getDbField('enablePages')?'checked':'').'>';
  50. $html .= '<label class="forCheckbox" for="jsenablePages">'.$Language->get('enable-on-page').'</label>';
  51. $html .= '</div>';
  52. $html .= '<div>';
  53. $html .= '<input name="enablePosts" type="hidden" value="0">';
  54. $html .= '<input name="enablePosts" id="jsenablePosts" type="checkbox" value="1" '.($this->getDbField('enablePosts')?'checked':'').'>';
  55. $html .= '<label class="forCheckbox" for="jsenablePosts">'.$Language->get('enable-on-post').'</label>';
  56. $html .= '</div>';
  57. $html .= '<div>';
  58. $html .= '<input name="enableDefaultHomePage" type="hidden" value="0">';
  59. $html .= '<input name="enableDefaultHomePage" id="jsenableDefaultHomePage" type="checkbox" value="1" '.($this->getDbField('enableDefaultHomePage')?'checked':'').'>';
  60. $html .= '<label class="forCheckbox" for="jsenableDefaultHomePage">'.$Language->get('enable-on-default-page').'</label>';
  61. $html .= '</div>';
  62. $html .= '<p><h3>'.$Language->get('required-settings').':</h3></p>';
  63. $html .= '<div>';
  64. $html .= '<label>data-isso: '.$Language->get('path-to-data').'</label>';
  65. $html .= '<input name="pathData" id="jsdata" type="text" value="'.$this->getDbField('pathData').'">';
  66. $html .= '</div>';
  67. $html .= '<div>';
  68. $html .= '<label>src: '.$Language->get('path-to-script').'</label>';
  69. $html .= '<input name="pathSrc" id="jssource" type="text" value="'.$this->getDbField('pathSrc').'">';
  70. $html .= '</div>';
  71. $html .= '<p><h3>'.$Language->get('optional-settings').':</h3></p>';
  72. $html .= '<div>';
  73. $html .= '<label>data-isso-reply-to-self: ['.$Language->get('true').'/'.$Language->get('false').']</label>';
  74. $html .= '<input name="dataReplySelf" id="jsdatareplyself_1" type="radio" value="true" ';
  75. $html .= (($this->getDbField('dataReplySelf') == 'true')?'checked':'').'> '.$Language->get('true').'</br>';
  76. $html .= '<input name="dataReplySelf" id="jsdatareplyself_2" type="radio" value="false" ';
  77. $html .= (($this->getDbField('dataReplySelf') == 'false')?'checked':'').'> '.$Language->get('false').'</br>';
  78. $html .= '</div>';
  79. $html .= '<div>';
  80. $html .= '<label>data-isso-require-author: ['.$Language->get('true').'/'.$Language->get('false').']</label>';
  81. $html .= '<input name="dataRequireAuthor" id="jsdatarequireauthor_1" type="radio" value="true" ';
  82. $html .= (($this->getDbField('dataRequireAuthor') == 'true')?'checked':'').'> '.$Language->get('true').'</br>';
  83. $html .= '<input name="dataRequireAuthor" id="jsdatarequireauthor_2" type="radio" value="false" ';
  84. $html .= (($this->getDbField('dataRequireAuthor') == 'false')?'checked':'').'> '.$Language->get('false').'</br>';
  85. $html .= '</div>';
  86. $html .= '<div>';
  87. $html .= '<label>data-isso-require-email: ['.$Language->get('true').'/'.$Language->get('false').']</label>';
  88. $html .= '<input name="dataRequireEmail" id="jsdatarequireemail_1" type="radio" value="true" ';
  89. $html .= (($this->getDbField('dataRequireEmail') == 'true')?'checked':'').'> '.$Language->get('true').'</br>';
  90. $html .= '<input name="dataRequireEmail" id="jsdatarequireemail_2" type="radio" value="false" ';
  91. $html .= (($this->getDbField('dataRequireEmail') == 'false')?'checked':'').'> '.$Language->get('false').'</br>';
  92. $html .= '</div>';
  93. $html .= '<div>';
  94. $html .= '<label>data-isso-vote: ['.$Language->get('true').'/'.$Language->get('false').']</label>';
  95. $html .= '<input name="dataVote" id="jsdatavote_1" type="radio" value="true" ';
  96. $html .= (($this->getDbField('dataVote') == 'true')?'checked':'').'> '.$Language->get('true').'</br>';
  97. $html .= '<input name="dataVote" id="jsdatavote_2" type="radio" value="false" ';
  98. $html .= (($this->getDbField('dataVote') == 'false')?'checked':'').'> '.$Language->get('false').'</br>';
  99. $html .= '</div>';
  100. $html .= '<div>';
  101. $html .= '<label>data-isso-avatar: ['.$Language->get('true').'/'.$Language->get('false').']</label>';
  102. $html .= '<input name="dataAvatar" id="jsdataavatar_1" type="radio" value="true" ';
  103. $html .= (($this->getDbField('dataAvatar') == 'true')?'checked':'').'> '.$Language->get('true').'</br>';
  104. $html .= '<input name="dataAvatar" id="jsdataavatar_2" type="radio" value="false" ';
  105. $html .= (($this->getDbField('dataAvatar') == 'false')?'checked':'').'> '.$Language->get('false').'</br>';
  106. $html .= '</div>';
  107. $html .= '<div>';
  108. $html .= '<label>data-isso-avatar-fg: ['.$Language->get('color-code').']</label>';
  109. $html .= '<input name="dataAvatarFg" id="jsdataavatarfg" type="text" value="'.$this->getDbField('dataAvatarFg').'">';
  110. $html .= '</div>';
  111. $html .= '<div>';
  112. $html .= '<label>data-isso-avatar-bg: ['.$Language->get('color-code').']</label>';
  113. $html .= '<input name="dataAvatarBg" id="jsdataavatarbg" type="text" value="'.$this->getDbField('dataAvatarBg').'">';
  114. $html .= '</div>';
  115. $html .= '<div>';
  116. $html .= '<label>data-isso-lang: ['.$Language->get('language-code').']</label>';
  117. $html .= '<input name="dataLang" id="jsdatalang" type="text" value="'.$this->getDbField('dataLang').'">';
  118. $html .= '</div>';
  119. $html .= '<div>';
  120. $html .= '<label>data-isso-max-comments-top: ['.$Language->get('number').']</label>';
  121. $html .= '<input name="dataCommentsTop" id="jsdatacommentstop" type="number" min="0" value="'.$this->getDbField('dataCommentsTop').'">';
  122. $html .= '</div>';
  123. $html .= '<div>';
  124. $html .= '<label>data-isso-max-comments-nested: ['.$Language->get('number').']</label>';
  125. $html .= '<input name="dataCommentsNested" id="jsdatacommentsnested" type="number" min="0" value="'.$this->getDbField('dataCommentsNested').'">';
  126. $html .= '</div>';
  127. $html .= '<div>';
  128. $html .= '<label>data-isso-reveal-on-click: ['.$Language->get('number').']</label>';
  129. $html .= '<input name="dataRevealClick" id="jsdatarevealclick" type="number" min="0" value="'.$this->getDbField('dataRevealClick').'">';
  130. $html .= '</div>';
  131. $html .= '<div>';
  132. $html .= '<label>'.$Language->get('path-to-css').'</label>';
  133. $html .= '<input name="pathCss" id="jsdatacss" type="text" value="'.$this->getDbField('pathCss').'">';
  134. $html .= '</div>';
  135. return $html;
  136. }
  137. public function postEnd()
  138. {
  139. global $Language;
  140. if( $this->enable ) {
  141. $html = '<section id="isso-thread"></section>';
  142. $html .= '<noscript>'.$Language->get('no-script-msg');
  143. $html .= '</noscript>';
  144. return $html;
  145. }
  146. return false;
  147. }
  148. public function pageEnd()
  149. {
  150. global $Url;
  151. global $Language;
  152. // Bludit check not-found page after the plugin method construct.
  153. // It's necesary check here the page not-found.
  154. if( $this->enable && !$Url->notFound()) {
  155. $html = '<section id="isso-thread"></section>';
  156. $html .= '<noscript>'.$Language->get('no-script-msg');
  157. $html .= '</noscript>';
  158. return $html;
  159. }
  160. return false;
  161. }
  162. public function siteHead()
  163. {
  164. if( $this->enable ) {
  165. $html = '<style>#isso-thread { margin: 20px 0 !important }</style>';
  166. if( !Text::isEmpty($this->getDbField('pathCss')) ) {
  167. $html .= '<link rel="stylesheet" href="'.trim($this->getDbField('pathCss')).'">';
  168. }
  169. $html .= '<script ';
  170. $html .= 'data-isso="'.$this->getDbField('pathData').'" ';
  171. $html .= 'src="'.$this->getDbField('pathSrc').'" ';
  172. if( $this->getDbField('dataReplySelf') == 'true' || $this->getDbField('dataReplySelf') == 'false' ) {
  173. $html .= 'data-isso-reply-to-self="'.$this->getDbField('dataReplySelf').'" ';
  174. }
  175. if( $this->getDbField('dataRequireAuthor') == 'true' || $this->getDbField('dataRequireAuthor') == 'false' ) {
  176. $html .= 'data-isso-require-author="'.$this->getDbField('dataRequireAuthor').'" ';
  177. }
  178. if( $this->getDbField('dataRequireEmail') == 'true' || $this->getDbField('dataRequireEmail') == 'false' ) {
  179. $html .= 'data-isso-require-email="'.$this->getDbField('dataRequireEmail').'" ';
  180. }
  181. if( $this->getDbField('dataVote') == 'true' || $this->getDbField('dataVote') == 'false' ) {
  182. $html .= 'data-isso-vote="'.$this->getDbField('dataVote').'" ';
  183. }
  184. if( $this->getDbField('dataAvatar') == 'true' || $this->getDbField('dataAvatar') == 'false' ) {
  185. $html .= 'data-isso-avatar="'.$this->getDbField('dataAvatar').'" ';
  186. }
  187. if( !Text::isEmpty($this->getDbField('dataAvatarFg')) ) {
  188. $html .= 'data-isso-avatar-fg="'.trim($this->getDbField('dataAvatarFg')).'" ';
  189. }
  190. if( !Text::isEmpty($this->getDbField('dataAvatarBg')) ) {
  191. $html .= 'data-isso-avatar-bg="'.trim($this->getDbField('dataAvatarBg')).'" ';
  192. }
  193. if( !Text::isEmpty($this->getDbField('dataLang')) ) {
  194. $html .= 'data-isso-lang="'.trim($this->getDbField('dataLang')).'" ';
  195. }
  196. if( Valid::int( $this->getDbField('dataCommentsTop') ) ) {
  197. $html .= 'data-isso-max-comments-top="'.$this->getDbField('dataCommentsTop').'" ';
  198. }
  199. if( Valid::int( $this->getDbField('dataCommentsNested') ) ) {
  200. $html .= 'data-isso-max-comments-nested="'.$this->getDbField('dataCommentsNested').'" ';
  201. }
  202. if( Valid::int( $this->getDbField('dataRevealClick') ) ) {
  203. $html .= 'data-isso-reveal-on-click="'.$this->getDbField('dataRevealClick').'" ';
  204. }
  205. if( !Text::isEmpty($this->getDbField('pathCss')) ) {
  206. $html .= 'data-isso-css="false" ';
  207. } else {
  208. $html .= 'data-isso-css="true" ';
  209. }
  210. $html .= '></script>';
  211. return $html;
  212. }
  213. return false;
  214. }
  215. }