edit.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. <?php
  2. session_start();
  3. $http_host = $_SERVER["HTTP_HOST"];
  4. $doc_root = $_SERVER["DOCUMENT_ROOT"] . "/";
  5. include $doc_root . "functions.php";
  6. $proto = get_protocol();
  7. $lang = "en";
  8. $con = start_db();
  9. $server = $proto . $http_host;
  10. $pserver = $proto . substr($http_host, 0, strpos($http_host, ':')); // public server
  11. if (!check_session($con)){
  12. http_response_code(401);
  13. header("Location: /authentication.php");
  14. }
  15. else{
  16. $id = intval(mysqli_real_escape_string($con, $_GET["p"]));
  17. if (strlen($id) < 1){
  18. http_response_code(400); // No or bad ID: Bad request.
  19. header("Location: /projects/");
  20. }
  21. else{
  22. $q_project = mysqli_query($con, "SELECT * FROM project WHERE id = $id;");
  23. if (mysqli_num_rows($q_project) == 0){
  24. http_response_code(404); // Unexistent id: Not found.
  25. header("Location: /projects/");
  26. }
  27. else{
  28. $r_project = mysqli_fetch_array($q_project);
  29. $id = $r_project["id"];
  30. $title = text($con, $r_project["title"], $lang);
  31. $q_lang = mysqli_query($con, "SELECT * FROM lang;");
  32. ?>
  33. <html>
  34. <head>
  35. <meta content='text/html; charset=windows-1252' http-equiv='content-type'/>
  36. <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1'>
  37. <link rel='shortcut icon' href='<?=$pserver?>/img/logo/x2/favicon.ico'/>
  38. <title><?=$title?>I&ntilde;igo Valentin - Administration Panel</title>
  39. <style>
  40. <?php
  41. include $doc_root . "css/ui.css";
  42. include $doc_root . "css/projects.css";
  43. ?>
  44. </style>
  45. <!-- CSS for mobile version -->
  46. <style media='(max-width : 990px)'>
  47. <?php
  48. include $doc_root . "css/m/ui.css";
  49. include $doc_root . "css/m/projects.css";
  50. ?>
  51. </style>
  52. <!-- Script files -->
  53. <script type='text/javascript'>
  54. <?php
  55. include $doc_root . "script/ui.js";
  56. include $doc_root . "script/projects.js";
  57. ?>
  58. </script>
  59. <script src='/script/ckeditor/ckeditor.js'></script>
  60. </head>
  61. <body>
  62. <?php
  63. include $doc_root . "header.php";
  64. ?>
  65. <div id='content'>
  66. <div class='section' id='project_edit'>
  67. <h3 class='section_title'><?=$title?></h3>
  68. <div class='entry'>
  69. <div id='lang_tabs'>
  70. <table>
  71. <tr>
  72. <?php
  73. mysqli_data_seek($q_lang, 0);
  74. $active = 'lang_tabs_active';
  75. while ($r_lang = mysqli_fetch_array($q_lang)){
  76. ?>
  77. <td class='pointer <?=$active?>' id='lang_tab_<?=$r_lang["code"]?>' onclick='showLanguage("<?=$r_lang["code"]?>");'>
  78. <?=$r_lang["name"]?>
  79. </td>
  80. <?php
  81. $active = '';
  82. }
  83. ?>
  84. </tr>
  85. </table>
  86. </div> <!-- #lang_tabs -->
  87. <span class='bold'>URL:</span>
  88. <?=$pserver?>/projects/
  89. <span class='editable'>
  90. <span class='field_result'><?=$r_project["permalink"]?></span>
  91. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  92. <input class='field_editable' type='text' value='<?=$r_project["permalink"]?>'/>
  93. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "project", "permalink", <?=$id?>);'/>
  94. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  95. </span>
  96. <hr class='separator'/>
  97. <span class='bold'>Icon:</span>
  98. <?php
  99. if (strlen($r_project["icon"]) > 0){
  100. $src = "$pserver/img/projects/x3/$r_image[image]";
  101. }
  102. else{
  103. $src = "$server/img/icon/addimage.png";
  104. }
  105. ?>
  106. <img class='pointer' onClick='selectIcon();' id='icon' src='<?=$src?>' />
  107. <input id='icon_file' type='file' accept='image/*' onchange='changeIcon(event, "<?=$title?>");'>
  108. <hr class='separator'/>
  109. <?php
  110. mysqli_data_seek($q_lang, 0);
  111. $active = "content_lang_active";
  112. while ($r_lang = mysqli_fetch_array($q_lang)){
  113. ?>
  114. <div class='content_lang_<?=$r_lang["code"]?> content_lang <?=$active?>'>
  115. <div class='editable'>
  116. <span class='bold'>Title (<?=$r_lang["name"]?>):</span>
  117. <span class='field_result'><?=text($con, $r_project["title"], $r_lang["code"])?></span>
  118. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  119. <input class='field_editable' type='text' value='<?=text($con, $r_project["title"], $r_lang["code"])?>'/>
  120. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "text", "<?=$r_lang["code"]?>", "<?=$r_project["title"]?>");'/>
  121. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  122. </div>
  123. <hr class='separator'/>
  124. <div class='editable'>
  125. <span class='bold'>Summary (<?=$r_lang["name"]?>):</span>
  126. <span class='field_result'><?=text($con, $r_project["summary"], $r_lang["code"])?></span>
  127. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  128. <input class='field_editable' type='text' value='<?=text($con, $r_project["summary"], $r_lang["code"])?>'/>
  129. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "text", "<?=$r_lang["code"]?>", "<?=$r_project["summary"]?>");'/>
  130. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  131. </div>
  132. <hr class='separator'/>
  133. <div class='editable'>
  134. <span class='bold'>Text (<?=$r_lang["name"]?>):</span>
  135. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  136. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "text", "<?=$r_lang["code"]?>", "<?=$r_project["text"]?>");'/>
  137. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  138. <br/>
  139. <p class='field_result'><?=text($con, $r_project["text"], $r_lang["code"])?></p>
  140. <textarea id='text_<?=$r_lang["code"]?>' class='field_editable'><?=text($con, $r_project["text"], $r_lang["code"])?></textarea>
  141. <script>CKEDITOR.replace('text_<?=$r_lang["code"]?>');</script>
  142. </div>
  143. </div> <!-- .project_add_language -->
  144. <?php
  145. $active = '';
  146. }
  147. ?>
  148. <hr class='separator'/>
  149. <h4>Images</h4>
  150. <div id='image_reel' class='horizontal_scroll'>
  151. <?php
  152. $q_image = mysqli_query($con, "SELECT id, image FROM project_image WHERE project = $id;");
  153. while ($r_image = mysqli_fetch_array($q_image)){
  154. ?>
  155. <span id='project_image_<?=$r_image["id"]?>'>
  156. <img alt='<?=$title?>' title='<?=$title?>' src='<?=$pserver?>/img/projects/x3/<?=$r_image["image"]?>' />
  157. <img class='pointer' onClick='deleteImage(<?=$r_image["id"]?>)' alt='Delete image' title='Delete image' src='<?=$server?>/img/icon/cancel.png' />
  158. </span>
  159. <?php
  160. }
  161. ?>
  162. <span id='project_image_add'>
  163. <img onClick='addImage(<?=$id?>)' alt='Add image' title='Add image' src='<?=$server?>/img/icon/addimage.png' />
  164. </span> <!-- #image_reel -->
  165. </div>
  166. <hr class='separator'/>
  167. <h4>Tags</h4>
  168. TODO
  169. <hr class='separator'/>
  170. <h4>Versions</h4>
  171. <div id='versions'>
  172. <input id='new_version' type='button' value='New version' onClick='newVersion(<?=$id?>);' />
  173. <?php
  174. // TODO replace id -> project_version: id
  175. $q_version = mysqli_query($con, "SELECT project_version.id AS version, version_code, version_name, type, (SELECT text FROM text WHERE id = project_version_type.title AND lang = '$lang') AS type_name, color AS type_color, project_version.summary AS summary, changelog FROM project_version, project_version_type WHERE type = project_version_type.id AND project = $id ORDER BY version_code;");
  176. while ($r_version = mysqli_fetch_array($q_version)){
  177. ?>
  178. <div class='entry list_enty'>
  179. <table id='versions'>
  180. <tr>
  181. <td class='version_name'>
  182. <span class='editable'>
  183. <span class='field_result'><?=$r_version["version_name"]?></span>
  184. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  185. <input class='field_editable' type='text' value='<?=$r_version["version_name"]?>'/>
  186. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "project_version", "version", "<?=$r_version["id"]?>");'/>
  187. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  188. </span>
  189. </td>
  190. <td class='version_details'>
  191. <span class='bold'>Version code (fixed):</span> <?=$r_version["version_code"]?>
  192. <br/>
  193. <span class='editable'>
  194. <span class='bold'>Version type:</span>
  195. <span class='field_result'><?=$r_version["type_name"]?></span>
  196. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  197. <select class='field_editable' value='<?=$r_version["type"]?>'>
  198. <?php
  199. $q_version_type = mysqli_query($con, "SELECT id, title, color, (SELECT text FROM text WHERE id = project_version_type.title AND lang = '$lang') AS title FROM project_version_type;");
  200. while ($r_version_type = mysqli_fetch_array($q_version_type)){
  201. if ($r_version_type["id"] == $r_version["type"]){
  202. $selected = "selected";
  203. }
  204. else{
  205. $selected = "";
  206. }
  207. // TODO: Ignoring default 'selected'. It's because display: none?
  208. ?>
  209. <option value='<?=$r_version_type["id"]?>' <?=$selected?>><?=$r_version_type["title"]?></option>
  210. <?php
  211. }
  212. ?>
  213. </select>
  214. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "project_version", "type", "<?=$r_version["id"]?>");'/>
  215. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  216. </span>
  217. <?php
  218. mysqli_data_seek($q_lang, 0);
  219. $active = "content_lang_active";
  220. while ($r_lang = mysqli_fetch_array($q_lang)){
  221. ?>
  222. <div class='content_lang_<?=$r_lang["code"]?> content_lang <?=$active?>'>
  223. <div class='editable'>
  224. <span class='bold'>Summary (<?=$r_lang["name"]?>):</span>
  225. <span class='field_result'><?=text($con, $r_version["summary"], $r_lang["code"])?></span>
  226. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  227. <input class='field_editable' type='text' value='<?=text($con, $r_project["summary"], $r_lang["code"])?>'/>
  228. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "text", "<?=$r_lang["code"]?>", "<?=$r_version["summary"]?>");'/>
  229. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  230. </div>
  231. </div>
  232. <div class='content_lang_<?=$r_lang["code"]?> content_lang <?=$active?>'>
  233. <div class='editable'>
  234. <span class='bold'>Changelog (<?=$r_lang["name"]?>):</span>
  235. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  236. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "text", "<?=$r_lang["code"]?>", "<?=$r_version["changelog"]?>");'/>
  237. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  238. <p class='field_result'><?=text($con, $r_version["changelog"], $r_lang["code"])?></p>
  239. <textarea class='field_editable'><?=text($con, $r_project["summary"], $r_lang["code"])?></textarea>
  240. </div>
  241. </div>
  242. <?php
  243. $active = "";
  244. }
  245. if ($r_project["visible"] == 1){
  246. $v = "Yes";
  247. $selected1 = "selected";
  248. $selected0 = "";
  249. }
  250. else{
  251. $v = "No";
  252. $selected1 = "";
  253. $selected0 = "selected";
  254. }
  255. ?>
  256. <div class='editable'>
  257. <span class='bold'>Visible:</span>
  258. <span class='field_result'><?=$v?></span>
  259. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  260. <select class='field_editable'>
  261. <option value='1' <?=$selected1?>>Yes</option>
  262. <option value='0' <?=$selected0?>>No</option>
  263. </select>
  264. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "project_version", "visible", "<?=$r_version["id"]?>");'/>
  265. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  266. </div>
  267. </td>
  268. <td class='version_actions'>
  269. <input type='button' onclick='deleteVersion(<?=$r_version["id"]?>, "<?=$title?>");' value='Delete'/>
  270. </td>
  271. </tr>
  272. </table>
  273. </div> <!-- .entry -->
  274. <?php
  275. }
  276. ?>
  277. </div> <!-- #versions -->
  278. <hr class='separator'/>
  279. <h4>Settings</h4>
  280. <?php
  281. if ($r_project["visible"] == 1){
  282. $v = "Yes";
  283. $selected1 = "selected";
  284. $selected0 = "";
  285. }
  286. else{
  287. $v = "No";
  288. $selected1 = "";
  289. $selected0 = "selected";
  290. }
  291. ?>
  292. <div class='editable'>
  293. <span class='bold'>Visible:</span>
  294. <span class='field_result'><?=$v?></span>
  295. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  296. <select class='field_editable'>
  297. <option value='1' <?=$selected1?>>Yes</option>
  298. <option value='0' <?=$selected0?>>No</option>
  299. </select>
  300. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "project", "visible", "<?=$id?>");'/>
  301. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  302. </div>
  303. <?php
  304. if ($r_project["comments"] == 1){
  305. $v = "Yes";
  306. $selected1 = "selected";
  307. $selected0 = "";
  308. }
  309. else{
  310. $v = "No";
  311. $selected1 = "";
  312. $selected0 = "selected";
  313. }
  314. ?>
  315. <div class='editable'>
  316. <span class='bold'>Comments enabled:</span>
  317. <span class='field_result'><?=$v?></span>
  318. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  319. <select class='field_editable'>
  320. <option value='1' <?=$selected1?>>Yes</option>
  321. <option value='0' <?=$selected0?>>No</option>
  322. </select>
  323. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "project", "comments", "<?=$id?>");'/>
  324. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  325. </div>
  326. <input type='button' onclick='deleteProject(<?=$id?>, "<?=$title?>");' value='Delete project'/>
  327. <h4>Comments</h4>
  328. <?php
  329. $q_comment = mysqli_query($con, "SELECT project_comment.id AS id, (SELECT version_name FROM project_version WHERE id = project_comment.version) AS version, text, dtime, user, username, lang, (SELECT name FROM lang WHERE code = project_comment.lang) AS lang_name, approved, ip, browser, os, uagent FROM project_comment, stat_visit WHERE stat_visit.id = visit AND project = $id;");
  330. if (mysqli_num_rows($q_comment) == 0){
  331. ?>
  332. <span>No comments yet</span>
  333. <?php
  334. }
  335. else{
  336. ?>
  337. <table id='comments'>
  338. <?php
  339. while ($r_comment = mysqli_fetch_array($q_comment)){
  340. ?>
  341. <tr>
  342. <td class='text'>
  343. <p><?=$r_comment["text"]?></p>
  344. </td>
  345. <td class='details'>
  346. On <?=format_date($r_comment["dtime"], $lang, true)?>
  347. <br/>
  348. For version <?=$r_comment["version"]?>
  349. <br/>
  350. <?php
  351. if (strlen($r_comment["user"]) > 0){
  352. $q_user = mysqli_query($con, "SELECT concat(fname, concat(' ', lname)) AS name, username FROM user WHERE id = $r_comment[user];");
  353. $r_user = mysqli_fetch_array($q_user);
  354. ?>
  355. By <?=$r_user["name"]?> (<span class='bold'><?=$r_user["username"]?></span>)
  356. <?php
  357. }
  358. else{
  359. ?>
  360. By <?=$r_comment["username"]?>
  361. <?php
  362. }
  363. if (strlen($r_comment["lang_name"]) > 0){
  364. $strlang = $r_comment["lang_name"];
  365. }
  366. else{
  367. $strlang = $r_comment["lang"];
  368. }
  369. if (file_exists($doc_root . "img/lang/" . $r_comment["lang"] . ".gif")){
  370. $imgpath = $doc_root . "img/lang/" . $r_comment["lang"] . ".gif";
  371. $strlang = $strlang . " <img class='lang' title='$r_comment[lang]' alt='$r_comment[lang]' src='$server/$imgpath' />";
  372. }
  373. ?>
  374. <br/>
  375. Language: <?=$strlang?>
  376. <?php
  377. if ($r_project["visible"] == 1){
  378. $v = "Yes";
  379. $selected1 = "selected";
  380. $selected0 = "";
  381. }
  382. else{
  383. $v = "No";
  384. $selected1 = "";
  385. $selected0 = "selected";
  386. }
  387. ?>
  388. <div class='editable'>
  389. Approved:
  390. <span class='field_result'><?=$v?></span>
  391. <img class='button_edit' src='<?=$server?>/img/icon/edit.png' onclick='enableEdit(this);'/>
  392. <select class='field_editable'>
  393. <option value='1' <?=$selected1?>>Yes</option>
  394. <option value='0' <?=$selected0?>>No</option>
  395. </select>
  396. <img class='button_save' src='<?=$server?>/img/icon/save.png' onclick='saveEdit(this, "project_comment", "approved", "<?=$r_comment["id"]?>");'/>
  397. <img class='button_cancel' src='<?=$server?>/img/icon/cancel.png' onclick='cancelEdit(this);'/>
  398. </div>
  399. </td>
  400. <td class='actions'>
  401. <input type='button' onclick='deleteProjectComment(<?=$id?>);' value='Delete'/>
  402. </td>
  403. </tr>
  404. <?php
  405. }
  406. ?>
  407. </table>
  408. <?php
  409. }
  410. ?>
  411. </div> <!-- .entry -->
  412. </div> <!-- .section -->
  413. </div> <!-- #content -->
  414. </body>
  415. </html>
  416. <?php
  417. }
  418. }
  419. }
  420. ?>