PageRenderTime 23ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/core/php/quick.php

https://bitbucket.org/BrettZenor/quick
PHP | 232 lines | 187 code | 20 blank | 25 comment | 22 complexity | b128bbc372011a3f2c30ef7803a2d482 MD5 | raw file
  1. <?php
  2. $json_path = "contents.json";
  3. $json_string = quick_file_reference($json_path);
  4. $json = json_decode($json_string, true);
  5. function quick_check_path ($path) {
  6. global $json;
  7. $pages = $json['PAGES'];
  8. $length = count($pages);
  9. $index = null;
  10. for ($i = 0; $i < $length; $i++) {
  11. $url = str_replace(" ", "", strtolower($pages[$i]['TITLE']));
  12. switch ($path) {
  13. case null:
  14. $index = 0;
  15. break;
  16. case '':
  17. $index = 0;
  18. break;
  19. case $url:
  20. $index = $i;
  21. break;
  22. }
  23. }
  24. return $index;
  25. }
  26. $query = $_GET? $_GET['q']: '';
  27. $index = quick_check_path($query);
  28. $attrs = $json['ATTRS'];
  29. $site = $attrs['SITE'];
  30. $types = $attrs['CONTENT-TYPES'];
  31. $pages = $json['PAGES'];
  32. $page = $pages[$index];
  33. $content_type = $page['CONTENT-TYPE'];
  34. function quick_content () {
  35. global $index, $types, $page, $content_type;
  36. $output = "";
  37. $type = $types[$content_type];
  38. $fields = $type['FIELDS'];
  39. for ($i = 0; $i < count($fields); $i++) {
  40. $field = $fields[$i];
  41. $label = $field['LABEL'];
  42. $field_label = $label['TEXT'];
  43. $value = $page['VALUES'][$i];
  44. if ($label['ENABLED']===true) {
  45. if ($label['INLINE']===true) {
  46. $label = "<span class='field-label field-label-".$i."'>".$field_label.": </span>";
  47. } else {
  48. $label = "<div class='field-label field-label-".$i."'>".$field_label.": </div>";
  49. }
  50. } else {
  51. $label = "";
  52. }
  53. $field_label = strtolower($field_label);
  54. switch ($field['TYPE']) {
  55. case 'HTML':
  56. settype($value,"string");
  57. $output .= "<div class='field-html field-html-".$i." field-html-".$field_label."'>".$label.$value."</div>";
  58. break;
  59. case 'TEXT':
  60. settype($value,"string");
  61. $output .= "<div class='field-text field-text-".$i." field-text-".$field_label."'>".$label.htmlentities($value)."</div>";
  62. break;
  63. case 'INTEGER':
  64. settype($value,"integer");
  65. $output .= "<div class='field-integer field-integer-".$i." field-integer-".$field_label."'>".$label.$value."</div>";
  66. break;
  67. case 'IMAGE':
  68. settype($value,"string");
  69. $output .= "<div class='field-image field-image-".$i." field-image-".$field_label."'>".$label."<img src=".$value." /></div>";
  70. break;
  71. }
  72. }
  73. $title = '<h2 class="page-title page-title-'.$index.'">'.$page['TITLE'].'</h2>';
  74. return '<div class="page page-'.$index.'">'.$title.$output.'</div>';
  75. }
  76. /**
  77. * Reference file open and read
  78. */
  79. function quick_file_reference ($path) {
  80. $result = "";
  81. $file = fopen($path,"r") or exit("Unable to open file!");
  82. $result = fread($file,filesize($path));
  83. fclose($file);
  84. return $result;
  85. }
  86. /**
  87. * Validate if the file exists in array otherwise check next file
  88. */
  89. function quick_validate ($options) {
  90. $result = "";
  91. $len = count($options);
  92. for ($i = 0; $i < $len; $i++) {
  93. if (file_exists($options[$i])){
  94. $result = $options[$i];
  95. break;
  96. } else {
  97. $result = false;
  98. }
  99. }
  100. return $result;
  101. }
  102. /**
  103. * Remove the extension
  104. */
  105. function quick_remove_ext ($path, $type) {
  106. $result = "";
  107. $length = strlen($path) - strlen($type);
  108. $path = str_split($path);
  109. for ($i = 0; $i < $length; $i++) {
  110. $result .= $path[$i];
  111. }
  112. return $result;
  113. }
  114. /**
  115. * If field has filetype on it, remove it via quick_remove_filetype
  116. */
  117. function quick_if_has_ext ($path, $type) {
  118. $result = explode($type, strtolower($path));
  119. if (count($result) > 1) {
  120. $result = quick_remove_ext($path, $type);
  121. }
  122. else {
  123. $result = $result[0];
  124. }
  125. return $result;
  126. }
  127. /**
  128. * build multi-item html strings with content
  129. */
  130. function quick_loop($case) {
  131. global $pages, $page, $index;
  132. if ($index === null && $case <> 'menu') {
  133. $case = 'unknown';
  134. }
  135. $result = "";
  136. for($i = 0; $i < count($pages); $i++) {
  137. $title = $pages[$i]['TITLE'];
  138. switch ($case) {
  139. case 'menu':
  140. $url = str_replace(" ", "", strtolower($title));
  141. $link = '<a title="'.$title.'" href="'.$url.'">'.$title.'</a>';
  142. if ($i===$index) {
  143. $result .= '<li class="menu-item menu-item-'.$i.' active">'.$link.'</li>';
  144. } else {
  145. $result .= '<li class="menu-item menu-item-'.$i.'">'.$link.'</li>';
  146. }
  147. break;
  148. case 'mobile':
  149. $result .= '<option value="'.$i.'">'.$title.'</option>';
  150. break;
  151. }
  152. }
  153. switch ($case) {
  154. case 'unknown':
  155. $page_title = '<h2 class="page-title page-title-unknown">Sorry!</h2>';
  156. $result = '<div class="page page-unknown">'.$page_title.'This page doesn\'t exist.</div>';
  157. break;
  158. }
  159. return $result;
  160. }
  161. /**
  162. * render specific items for easy templating base on $case
  163. */
  164. function quick_render($scope, $case){
  165. global $attrs, $pages, $logo;
  166. $result = "";
  167. switch ($case) {
  168. case 'logo':
  169. $result = "<a id='logo' href='./'><img src='".$logo."' /></a>";
  170. break;
  171. case 'title':
  172. $result = "<h1><a href='./'>".$attrs['SITE']['TITLE']."</a></h1>";
  173. break;
  174. case 'slogan':
  175. $result = "<div class='slogan-text'>".$attrs['HEADER']['SLOGAN']."</div>";
  176. break;
  177. case 'menu':
  178. $result = "<ul>".quick_loop('menu')."</ul>";
  179. $result .= "<div id='mobilenav'><select>".quick_loop('mobile')."</select></div>";
  180. break;
  181. case 'content':
  182. $result = quick_content();
  183. break;
  184. case 'copyright':
  185. $result = "<div id='copyright'>&copy;&nbsp;".$attrs['FOOTER']['COPYRIGHT']."&nbsp;<a href='./'>".$attrs['SITE']['TITLE']."</a></div>";
  186. break;
  187. case 'search':
  188. $result = "<div class='search-field'><input type='text' /><input type='submit' value='Search' /></div>";
  189. break;
  190. //universal cases
  191. case 'text':
  192. $result = "<div class='div-text'>".$attrs[$scope]['TEXT']."</div>";
  193. break;
  194. case 'powered':
  195. $result = "<div class='powered-text'>Powered by Quick CMS</div>";
  196. break;
  197. }
  198. return print($result);
  199. }
  200. /**
  201. * Validate the theme
  202. */
  203. $site = $attrs['SITE'];
  204. $title = $index===null? 'Unavailable': $json['PAGES'][$index]['TITLE'];
  205. $theme = quick_if_has_ext($site['THEME'], ".css");
  206. $theme = quick_validate(array("theme/".$theme."/".$theme.".css", "theme/default/default.css", "core/default/theme.css"));
  207. $logo = quick_validate(array("theme/".$theme."/".$attrs['HEADER']['LOGO'], "theme/default/logo.png", "core/default/logo.png"));
  208. /**
  209. * Encoded json for javascript
  210. */
  211. $encoded = json_encode($json);
  212. ?>