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

多媒体编程

开发平台:

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. //
  8. $maxtitles = 4;
  9. $maxsubs = 8;
  10. //
  11. if(isset($_GET['clearimdb']))
  12. {
  13. unset($_SESSION['imdb_id']);
  14. unset($_SESSION['imdb_titles']);
  15. RedirAndExit($_SERVER['PHP_SELF']);
  16. }
  17. if(!empty($_GET))
  18. {
  19. session_unset();
  20. $_SESSION['POST'] = $_GET;
  21. $_SESSION['file'] = array();
  22. for($i = 0; !empty($_GET['name'][$i]) 
  23. && !empty($_GET['hash'][$i]) && ereg('[0-9a-fA-F]{16}', $_GET['hash'][$i]) 
  24. && !empty($_GET['size'][$i]) && ereg('[0-9a-fA-F]{16}', $_GET['size'][$i]);
  25. $i++)
  26. {
  27. $file['name'] = $_GET['name'][$i];
  28. $file['hash'] = $_GET['hash'][$i];
  29. $file['size'] = $_GET['size'][$i];
  30. sscanf($_GET['size'][$i], "%x", $file['intsize']);
  31. $_SESSION['file'][$i+1] = $file;
  32. if(!isset($_SESSION['POST']['guessedtitle']))
  33. $_SESSION['POST']['guessedtitle'] = $file['name'];
  34. // TODO: search imdb on name || size || hash -> imdb
  35. }
  36. global $maxsubs;
  37. for($i = 0; $i < $maxsubs; $i++)
  38. $_SESSION['POST']['file_sel'][$i] = $i < count($_SESSION['file']) ? $i+1 : 0;
  39. RedirAndExit($_SERVER['PHP_SELF']);
  40. }
  41. //
  42. function mergeTitles($a, $b)
  43. {
  44. $ret = array();
  45. foreach(array_merge($a, $b) as $title)
  46. {
  47. $skip = false;
  48. foreach($ret as $i => $title0)
  49. {
  50. if(stristr($title, $title0) !== false) {$ret[$i] = $title; $skip = true;}
  51. else if(stristr($title0, $title) !== false) $skip = true;
  52. }
  53. if(!$skip) $ret[] = $title;
  54. }
  55. return $ret;
  56. }
  57. if(isset($_POST['update']) || isset($_POST['submit']))
  58. {
  59. $_SESSION['POST'] = $_POST;
  60. // validation
  61. unset($_SESSION['err']);
  62. $titles = array();
  63. for($i = 0; $i < $maxtitles; $i++)
  64. if($title = trim(strip_tags(getParam('title', $i))))
  65. $titles[] = $title;
  66. $imdb_url = trim(getParam('imdb_url'));
  67. $nick = strip_tags(getParam('nick'));
  68. $email = strip_tags(getParam('email'));
  69. if(!empty($imdb_url))
  70. {
  71. $imdb_titles = array();
  72. if(eregi('/title/tt([0-9]+)', $imdb_url, $regs))
  73. {
  74. $imdb_id = intval($regs[1]);
  75. if(empty($imdb_titles))
  76. {
  77. if(isset($_SESSION['imdb_id']) && $_SESSION['imdb_id'] == $imdb_id)
  78. $_SESSION['imdb_titles'] = $imdb_titles;
  79. }
  80. if(empty($imdb_titles))
  81. {
  82. $db->query("select title from title where movie_id in (select id from movie where imdb = $imdb_id)");
  83. while($row = $db->fetchRow()) $imdb_titles[] = $row['title'];
  84. $_SESSION['imdb_id'] = $imdb_id;
  85. $_SESSION['imdb_titles'] = $imdb_titles;
  86. }
  87. if(empty($imdb_titles))
  88. {
  89. $imdb_titles = getIMDbTitles($imdb_url);
  90. $_SESSION['imdb_id'] = $imdb_id;
  91. $_SESSION['imdb_titles'] = $imdb_titles;
  92. storeMovie($imdb_id, $imdb_titles);
  93. }
  94. }
  95. $titles = mergeTitles($imdb_titles, $titles);
  96. if(empty($imdb_titles))
  97. $_SESSION['err']['imdb_url'] = true;
  98. }
  99. else
  100. {
  101. $imdb_id = 0;
  102. }
  103. if(empty($titles)) $_SESSION['err']['title'][0] = true;
  104. $_SESSION['err']['nosub'] = true;
  105. for($i = 0; $i < $maxsubs; $i++)
  106. {
  107. if(empty($_FILES['sub']['tmp_name'][$i])) continue;
  108. $format_sel = getParam('format_sel', $i);
  109. $isolang_sel = getParam('isolang_sel', $i);
  110. $discs = intval(getParam('discs', $i));
  111. $disc_no = intval(getParam('disc_no', $i));
  112. $file_sel = intval(getParam('file_sel', $i));
  113. if(empty($format_sel)) $_SESSION['err']['format_sel'][$i] = true;
  114. if(empty($isolang_sel)) $_SESSION['err']['isolang_sel'][$i] = true;
  115. if($discs < 1 || $discs > 127 || $disc_no < 1 || $disc_no > 127 || $disc_no > $discs) $_SESSION['err']['disc_no'][$i] = true;
  116. if(!empty($_SESSION['file']) && empty($_SESSION['file'][$file_sel])) $_SESSION['err']['file_sel'][$i] = true;
  117. if(!isset($_SESSION['err']['format_sel'][$i])
  118. && !isset($_SESSION['err']['isolang_sel'][$i])
  119. && !isset($_SESSION['err']['disc_no'][$i])
  120. && !isset($_SESSION['err']['file_sel'][$i]))
  121. {
  122. unset($_SESSION['err']['nosub']);
  123. }
  124. }
  125. if(!empty($_SESSION['err']) || isset($_POST['update']))
  126. {
  127. RedirAndExit($_SERVER['PHP_SELF']);
  128. }
  129. //
  130. $db->begin();
  131. $movie_id = storeMovie($imdb_id, $titles);
  132. $files = array();
  133. for($i = 0; $i < $maxsubs; $i++)
  134. {
  135. if(empty($_FILES['sub']['tmp_name'][$i])) continue;
  136. $sub = @file_get_contents($_FILES['sub']['tmp_name'][$i]);
  137. $db_sub = addslashes(gzcompress($sub, 9));
  138. $db_name = addslashes(basename(stripslashes($_FILES['sub']['name'][$i])));
  139. $db_hash = md5($sub);
  140. $db_mime = addslashes($_FILES['sub']['type'][$i]);
  141. $format_sel = getParam('format_sel', $i); // TODO: verify this
  142. $isolang_sel = getParam('isolang_sel', $i); // TODO: verify this
  143. $discs = intval(getParam('discs', $i));
  144. $disc_no = intval(getParam('disc_no', $i));
  145. $file_sel = intval(getParam('file_sel', $i));
  146. $db_notes = addslashes(strip_tags(getParam('notes', $i)));
  147. $db->query("select id from subtitle where hash = '$db_hash'");
  148. if($row = $db->fetchRow())
  149. {
  150. $subtitle_id = $row[0];
  151. }
  152. else
  153. {
  154. $db->query(
  155. "insert into subtitle (discs, disc_no, sub, hash, mime) ".
  156. "values ($discs, $disc_no, '$db_sub', '$db_hash', '$db_mime')");
  157. $subtitle_id = $db->fetchLastInsertId();
  158. }
  159. chkerr();
  160. if($db->count("movie_subtitle where movie_id = $movie_id && subtitle_id = $subtitle_id") == 0)
  161. $db->query(
  162. "insert into movie_subtitle (movie_id, subtitle_id, name, userid, date, notes, format, iso639_2) ".
  163. "values($movie_id, $subtitle_id, '$db_name', {$db->userid}, NOW(), '$db_notes', '$format_sel', '$isolang_sel') ");
  164. chkerr();
  165. if(isset($_SESSION['file'][$file_sel]))
  166. {
  167. $file = $_SESSION['file'][$file_sel];
  168. $hash = $file['hash'];
  169. $size = $file['size'];
  170. $db->query("select * from file where hash = '$hash' && size = '$size'");
  171. if($row = $db->fetchRow()) $file_id = $row['id'];
  172. else {$db->query("insert into file (hash, size) values ('$hash', '$size')"); $file_id = $db->fetchLastInsertId();}
  173. chkerr();
  174. if($db->count("file_subtitle where file_id = $file_id && subtitle_id = $subtitle_id") == 0)
  175. $db->query("insert into file_subtitle (file_id, subtitle_id) values($file_id, $subtitle_id)");
  176. chkerr();
  177. $files[] = $_SESSION['file'][$file_sel];
  178. }
  179. }
  180. if(!empty($email) && !empty($nick))
  181. {
  182. $db->query("update subtitle set nick = '$db_nick' where email = '$db_email'");
  183. }
  184. $redir = 'index.php?text='.urlencode($titles[0]);
  185. if(!empty($files))
  186. {
  187. $args = array();
  188. foreach($files as $i => $file)
  189. foreach($file as $param => $value)
  190. $args[] .= "{$param}[$i]=".urlencode($value);
  191. $redir = 'index.php?'.implode('&', $args);
  192. }
  193. // TODO: move all these under one struct
  194. unset($_SESSION['POST']);
  195. unset($_SESSION['file']);
  196. unset($_SESSION['imdb_id']);
  197. unset($_SESSION['imdb_titles']);
  198. $db->commit();
  199. RedirAndExit($redir);
  200. }
  201. // subs
  202. $subs = array();
  203. for($i = 0; $i < $maxsubs; $i++) $subs[] = $i;
  204. $smarty->assign('subs', $subs);
  205. function assign($param, $limit = 0)
  206. {
  207. global $smarty;
  208. if($limit > 0)
  209. {
  210. $tmp = array();
  211. for($i = 0; $i < $limit; $i++) $tmp[$i] = getParam($param, $i);
  212. $smarty->assign($param, $tmp);
  213. }
  214. else
  215. {
  216. $smarty->assign($param, $tmp = getParam($param));
  217. }
  218. return $tmp;
  219. }
  220. function assign_cookie($param)
  221. {
  222. global $smarty;
  223. $value = getParam($param);
  224. if($value !== false) setcookie($param, $value, time()+60*60*24*30, '/');
  225. $smarty->assign($param, $value);
  226. return $value;
  227. }
  228. // titles, imdb
  229. assign('title', $maxtitles);
  230. assign('guessedtitle');
  231. assign('imdb_url');
  232. if(isset($_SESSION['imdb_id']) && !empty($_SESSION['imdb_titles']))
  233. {
  234. $smarty->assign('imdb_id', $_SESSION['imdb_id']);
  235. $smarty->assign('imdb_titles', $_SESSION['imdb_titles']);
  236. }
  237. // subs
  238. $smarty->assign('isolang', $isolang);
  239. assign('isolang_sel', $maxsubs);
  240. $smarty->assign('format', $db->enumsetValues('movie_subtitle', 'format'));
  241. assign('format_sel', $maxsubs);
  242. assign('discs', $maxsubs);
  243. assign('disc_no', $maxsubs);
  244. $smarty->assign('file', !empty($_SESSION['file']) ? $_SESSION['file'] : false);
  245. assign('file_sel', $maxsubs);
  246. assign('notes', $maxsubs);
  247. // err
  248. if(isset($_SESSION['err'])) 
  249. $smarty->assign('err', $_SESSION['err']);
  250. //
  251. $smarty->display('main.tpl');
  252. ?>