index.php
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:9k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. <?php
  2. session_start();
  3. require '../include/MySmarty.class.php';
  4. require '../include/DataBase.php';
  5. require '../include/isolang.inc';
  6. require '../include/imdb.php';
  7. unset($_SESSION['ticket']);
  8. $page = array(
  9. 'start' => max(0, intval(getParam('start'))),
  10. 'limit' => min(100, max($db->userid == 1 ? 100 : 10, getParam('limit'))),
  11. 'total' => 0
  12. );
  13. $text = trim(getParam('text'));
  14. $discs = max(0, intval(getParam('discs')));
  15. $isolang_sel = addslashes(getParam('isolang_sel'));
  16. $format_sel = addslashes(getParam('format_sel'));
  17. $beginswith = getParam('bw');
  18. if(isset($_POST['imdb_url']))
  19. {
  20. if($db->userid == 1 && !empty($_POST['movie_id']))
  21. {
  22. $db->begin();
  23. $imdb_url = getParam('imdb_url');
  24. if(eregi('/title/tt([0-9]+)', $imdb_url, $regs))
  25. {
  26. $imdb_id = intval($regs[1]);
  27. $imdb_titles = array();
  28. $movie_id = null;
  29. $db->query(
  30. "select t2.movie_id, t2.title from `movie` t1 ".
  31. "join `title` t2 on t1.id = t2.movie_id ".
  32. "where imdb = $imdb_id ");
  33. while($row = $db->fetchRow())
  34. {
  35. $movie_id = $row[0];
  36. $imdb_titles[] = $row[1];
  37. }
  38. if(empty($imdb_titles))
  39. {
  40. $imdb_titles = getIMDbTitles($imdb_url);
  41. if(!empty($imdb_titles))
  42. {
  43. $movie_id = storeMovie($imdb_id, $imdb_titles);
  44. }
  45. }
  46. if(!empty($movie_id))
  47. {
  48. foreach($_POST['movie_id'] as $old_movie_id => $tmp)
  49. {
  50. $db->query("update movie_subtitle set movie_id = $movie_id where movie_id = $old_movie_id ");
  51. chkerr();
  52. $db->query("delete from movie where id = $old_movie_id ");
  53. chkerr();
  54. }
  55. }
  56. }
  57. $db->commit();
  58. }
  59. RedirAndExit($_SERVER['PHP_SELF']."?text=$text&discs=$discs&isolang_sel=$isolang_sel&format_sel=$format_sel");
  60. }
  61. $files = array();
  62. for($i = 0; !empty($_GET['name'][$i]) 
  63. && !empty($_GET['hash'][$i]) && ereg('[0-9a-fA-F]{16}', $_GET['hash'][$i]) 
  64. && !empty($_GET['size'][$i]) && ereg('[0-9a-fA-F]{16}', $_GET['size'][$i]);
  65. $i++)
  66. {
  67. $name = $_GET['name'][$i];
  68. $hash = $_GET['hash'][$i];
  69. $size = $_GET['size'][$i];
  70. $files[] = array('name' => $name, 'hash' => $hash, 'size' => $size);
  71. }
  72. $smarty->assign('files', $files);
  73. if(isset($_GET['del']))
  74. {
  75. $ms_id = intval($_GET['del']);
  76. $succeeded = false;
  77. if($db->count("movie_subtitle where id = $ms_id && userid = {$db->userid}") > 0)
  78. {
  79. $db->query("delete from movie_subtitle where id = $ms_id");
  80. $succeeded = true;
  81. }
  82. $smarty->assign('message', $succeeded ? 'Subtitle was removed successfully.' : 'Could not remove this subtitle!');
  83. }
  84. else if(!empty($files))
  85. {
  86. foreach($files as $file)
  87. {
  88. $db->query( // close your eyes now...
  89. "select SQL_CALC_FOUND_ROWS * from movie where id in ".
  90. " (select distinct movie_id from movie_subtitle where subtitle_id in ".
  91. "  (select id from subtitle where id in ".
  92. "   (select distinct subtitle_id from file_subtitle where file_id in ".
  93. "    (select id from file where hash = '{$file['hash']}' && size = '{$file['size']}')))) ".
  94. "limit {$page['start']}, {$page['limit']} ");
  95. chkerr();
  96. while($row = $db->fetchRow())
  97. $movies[$row['id']] = $row;
  98. }
  99. }
  100. else
  101. {
  102. if(empty($text)) $text = '*';
  103. $db_text = ereg_replace('([_%])', '\1', $text);
  104. $db_text = str_replace('*', '%', $db_text);
  105. $db_text = str_replace('?', '_', $db_text);
  106. $db_text = addslashes($db_text);
  107. if(!$beginswith) $db_text = '%'.$db_text;
  108. // the commented out lines should be ok, but mysql seems unable to do 
  109. // "order by t2.date" when the end result does not contain this field
  110. $db->query(
  111. // "select SQL_CALC_FOUND_ROWS distinct t1.* from movie t1 ".
  112. "select SQL_CALC_FOUND_ROWS distinct t1.id, t1.imdb, (select max(date) from movie_subtitle where movie_id = t1.id) as date from movie t1 " .
  113. "join movie_subtitle t2 on t1.id = t2.movie_id ".
  114. "join subtitle t3 on t2.subtitle_id = t3.id ".
  115. "where t1.id in ".
  116. " ( ".
  117. "select distinct movie_id from title where title like _utf8 '$db_text%' ".
  118. "union ".
  119. "select distinct movie_id from movie_subtitle where name like _utf8 '$db_text%' order by date desc ".
  120. ") ".
  121. "and t1.id in (select distinct movie_id from movie_subtitle where subtitle_id in (select distinct id from subtitle)) ".
  122. (!empty($discs)?" && t3.discs = '$discs' ":"").
  123. (!empty($isolang_sel)?" && t2.iso639_2 = '$isolang_sel' ":"").
  124. (!empty($format_sel)?" && t2.format = '$format_sel' ":"").
  125. // "order by t2.date desc " .
  126. "order by 3 desc ".
  127. "limit {$page['start']}, {$page['limit']} ");
  128. while($row = $db->fetchRow())
  129. $movies[$row['id']] = $row;
  130. chkerr();
  131. }
  132. if(!empty($movies))
  133. {
  134. $db->query("select FOUND_ROWS()");
  135. if($row = $db->fetchRow()) $page['total'] = $row[0];
  136. $page['count'] = count($movies);
  137. chkerr();
  138. $test_movie_id = "t1.movie_id in (".implode(',', array_keys($movies)).")";
  139. // titles
  140. $db->query("select movie_id, title from title t1 where $test_movie_id");
  141. foreach($movies as $id => $movie) $movies[$id]['titles'] = array();
  142. while($row = $db->fetchRow()) $movies[$row['movie_id']]['titles'][] = $row['title'];
  143. chkerr();
  144. // subs
  145. $db->query(
  146. "select ".
  147. " t1.movie_id, t1.id as ms_id, t1.name, t1.userid, t1.date, t1.notes, t1.format, t1.iso639_2, ".
  148. " t2.id, t2.discs, t2.disc_no, t2.downloads, ".
  149. " t3.nick, t3.email, ".
  150. " (select count(*) from file_subtitle where subtitle_id = t2.id && file_id in (select id from file)) as has_file ".
  151. "from movie_subtitle t1 ".
  152. "join subtitle t2 on t1.subtitle_id = t2.id ".
  153. "left outer join user t3 on t1.userid = t3.userid ".
  154. "where $test_movie_id ".
  155. (!empty($discs)?" && t2.discs = '$discs' ":"").
  156. (!empty($isolang_sel)?" && t1.iso639_2 = '$isolang_sel' ":"").
  157. (!empty($format_sel)?" && t1.format = '$format_sel' ":"").
  158. "order by t1.date asc, t2.disc_no asc ");
  159. foreach($movies as $id => $movie) $movies[$id]['subs'] = array();
  160. while($row = $db->fetchRow()) $movies[$row['movie_id']]['subs'][] = $row;
  161. chkerr();
  162. foreach($movies as $id => $movie)
  163. {
  164. foreach($movies[$id]['subs'] as $j => $sub)
  165. {
  166. $movies[$id]['updated'] = max(strtotime($sub['date']), isset($movies[$id]['updated']) ? $movies[$id]['updated'] : 0);
  167. $movies[$id]['subs'][$j]['language'] = empty($isolang[$sub['iso639_2']]) ? 'Unknown' : $isolang[$sub['iso639_2']];
  168. $movies[$id]['subs'][$j]['files'] = array();
  169. if($movies[$id]['subs'][$j]['nick'] == null)
  170. {
  171. $movies[$id]['subs'][$j]['nick'] = 'Anonymous';
  172. $movies[$id]['subs'][$j]['email'] = '';
  173. }
  174. if(!empty($movies[$id]['subs'][$j]['has_file']))
  175. {
  176. foreach($files as $file)
  177. {
  178. $cnt = $db->count(
  179. "file_subtitle where subtitle_id = {$movies[$id]['subs'][$j]['id']} && file_id in ".
  180. " (select id from file where hash = '{$file['hash']}' && size = '{$file['size']}') ");
  181. if($cnt > 0)
  182. {
  183. $movies[$id]['subs'][$j]['files'][] = $file;
  184. $movies[$id]['found_file'] = true;
  185. break;
  186. }
  187. }
  188. }
  189. }
  190. if(empty($movies[$id]['titles']) || empty($movies[$id]['subs']))
  191. {
  192. unset($movies[$id]);
  193. }
  194. }
  195. // TODO: maybe we should prefer movies having imdb link a bit more?
  196. function cmp($a, $b)
  197. {
  198. if(isset($a['found_file']) && !isset($b['found_file'])) return -1;
  199. if(!isset($a['found_file']) && isset($b['found_file'])) return +1;
  200. return $b['updated'] - $a['updated'];
  201. }
  202. usort($movies, 'cmp');
  203. }
  204. if(isset($movies))
  205. {
  206. if(empty($movies)) $smarty->assign('message', 'No matches were found');
  207. $smarty->assign('movies', $movies);
  208. $page['index'] = array();
  209. if($page['limit'] < $page['total'])
  210. {
  211. $min = max(intval($page['start']/$page['limit']) - 9, 0);
  212. $max = min(intval($page['start']/$page['limit']) + 9, intval(($page['total']-1)/$page['limit']));
  213. for(; $min <= $max; $min++) $page['index'][] = $min*$page['limit'];
  214. }
  215. if(!empty($page['index']))
  216. {
  217. $page['has_less'] = $page['index'][0] > 0;
  218. $page['has_more'] = $page['index'][count($page['index'])-1] < ($page['total'] - $page['limit']);
  219. $cur = $page['start'] - $page['start']%$page['limit'];
  220. if($cur > 0) $page['prev'] = $cur - $page['limit'];
  221. if($cur + $page['limit'] < $page['total']) $page['next'] = $cur + $page['limit'];
  222. }
  223. $smarty->assign('page', $page);
  224. $search = array();
  225. if(!empty($text)) $search['text'] = $text;
  226. if(!empty($discs)) $search['discs'] = $discs;
  227. if(!empty($isolang_sel)) $search['isolang_sel'] = $isolang_sel;
  228. if(!empty($format_sel)) $search['format_sel'] = $format_sel;
  229. if(!empty($beginswith)) $search['bw'] = $beginswith;
  230. $q = array();
  231. foreach($search as $key => $value) $q[] = "$key=".urlencode("$value");
  232. $search['q'] = implode('&', $q);
  233. $smarty->assign('search', $search);
  234. }
  235. $smarty->assign('text', $text);
  236. $smarty->assign('discs', $discs);
  237. $smarty->assign('isolang', $isolang);
  238. $smarty->assign('isolang_sel', $isolang_sel);
  239. $smarty->assign('format', $db->enumsetValues('movie_subtitle', 'format'));
  240. $smarty->assign('format_sel', $format_sel);
  241. $smarty->assign('ticket', $_SESSION['ticket'] = rand(1, 10000000)); // ;)
  242. if(!empty($_REQUEST['player']))
  243. {
  244. $smarty->assign('player', $_REQUEST['player']);
  245. $smarty->display('index.player.tpl');
  246. exit;
  247. }
  248. $index = array();
  249. $index[] = array('mask' => "*", 'label' => 'All');
  250. for($i = ord('A'); $i <= ord('Z'); $i++)
  251. $index[] = array('mask' => chr($i)."*", 'label' => chr($i));
  252. $smarty->assign('index', $index);
  253. $smarty->display('main.tpl');
  254. ?>