PageRenderTime 50ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/system/application/controllers/xare.php

https://github.com/xupisco/Xare-a-Link
PHP | 356 lines | 325 code | 31 blank | 0 comment | 16 complexity | 14869d83eb98b5907799f196a04ad957 MD5 | raw file
  1. <?php
  2. class Xare extends Controller {
  3. var $base_dir = "xare-a-link/";
  4. function Xare() {
  5. parent::Controller();
  6. }
  7. function parseURL() {
  8. $url = str_replace($this->base_dir, "", $this->input->server('REQUEST_URI'));
  9. $url = str_replace("/index.html", "", $url);
  10. $aurl = split("/", $url);
  11. $newpath = array();
  12. $page = "page:1";
  13. $sort = "sort:related";
  14. foreach($aurl as $dir) {
  15. if(strpos($dir, "page") !== false || strpos($dir, "sort") !== false) {
  16. $page = (strpos($dir, "page") !== false) ? $dir : "page:1";
  17. $sort = (strpos($dir, "sort") !== false) ? $dir : "sort:related";
  18. } else {
  19. if(strlen($dir)) $newpath[] = $dir;
  20. }
  21. }
  22. $page = array_pop(explode(":", $page));
  23. $page = (is_numeric($page)) ? $page : 1;
  24. $sorta = explode(":", $sort);
  25. $sort_1 = (isset($sorta[1])) ? $sorta[1] : "related";
  26. $parsed['current'] = array_pop($newpath);
  27. $parsed['url'] = $newpath;
  28. $parsed['path'] = implode("/", $newpath);
  29. $parsed['page'] = $page;
  30. $parsed['sort'] = array($sort_1);
  31. return $parsed;
  32. }
  33. function index() {
  34. $url = $this->parseURL();
  35. $this->load->model('xare_model');
  36. $this->load->plugin('pagerank');
  37. $root = $this->xare_model->getContentByParent(0, 0);
  38. $st1 = ($url['sort'][0] == "name") ? "ASC" : "DESC";
  39. $sr = ($url['page'] * 25) - 25;
  40. $parent_ids = $this->xare_model->getParentIDsFromPath($url['path']);
  41. $content = $this->xare_model->getContent($url['current'], $parent_ids);
  42. $tags = $this->xare_model->getContentTags($content->id);
  43. if(!$content) {
  44. show_404();
  45. }
  46. $this->xare_model->updateContentViews($content->id);
  47. $previous = $this->xare_model->getRelationFromContentID($content->id);
  48. $related = $this->xare_model->getContentByParent($content->id, 0, $url['sort'][0], $st1, $sr);
  49. $comments = $this->xare_model->getCommentsByContentID($content->id);
  50. $data['related'] = $related;
  51. $path = implode("/", $url['url']);
  52. $base = ($path) ? $path."/" : "";
  53. $title = "";
  54. if(count($previous)) {
  55. foreach($previous as $row) {
  56. $title .= $row[0]." > ";
  57. }
  58. }
  59. $data['page'] = $url['page'];
  60. $data['sort_1'] = $url['sort'][0];
  61. $data['base'] = $this->base_dir.$base.$url['current'];
  62. $data['previous'] = $previous;
  63. $data['page_title'] = $title.$content->name;
  64. $data['content'] = $content;
  65. $data['tags'] = $tags;
  66. $data['tree'] = $url['url'];
  67. $data['root'] = $root;
  68. $data['comments'] = $comments;
  69. $this->load->view('core/main', $data);
  70. }
  71. function search($t = "s") {
  72. $url = $this->parseURL();
  73. $this->load->model('xare_model');
  74. $this->load->plugin('pagerank');
  75. $qs = $t.":".$this->uri->segment(2);
  76. $data['tags'] = false;
  77. if($t == "u") {
  78. $uid = $this->xare_model->getUIDByLogin($this->uri->segment(2));
  79. if($uid) {
  80. $qs = "u:".$uid;
  81. $tags = $this->xare_model->getUserTags($uid);
  82. $data['tags'] = $tags;
  83. } else {
  84. $qs = "s:Usuário não encotrado.";
  85. }
  86. }
  87. $st1 = ($url['sort'][0] == "name") ? "ASC" : "DESC";
  88. $sr = ($url['page'] * 25) - 25;
  89. $root = $this->xare_model->getContentByParent(0, 0);
  90. $rss = ($this->uri->segment(3) == "feed") ? true : false;
  91. if(!$rss) {
  92. $related = $this->xare_model->getContentByParent(false, 0, $url['sort'][0], $st1, $sr, $qs);
  93. $data['page'] = $url['page'];
  94. $data['sort_1'] = $url['sort'][0];
  95. $data['qs'] = $this->uri->segment(2);
  96. $data['t'] = $t;
  97. $data['related'] = $related;
  98. $data['root'] = $root;
  99. $data['base'] = $this->base_dir.$t."/".$this->uri->segment(2);
  100. $data['page_title'] = "Resultado da busca por: ".$this->uri->segment(2);
  101. } else {
  102. $data['feed'] = $this->xare_model->getContentByParent(false, 0, "name", "ASC", $sr, $qs);
  103. }
  104. $rss = ($this->uri->segment(3) == "feed") ? true : false;
  105. $data['rss'] = true;
  106. $data['feed_name'] = $this->uri->segment(2)."'s links!";
  107. $data['feed_url'] = $this->base_dir.$t."/".$this->uri->segment(2)."/feed";
  108. if($rss) {
  109. $this->load->view('core/feed', $data);
  110. return true;
  111. }
  112. $this->load->view('core/search', $data);
  113. }
  114. function newLink() {
  115. $this->load->model('xare_model');
  116. $path = str_replace("rel=", "", $this->uri->segment(2));
  117. if($path) {
  118. $rel = $this->xare_model->getContent($path);
  119. $rel_p = ($rel->parent != 0) ? $rel->parent.",0" : 0;
  120. $parents = ($rel->parent != 0) ? $path.",".$rel->parent : $path;
  121. } else {
  122. $rel_p = false;
  123. }
  124. $tree = ($rel_p !== false) ? array_reverse(explode(",", $rel_p)) : 0;
  125. if($rel_p !== false) {
  126. for($i = 0; $i < count($tree); $i++) {
  127. $cur = "lvl_".$i;
  128. $$cur = $this->xare_model->getContentByParent($tree[$i])->result();
  129. $data[$cur] = $$cur;
  130. }
  131. }
  132. $next = $this->xare_model->getContentByParent($path);
  133. $showb = 0;
  134. if($next->num_rows()) {
  135. $nd = "lvl_".$i;
  136. $data[$nd] = $next->result();
  137. array_push($tree, $path);
  138. $showb = 1;
  139. }
  140. $data['rel'] = $path;
  141. $data['showb'] = $showb;
  142. $data['parents'] = array_reverse(explode(",", $parents));
  143. $data['parents_cnt'] = count($tree);
  144. $data['page_title'] = "Novo link...";
  145. $this->load->view('core/newlink', $data);
  146. }
  147. function editLink() {
  148. $this->load->model('xare_model');
  149. $path = str_replace("rel=", "", $this->uri->segment(2));
  150. if($path) {
  151. $rel = $this->xare_model->getContent($path);
  152. $rel_p = ($rel->parent != 0) ? $rel->parent.",0" : 0;
  153. $parents = ($rel->parent != 0) ? $path.",".$rel->parent : $path;
  154. } else {
  155. $rel_p = false;
  156. }
  157. $tree = ($rel_p !== false) ? array_reverse(explode(",", $rel_p)) : 0;
  158. $content = $this->xare_model->getContent($path);
  159. if($rel_p !== false) {
  160. for($i = 0; $i < count($tree); $i++) {
  161. $cur = "lvl_".$i;
  162. $$cur = $this->xare_model->getContentByParent($tree[$i])->result();
  163. $data[$cur] = $$cur;
  164. }
  165. }
  166. $next = $this->xare_model->getContentByParent($path);
  167. $showb = 0;
  168. if($next->num_rows()) {
  169. $nd = "lvl_".$i;
  170. $data[$nd] = $next->result();
  171. array_push($tree, $path);
  172. $showb = 1;
  173. }
  174. $data['rel'] = $path;
  175. $data['base'] = $this->getPathFromContentID($path);
  176. $data['content'] = $content;
  177. $data['showb'] = $showb;
  178. $data['parents'] = array_reverse(explode(",", $parents));
  179. $data['parents_cnt'] = count($tree);
  180. $data['page_title'] = "Editing link...";
  181. $this->load->view('core/editlink', $data);
  182. }
  183. function postLink() {
  184. $this->load->model('xare_model');
  185. $this->load->plugin('pagerank');
  186. $link_title = $this->input->post("link_title");
  187. $link_url = $this->input->post("link_url");
  188. $link_desc = $this->input->post("link_desc");
  189. if($link_url != "http://" || $link_url != "0") {
  190. $req = fopen("http://www.gamelib.com.br/pr.php?url=".$link_url, "r");
  191. $link_pr = stream_get_contents($req);;
  192. } else {
  193. $link_pr = "0";
  194. }
  195. $link_url = ($link_url == "http://" || $link_url == "http://0") ? 0 : $link_url;
  196. $parents = $this->input->post("h_parents");
  197. $parents = explode("|||||", $parents);
  198. $flow = 0;
  199. foreach($parents as $dir) {
  200. $p = $dir;
  201. if(strpos($dir, "new_") !== false) {
  202. $d = str_replace("new_", "", $dir);
  203. $new = $this->xare_model->addDir($d, implode(",", array_reverse(explode(",", $flow))));
  204. $p = $new; // new_ID
  205. }
  206. //echo "insert ".$p." com parent = ".$flow."<br />";
  207. $flow = (!$flow) ? $p : $flow.",".$p;
  208. }
  209. // Add link and update relations (ID IN $flow)
  210. $data['parent'] = implode(",", array_reverse(explode(",", $flow)));
  211. $data['parent_name'] = str_replace(" / ", " > ", $this->input->post("n_parents"));
  212. $data['name'] = $link_title;
  213. $data['desc'] = $link_desc;
  214. $data['link'] = ($link_url != 0 && strpos($link_url, "http://") === false) ? "http://".$link_url : $link_url;
  215. $data['pagerank'] = $link_pr;
  216. if(!$this->input->post("h_id")) {
  217. $link = $this->xare_model->addLink($data);
  218. $this->xare_model->addRelation($flow);
  219. } else {
  220. $data['c_parents'] = $this->input->post("h_cparents");
  221. $link = $this->xare_model->editLink($data, $this->input->post("h_id"));
  222. $this->xare_model->updateRelation($flow, $this->input->post("h_cparents"));
  223. }
  224. $goto = $this->getPathFromContentID($link);
  225. header("Location: $goto");
  226. return true;
  227. }
  228. function postComment() {
  229. $data['cid'] = $this->input->post("cmm_content_id");
  230. $data['name'] = $this->input->post("cmm_name");
  231. $data['email'] = $this->input->post("cmm_email");
  232. $data['cmm'] = $this->input->post("cmm_comment");
  233. // Validation
  234. $data['name'] = (strlen($data['name'])) ? $data['name'] : "John Doe";
  235. $data['email'] = (strlen($data['email'])) ? $data['email'] : "john@fox.net";
  236. if($this->input->post("cmm_content_id")) {
  237. $this->load->model("xare_model");
  238. $proceed = $this->xare_model->CR_Comment($data);
  239. if($proceed) $cmm_id = $this->xare_model->addComment($data);
  240. $goto = $this->getPathFromContentID($this->input->post("cmm_content_id"));
  241. header("Location: $goto");
  242. }
  243. }
  244. function getPathFromContentID($id = 0) {
  245. $this->load->model("xare_model");
  246. $rel = $this->xare_model->getRelationFromContentID($id);
  247. $content = $this->xare_model->getContent($id);
  248. $path = "";
  249. foreach($rel as $dir) {
  250. $path .= $dir[1].'/';
  251. }
  252. return $path.$content->name_url;
  253. }
  254. function updateRelations() {
  255. $c = $this->db->query("select id from contents order by ID ASC")->result();
  256. foreach($c as $dir) {
  257. $id = $dir->id;
  258. $rel = $this->db->query("SELECT count(id) as rel FROM contents c where concat('0,', parent, ',0') like '%,$id,%'")->row()->rel;
  259. $u = $this->db->query("SELECT count(id) as users FROM users_links where content_id = $id")->row()->users;
  260. $this->db->query("update contents set related = $rel, users = $u where id = $id");
  261. }
  262. echo "Done...";
  263. }
  264. function goToURLByID() {
  265. $this->load->model("xare_model");
  266. $id = $this->uri->segment(2);
  267. $content = $this->xare_model->getContent($id);
  268. if($content) {
  269. $this->xare_model->updateContentClicks($id);
  270. header("Location: ".$content->link);
  271. } else {
  272. header("Location: ".base_url());
  273. }
  274. }
  275. function parseDirByID() {
  276. $id = $this->uri->segment(2);
  277. if(!$id) header("Location: ".base_url());
  278. $content = $this->getPathFromContentID($id);
  279. header("Location: ".base_url().$content);
  280. return true;
  281. }
  282. }
  283. ?>