mostly filebased Content Presentation 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.

375 lines
14KB

  1. <?php
  2. namespace Controller;
  3. class Page {
  4. public static $keyword = "page"; // variable in URL (query string)
  5. function index(\Base $f3, $params) {
  6. /////////////////////////////
  7. // what page are we watching?
  8. $page = $params[self::$keyword];
  9. $f3->set('page', $page);
  10. $f3->set('bodyClass',"page-$page");
  11. switch ($page) {
  12. case 'home':
  13. default:
  14. $f3->mset(array(
  15. 'template'=>'tpl/index.html',
  16. 'templateContent'=>'maincontent.html'
  17. ));
  18. self::folder2();
  19. break;
  20. }
  21. }
  22. ////////////////
  23. // interfaces //
  24. ////////////////
  25. function home(\Base $f3) {
  26. self::index($f3, array('page'=>'home'));
  27. }
  28. function secondLevel(\Base $f3,$params) {
  29. self::index($f3, array('page'=>$params['level1']."/".$params['level2']));
  30. }
  31. function thirdLevel(\Base $f3,$params) {
  32. self::index($f3, array('page'=>$params['level1']."/".$params['level2']."/".$params['level3']));
  33. }
  34. function fourthLevel(\Base $f3,$params) {
  35. self::index($f3, array('page'=>$params['level1']."/".$params['level2']."/".$params['level3']."/".$params['level4']));
  36. }
  37. //////////////////
  38. // main program //
  39. //////////////////
  40. function folder2() {
  41. $f3 = \Base::instance();
  42. $page = $f3->get('page');
  43. $f3->set('current_page_folder', $f3->get('CONTENT').$page."/");
  44. $folder = new \Modules\FilesInFolders(
  45. $f3->get('current_page_folder'),
  46. array(
  47. 'content'=>array(
  48. 'secondary'=>'secondary',
  49. 'zzz'=>'hidden',
  50. 'unpublish'=>'hidden'
  51. ),
  52. 'keyfiles'=>array(
  53. 'banner'=>array(
  54. 'until'=>$f3->get("CONTENT"),
  55. 'type'=>'pic'
  56. ),
  57. 'background'=>array(
  58. 'until'=>$f3->get("CONTENT"),
  59. 'type'=>'pic'
  60. ),
  61. 'colors'=>array(
  62. 'until'=>$f3->get("CONTENT"),
  63. 'type'=>'txt'
  64. )
  65. )
  66. )
  67. );
  68. $folder->prepare_files();
  69. if($folder->extras['colors']) {
  70. $folder->structs['default']['txt']['colors']=$folder->extras['colors'];
  71. }
  72. $folder->fill_content();
  73. foreach($f3->get('siteColors') as $k=>$v){
  74. $f3->set($k,
  75. array_key_exists($k,$folder->config)
  76. ? $folder->config[$k]
  77. : $v
  78. );
  79. }
  80. $f3->set('hasBanner',
  81. array_key_exists('includeBanner',$folder->config)
  82. ? $folder->config['includeBanner']
  83. : $f3->get('templateVars.includeBanner')
  84. );
  85. if ($f3->get('hasBanner')) {
  86. $banner = new \Modules\CachedImage($folder->extras['banner']);
  87. $f3->set('banner',$banner->get_src(2000));
  88. }
  89. if ($folder->extras['background']
  90. && !$folder->config['supressBackground']) {
  91. $background = new \Modules\CachedImage($folder->extras['background']);
  92. $f3->set('backgroundImage',$background->get_src(3000));
  93. }
  94. // $f3->set('background',$background);
  95. $f3->set('content', implode("\n", $folder->content['default']));
  96. $f3->set('secondary_content', implode("\n", $folder->content['secondary']));
  97. }
  98. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  99. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  100. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  101. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  102. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  103. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  104. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  105. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  106. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  107. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  108. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  109. // function folder() {
  110. // $f3 = \Base::instance();
  111. // $page = $f3->get('page');
  112. // $folder = $f3->get("CONTENT").$page."/";
  113. //
  114. // $EXT=array(
  115. // 'pic'=>array( 'jpg', 'jpeg', 'png', 'svg' ),
  116. // 'tpl'=>array( 'html', 'htm', 'tpl' ),
  117. // 'txt'=>array( 'txt', 'text', 'md' ),
  118. // 'csv'=>array( 'csv' )
  119. // );
  120. //
  121. // $background = "";
  122. // $banner = "";
  123. // $c1 = array(
  124. // // 'background'=>'',
  125. // 'pic'=>array(),
  126. // 'txt'=>array(),
  127. // 'tpl'=>array(),
  128. // 'csv'=>array()
  129. // );
  130. // $c2 = array(
  131. // // 'background'=>'',
  132. // 'pic'=>array(),
  133. // 'txt'=>array(),
  134. // 'tpl'=>array(),
  135. // 'csv'=>array()
  136. // );
  137. // $primary = array();
  138. // $secondary = array();
  139. //
  140. //
  141. // // collect contents of folder into an organised array
  142. // if(!is_dir($folder)) $folder=$f3->get("CONTENT")."../404/";
  143. // $ls = scandir($folder);
  144. // foreach ($ls as $key=>$f) {
  145. // if(!strncmp($f,'.',1)) continue; // ignore hidden files
  146. // $ex=explode(".", $f);
  147. // $ext=end($ex);
  148. // if(in_array(strtolower($ext), $EXT['pic'])) {
  149. // if($ex[0]=='background') {
  150. // $background=pic_cache($folder.$f,836);
  151. // } elseif($ex[0]=='banner') {
  152. // $banner=$folder.$f;
  153. // } elseif($ex[0]=='secondary') {
  154. // $c2['pic'][$ex[1]] = $folder.$f;
  155. // } else {
  156. // $c1['pic'][$ex[0]] = $folder.$f;
  157. // }
  158. // } elseif(in_array(strtolower($ext), $EXT['txt'])) {
  159. // if($ex[0]=='secondary') {
  160. // $c2['txt'][$ex[1]] = $folder.$f;
  161. // } else {
  162. // $c1['txt'][$ex[0]] = $folder.$f;
  163. // }
  164. // } elseif(in_array(strtolower($ext), $EXT['tpl'])) {
  165. // if($ex[0]=='secondary') {
  166. // $c2['tpl'][$ex[1]] = $folder.$f;
  167. // } else {
  168. // $c1['tpl'][$ex[0]] = $folder.$f;
  169. // }
  170. // } elseif (in_array(strtolower($ext), $EXT['csv'])) {
  171. // if($ex[0]=='secondary') {
  172. // $c2['csv'][$ex[1]] = $folder.$f;
  173. // } else {
  174. // $c1['csv'][$ex[0]] = $folder.$f;
  175. // }
  176. // } else { }
  177. // }
  178. //
  179. // if(!$banner) {
  180. // $banner = self::search_up("banner", array($folder,$f3->get("CONTENT")), $EXT['pic']);
  181. // }
  182. //
  183. // // compose elements based on the organised array
  184. // $md = new \Parsedown();
  185. // foreach($c1['txt'] as $key=>$file) {
  186. // $str = file_get_contents($file);
  187. // $str = self::linkify($str);
  188. // $str = self::get_config_from_content($str);
  189. // $str = $md->text($str);
  190. // $str = sprintf("<div class='post'>%s</div>", $str);
  191. // $primary[$key] = sprintf("<div class=\"item %s %s\">%s</div>", $page,$key,$str);
  192. // }
  193. // foreach($c1['tpl'] as $key=>$file) {
  194. // $str = file_get_contents($file);
  195. // $str = \Template::instance()->render($file);
  196. // $str = self::linkify($str);
  197. // if(array_key_exists($key,$c1['pic'])) {
  198. // $str = sprintf("%s\n%s",
  199. // \Modules\Pictures::makeImageLink($c1['pic'][$key]),
  200. // $str);
  201. // unset($c1['pic'][$key]);
  202. // }
  203. // $primary[$key] = sprintf("<div class=\"item %s %s\">%s</div>", $page ,$key,$str);
  204. // }
  205. // foreach($c1['pic'] as $key=>$file) {
  206. // $primary[$key] = sprintf("<img src=\"$file\" />");
  207. // }
  208. // foreach($c1['csv'] as $key=>$file) {
  209. // $csv = new \Modules\Ography($file,TRUE);
  210. // // $c1sv->filter_field("file");
  211. // $str="<table>";
  212. // foreach($csv->entries as $entry) {
  213. // $tmp="";
  214. // foreach($entry as $key=>$value) {
  215. // $tmp .= sprintf("<td class=\"%s\">%s</td>", $key, $value);
  216. // }
  217. // $str .= sprintf("<tr>%s</tr>",$tmp);
  218. // }
  219. // $str.="</table>";
  220. // $primary[$key] = $str;
  221. // }
  222. //
  223. // foreach($c2['txt'] as $key=>$file) {
  224. // $str = file_get_contents($file);
  225. // $str = self::linkify($str);
  226. // $str = self::get_config_from_content($str);
  227. // $str = $md->text($str);
  228. // $str = sprintf("<div class='post'>%s</div>", $str);
  229. // $secondary[$key] = sprintf("<div class=\"item %s %s\">%s</div>", $page,$key,$str);
  230. // }
  231. // foreach($c2['tpl'] as $key=>$file) {
  232. // $str = file_get_contents($file);
  233. // $str = \Template::instance()->render($file);
  234. // $str = self::linkify($str);
  235. // if(array_key_exists($key,$c2['pic'])) {
  236. // $str = sprintf("%s\n%s",
  237. // \Modules\Pictures::makeImageLink($c2['pic'][$key]),
  238. // $str);
  239. // unset($c2['pic'][$key]);
  240. // }
  241. // $secondary[$key] = sprintf("<div class=\"item %s %s\">%s</div>", $page ,$key,$str);
  242. // }
  243. // foreach($c2['pic'] as $key=>$file) {
  244. // $secondary[$key] = sprintf("<img src=\"$file\" />");
  245. // }
  246. // foreach($c2['csv'] as $key=>$file) {
  247. // $csv = new \Modules\Ography($file,TRUE);
  248. // // $c2sv->filter_field("file");
  249. // $str="<table>";
  250. // foreach($csv->entries as $entry) {
  251. // $tmp="";
  252. // foreach($entry as $key=>$value) {
  253. // $tmp .= sprintf("<td class=\"%s\">%s</td>", $key, $value);
  254. // }
  255. // $str .= sprintf("<tr>%s</tr>",$tmp);
  256. // }
  257. // $str.="</table>";
  258. // $secondary[$key] = $str;
  259. // }
  260. //
  261. // // set template variables
  262. // $f3->set('banner',$banner);
  263. // $f3->set('background',$background);
  264. // $f3->set('content', implode("\n", $primary));
  265. // $f3->set('secondary_content', implode("\n", $secondary));
  266. // }
  267. ////////////////
  268. // recursions //
  269. ////////////////
  270. function search_up($key,$paths,$ext) {
  271. $return = "";
  272. if(count($paths) == 2) {
  273. $current = $paths[0];
  274. $last_try = $paths[1];
  275. $ls=scandir($current);
  276. foreach($ls as $f) {
  277. if(!strncmp($f,'.',1)) continue; // ignore hidden files
  278. $ex=explode(".", $f);
  279. if(in_array(strtolower(end($ex)),$ext)) {
  280. if($ex[0]==$key) {
  281. $return = $current.$f;
  282. break;
  283. }
  284. }
  285. }
  286. }
  287. if ($return) {
  288. return $return;
  289. } elseif($current == $last_try) {
  290. return false;
  291. } else {
  292. $p = explode('/',$current);
  293. array_pop($p);
  294. array_pop($p);
  295. return self::search_up($key,array(implode("/",$p)."/",$last_try),$ext);
  296. }
  297. }
  298. ///////////////////////
  299. // Utility functions //
  300. ///////////////////////
  301. function linkify($string) {
  302. $pattern = "/\s@(\w+)[=]([\w,]+)\s/";
  303. $count = 0;
  304. $new = preg_replace_callback
  305. ($pattern,
  306. function($m){
  307. $f3 = \Base::instance();
  308. return $f3->get('SITE_URL')
  309. .$f3->alias($m[1],self::$keyword."=".$m[2])
  310. ;},
  311. $string);
  312. return $new;
  313. }
  314. function get_config_from_content($string) {
  315. $f3 = \Base::instance();
  316. $f = 0;
  317. $pattern = "/#\+(\w+):\s?(.*)/";
  318. $f = preg_match_all($pattern, $string,$matches,PREG_PATTERN_ORDER);
  319. foreach($matches[0] as $match) {
  320. $string = str_replace($match,"",$string);
  321. }
  322. foreach($matches[1] as $key => $match) {
  323. $f3->set('content_config_'.$match,$matches[2][$key]);
  324. }
  325. return $string;
  326. }
  327. public static function check_folder_for_backgroundimage($folder){
  328. $EXT=array(
  329. 'pic'=>array( 'jpg', 'jpeg', 'png' ),
  330. 'tpl'=>array( 'html', 'htm', 'tpl' ),
  331. 'txt'=>array( 'txt', 'text', 'md' )
  332. );
  333. $ls = scandir($folder);
  334. $background = false;
  335. foreach ($ls as $key=>$f) {
  336. if(!strncmp($f,'.',1)) continue;
  337. $ex=explode(".", $f);
  338. $ext=array_pop($ex);
  339. if(in_array(strtolower($ext), $EXT['pic'])) {
  340. if($ex[0]=='background') {
  341. $background=pic_cache($folder.$f,836);
  342. break;
  343. }
  344. }
  345. }
  346. return $background;
  347. }
  348. }