PageRenderTime 283ms CodeModel.GetById 31ms RepoModel.GetById 0ms app.codeStats 1ms

/trunk/manage/controllers/knowledgebase/articlecontroller.php

https://bitbucket.org/pooshonk/esw
PHP | 333 lines | 276 code | 51 blank | 6 comment | 30 complexity | 3073c06b7cd7fe8e4c90a26d5d35a505 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. class Articlecontroller extends Contentelementcontroller{
  3. public function __construct( PeacockCarterFrameworkRegistry $registry, $directCall )
  4. {
  5. $this->registry = $registry;
  6. if( $this->registry->getObject('authenticate')->isAuthorised('content_blog') == true )
  7. {
  8. $this->registry->getObject('adminmenubuilder')->buildMenu( 'knowledgebase.articles' );
  9. $this->registry->getObject('template')->addJavaScriptFile('views/new/js/knowledgebase.js');
  10. if( $this->registry->getURLBit(2) != '' )
  11. {
  12. switch( $this->registry->getURLBit(2) )
  13. {
  14. case 'create':
  15. $this->createArticle();
  16. break;
  17. case 'edit':
  18. $this->editArticle( intval( $this->registry->getURLBit(3) ) );
  19. break;
  20. case 'lookup-group-children':
  21. $this->lookupGroupChildren();
  22. break;
  23. case 'toggle-active':
  24. $this->toggleActiveArticle( intval( $this->registry->getURLBit(3) ) );
  25. break;
  26. case 'delete':
  27. $this->deleteArticle( intval( $this->registry->getURLBit(3) ) );
  28. break;
  29. default:
  30. $this->listArticles();
  31. break;
  32. }
  33. }
  34. else
  35. {
  36. $this->listArticles();
  37. }
  38. }
  39. else
  40. {
  41. $this->registry->getObject('authenticate')->redirectToAuthorised('primary');
  42. }
  43. }
  44. private function createArticle()
  45. {
  46. if( isset( $_POST['createarticle'] ) )
  47. {
  48. require_once( FRAMEWORK_PATH . 'models/content.php');
  49. require_once( FRAMEWORK_PATH . 'models/knowledgebasearticle/knowledgebasearticle.php');
  50. $article = new Knowledgebasearticle( $this->registry, 0);
  51. $article->setName( $this->registry->getObject('db')->sanitizeData( $_POST['page_name'] ) );
  52. $article->setTitle( $this->registry->getObject('db')->sanitizeData( $_POST['page_metatitle'] ) );
  53. $article->setHeading( $this->registry->getObject('db')->sanitizeData( $_POST['page_heading'] ) );
  54. $article->setMetakeywords( $this->registry->getObject('db')->sanitizeData( $_POST['page_metakeywords'] ) );
  55. $article->setMetadescription( $this->registry->getObject('db')->sanitizeData( $_POST['page_metadescription'] ) );
  56. $article->setContent( $this->registry->getObject('db')->sanitizeData( $_POST['page_content'] ) );
  57. $path = '';
  58. $endpath = preg_replace('/[^a-zA-Z0-9\s]/', '', $_POST['page_name'] );
  59. $endpath = str_replace( ' ', '-', $endpath );
  60. $endpath = strtolower( $endpath );
  61. $path = $path . $endpath;
  62. $path = $this->registry->getObject('db')->sanitizeData( $path );
  63. $article->setPath( $path );
  64. $article->setActive(1);
  65. $article->setSecure(0);
  66. $article->generateType();
  67. $article->setAuthor( $this->registry->getObject('authenticate')->getUserID() );
  68. // article
  69. $article->setArticleType( $this->registry->getObject('db')->sanitizeData( $_POST['article_type'] ) );
  70. if( isset( $_POST['article_groups'] ) && !empty( $_POST['article_groups'] ) && is_array( $_POST['article_groups'] ) )
  71. {
  72. $article->setGroupAssociations( $this->registry->getObject('db')->sanitizeData( $_POST['article_groups'] ) );
  73. }
  74. $article->save();
  75. $aid = $article->getID();
  76. if( isset( $_FILES['imageupload'] ) )
  77. {
  78. include( FRAMEWORK_PATH . 'lib/images/imagemanager.class.php');
  79. $manager = new Imagemanager();
  80. if ($manager->loadFromPost( 'imageupload', $this->registry->getSetting('uploads_path') . 'articles/images/' ))
  81. {
  82. $manager->resizeScaleHeight( $this->registry->getSetting('image.large_width') );
  83. $manager->save( $this->registry->getSetting('uploads_path') . 'articles/images/' . str_replace(" ", "", $manager->getName()) );
  84. }
  85. $imageName = str_replace(" ", "", $_FILES['imageupload']['name']);
  86. $insertImage = array();
  87. $insertImage['article_id'] = $this->registry->getObject('db')->sanitizeData( $aid );
  88. $insertImage['image'] = $this->registry->getObject('db')->sanitizeData( $imageName );
  89. $this->registry->getObject('db')->insertRecords( 'article_images', $insertImage );
  90. }
  91. else
  92. {
  93. $insertImage = array();
  94. $insertImage['article_id'] = $this->registry->getObject('db')->sanitizeData( $aid );
  95. $insertImage['image'] = 'equality-south-west_logo.png';
  96. $this->registry->getObject('db')->insertRecords( 'article_images', $insertImage );
  97. }
  98. if( isset( $_FILES['pdfupload'] ) && is_array($_FILES['pdfupload']) && count( $_FILES['pdfupload'] ) > 0 )
  99. {
  100. if( is_uploaded_file( $_FILES[ 'pdfupload' ]['tmp_name'] ) )
  101. {
  102. $path = $this->registry->getSetting('uploads_path') . 'articles/pdfs/';
  103. move_uploaded_file( $_FILES[ 'pdfupload' ]['tmp_name'] , $path . str_replace(" ", "", $_FILES[ 'pdfupload' ]['name']) );
  104. $insert = array();
  105. $insert['article_id'] = $this->registry->getObject('db')->sanitizeData( $aid );
  106. $insert['document'] = $this->registry->getObject('db')->sanitizeData( str_replace(" ", "", $_FILES[ 'pdfupload' ]['name']) );
  107. $this->registry->getObject('db')->insertRecords( 'article_documents', $insert );
  108. }
  109. }
  110. $this->registry->redirectUser(array('knowledgebase'),'Article created','The article has been created and added to the CMS.',true);
  111. }
  112. else
  113. {
  114. // article types
  115. require_once( FRAMEWORK_PATH . 'models/knowledgebasearticle/smodel.php');
  116. $sModel = new Knowledgebaselister( $this->registry );
  117. $this->registry->getObject('template')->getPage()->addTag( 'article_types', array( 'SQL', $sModel->getArticleTypes() ) );
  118. $this->registry->getObject('template')->getPage()->addTag( 'article_parent_groups', array( 'SQL', $sModel->getArticleGroupParents( true ) ) );
  119. foreach( $sModel->getArticleChildGroups() as $key => $data )
  120. {
  121. $data = $this->registry->getObject('db')->cacheData( $data );
  122. $this->registry->getObject('template')->getPage()->addPPTag( 'article_child_groups_' . $key, array( 'DATA', $data ) );
  123. }
  124. $this->registry->getObject('template')->buildFromTemplates('header.tpl.php', 'knowledgebase/articles/create.tpl.php', 'footer.tpl.php');
  125. }
  126. }
  127. private function editArticle( $id )
  128. {
  129. require_once( FRAMEWORK_PATH . 'models/content.php');
  130. require_once( FRAMEWORK_PATH . 'models/knowledgebasearticle/knowledgebasearticle.php');
  131. $article = new Knowledgebasearticle( $this->registry, $id);
  132. if( isset( $_POST['editarticle'] ) )
  133. {
  134. $article->setName( $this->registry->getObject('db')->sanitizeData( $_POST['page_name'] ) );
  135. $article->setTitle( $this->registry->getObject('db')->sanitizeData( $_POST['page_metatitle'] ) );
  136. $article->setHeading( $this->registry->getObject('db')->sanitizeData( $_POST['page_heading'] ) );
  137. $article->setMetakeywords( $this->registry->getObject('db')->sanitizeData( $_POST['page_metakeywords'] ) );
  138. $article->setMetadescription( $this->registry->getObject('db')->sanitizeData( $_POST['page_metadescription'] ) );
  139. $article->setContent( $this->registry->getObject('db')->sanitizeData( $_POST['page_content'] ) );
  140. $article->setActive(1);
  141. $article->setSecure(0);
  142. $article->generateType();
  143. $article->setAuthor( $this->registry->getObject('authenticate')->getUserID() );
  144. // article
  145. $article->setArticleType( $this->registry->getObject('db')->sanitizeData( $_POST['article_type'] ) );
  146. if( isset( $_POST['article_groups'] ) && !empty( $_POST['article_groups'] ) && is_array( $_POST['article_groups'] ) )
  147. {
  148. $article->setGroupAssociations( $this->registry->getObject('db')->sanitizeData( $_POST['article_groups'] ) );
  149. }
  150. $article->save();
  151. $aid = $article->getID();
  152. if( isset( $_FILES['imageupload'] ) )
  153. {
  154. include( FRAMEWORK_PATH . 'lib/images/imagemanager.class.php');
  155. $manager = new Imagemanager();
  156. if ($manager->loadFromPost( 'imageupload', $this->registry->getSetting('uploads_path') . 'articles/images/' ))
  157. {
  158. $manager->resizeScaleHeight( $this->registry->getSetting('image.large_width') );
  159. $manager->save( $this->registry->getSetting('uploads_path') . 'articles/images/' . str_replace(" ", "", $manager->getName()) );
  160. }
  161. $imageName = str_replace(" ", "", $_FILES['imageupload']['name']);
  162. $insertImage = array();
  163. $insertImage['article_id'] = $this->registry->getObject('db')->sanitizeData( $aid );
  164. $insertImage['image'] = $this->registry->getObject('db')->sanitizeData( $imageName );
  165. $this->registry->getObject('db')->insertRecords( 'article_images', $insertImage );
  166. }
  167. if( isset( $_FILES['pdfupload'] ) && is_array($_FILES['pdfupload']) && count( $_FILES['pdfupload'] ) > 0 )
  168. {
  169. if( is_uploaded_file( $_FILES[ 'pdfupload' ]['tmp_name'] ) )
  170. {
  171. $path = $this->registry->getSetting('uploads_path') . 'articles/pdfs/';
  172. move_uploaded_file( $_FILES[ 'pdfupload' ]['tmp_name'] , $path . str_replace(" ", "", $_FILES[ 'pdfupload' ]['name']) );
  173. $insert = array();
  174. $insert['article_id'] = $this->registry->getObject('db')->sanitizeData( $aid );
  175. $insert['document'] = $this->registry->getObject('db')->sanitizeData( str_replace(" ", "", $_FILES[ 'pdfupload' ]['name']) );
  176. $this->registry->getObject('db')->insertRecords( 'article_documents', $insert );
  177. }
  178. }
  179. $this->registry->redirectUser(array('knowledgebase'),'Article updated','The article has been updated and the changes saved to the CMS.',true);
  180. }
  181. else
  182. {
  183. $articleData = $article->getProperties();
  184. $this->registry->getObject('template')->dataToTags( $article->getProperties(), 'art_');
  185. $this->registry->getObject('template')->getPage()->addAdditionalParsingData( 'article_types', 'ID', $article->getArticleType(), 'extra', "selected='selected'");
  186. $uploads_url = $this->registry->getSetting('uploads_url');
  187. $sql="SELECT image FROM article_images WHERE article_id = " . $articleData['id'];
  188. $this->registry->getObject('db')->executeQuery( $sql );
  189. $imagedata = $this->registry->getObject('db')->getRows();
  190. if($imagedata['image']=="")
  191. {
  192. $imagedata['image'] = '<p>No image added</p>';
  193. $this->registry->getObject('template')->dataToTags( $imagedata, 'image_');
  194. }
  195. else
  196. {
  197. $imagedata['image'] ="<a href= " . $uploads_url . "articles/images/" . $imagedata['image'] . " target='blank'><img src= " . $uploads_url . "articles/images/ " .$imagedata['image'] . "/></a>";
  198. $this->registry->getObject('template')->dataToTags( $imagedata, 'image_');
  199. }
  200. $sql="SELECT document FROM article_documents WHERE article_id = " . $articleData['id'];
  201. $this->registry->getObject('db')->executeQuery( $sql );
  202. $pdfdata = $this->registry->getObject('db')->getRows();
  203. if($pdfdata['document']=="")
  204. {
  205. $pdfdata['document'] = '<p>No file added</p>';
  206. $this->registry->getObject('template')->dataToTags( $pdfdata, 'file_');
  207. }
  208. else
  209. {
  210. $pdfdata['document'] = "<a href= " . $uploads_url . 'articles/pdfs/' . $pdfdata['document'] . " target='blank'>Download</a>";
  211. $this->registry->getObject('template')->dataToTags( $pdfdata, 'file_');
  212. }
  213. // article types
  214. require_once( FRAMEWORK_PATH . 'models/knowledgebasearticle/smodel.php');
  215. $sModel = new Knowledgebaselister( $this->registry );
  216. $this->registry->getObject('template')->getPage()->addTag( 'article_types', array( 'SQL', $sModel->getArticleTypes() ) );
  217. $this->registry->getObject('template')->getPage()->addTag( 'article_parent_groups', array( 'SQL', $sModel->getArticleGroupParents(true) ) );
  218. foreach( $sModel->getArticleChildGroups() as $key => $data )
  219. {
  220. $data = $this->registry->getObject('db')->cacheData( $data );
  221. $this->registry->getObject('template')->getPage()->addPPTag( 'article_child_groups_' . $key, array( 'DATA', $data ) );
  222. }
  223. if( $article->getGroupAssociations() )
  224. {
  225. foreach( $article->getGroupAssociations() as $group_id )
  226. {
  227. $this->registry->getObject('template')->getPage()->addPPTag( 'form_checked' . $group_id, "checked='checked'");
  228. }
  229. }
  230. $this->registry->getObject('template')->buildFromTemplates('header.tpl.php', 'knowledgebase/articles/edit.tpl.php', 'footer.tpl.php');
  231. }
  232. }
  233. private function listArticles()
  234. {
  235. $this->buildSiteStructure($extrafields =array(), $extratable =array(), $extraconditions =array());
  236. $offset = intval( $this->registry->getURLBit(2) );
  237. $pagination = $this->registry->pagination( $this->registry->getObject('sitestructure')->getContentSQL(), 20, $offset, 'cache' );
  238. $pagination['actionstr'] = 'article';
  239. $this->paginate( $pagination, $link = 'knowledgebase/page/', $block_name = 'structure' );
  240. // /$this->buildSiteStructure($extrafields =array(), $extratable =array(), $extraconditions =array());
  241. $this->registry->getObject('template')->buildFromTemplates('header.tpl.php', 'knowledgebase/articles/list.tpl.php', 'footer.tpl.php');
  242. }
  243. private function buildSiteStructure( $fields, $tables, $conditions )
  244. {
  245. $this->setType('kb-article');
  246. $this->buildStructure( $fields, $tables, $conditions );
  247. }
  248. private function toggleActiveArticle( $id )
  249. {
  250. $sql = "UPDATE content SET active=1-active WHERE ID={$id}";
  251. $this->registry->getObject('db')->executeQuery( $sql );
  252. header('Location: ' . $this->registry->buildURL(array('knowledgebase'), '', true ) );
  253. exit();
  254. }
  255. private function deleteArticle( $id )
  256. {
  257. require_once( FRAMEWORK_PATH . 'models/content.php');
  258. require_once( FRAMEWORK_PATH . 'models/knowledgebasearticle/knowledgebasearticle.php');
  259. $article = new Knowledgebasearticle( $this->registry, $id);
  260. $article->delete();
  261. $this->registry->redirectUser(array('knowledgebase', 'article'), 'Article deleted', 'The article has now been deleted.',true);
  262. }
  263. private function lookupGroupChildren()
  264. {
  265. if( isset( $_POST['id'] ) )
  266. {
  267. require_once( FRAMEWORK_PATH . 'models/knowledgebasearticle/smodel.php');
  268. $sModel = new Knowledgebaselister( $this->registry );
  269. $groupChildren = $sModel->getArticleGroupChildren( $_POST['id'] );
  270. if( $groupChildren )
  271. {
  272. echo json_encode( $groupChildren );
  273. }
  274. exit();
  275. }
  276. else
  277. {
  278. // error
  279. }
  280. }
  281. }
  282. ?>