PageRenderTime 53ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/system/application/controllers/xare-split.php

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