action.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <?php
  2. error_reporting(0);
  3. header('Expires: Sun, 01 Jan 2014 00:00:00 GMT');
  4. header('Cache-Control: no-store, no-cache, must-revalidate');
  5. header('Cache-Control: post-check=0, pre-check=0', FALSE);
  6. header('Pragma: no-cache');
  7. include "include/init.php";
  8. date_default_timezone_set($settings['timezone']);
  9. include "include/sqlcon.php";
  10. include "include/functions.php";
  11. if (isset($_POST['mode'])) {
  12. switch ($_POST['mode']) {
  13. case "setsettings":
  14. foreach ($_POST['settings'] as $key => $setting) {
  15. $settings[$key] = $setting;
  16. }
  17. if ($system['os'] == "w") {
  18. $sfile = file_get_contents($system['workdir'] . "settings.php");
  19. if (!is_numeric(strpos($sfile, "path"))) {
  20. unset($settings['path']);
  21. }
  22. }
  23. unset($settings['locale_not_set']);
  24. if ($system['os'] == "w") {
  25. file_put_contents($system['workdir'] . "settings.php", "<?php\r\n" . '$settings = ' . var_export($settings, true) . ";");
  26. } else {
  27. file_put_contents("$home_dir/.local/share/notebubble/settings.php", "<?php\r\n" . '$settings = ' . var_export($settings, true) . ";");
  28. }
  29. header("location: index.php?loadpage=appsettings");
  30. break;
  31. case "openlink":
  32. $link = html_entity_decode($_POST['link']);
  33. if (get_os() == "w") {
  34. exec("start \"\" \"$link\"");
  35. } else {
  36. exec("DISPLAY=:0 dbus-launch xdg-open \"$link\"");
  37. }
  38. break;
  39. case "newmessage":
  40. include "system/newmessage.php";
  41. echo "ok";
  42. break;
  43. case "addchat":
  44. if (!empty($_FILES["picture"]["name"])) {
  45. $target_file = basename($_FILES["picture"]["name"]);
  46. if (move_uploaded_file($_FILES["picture"]["tmp_name"], $target_file)) {
  47. }
  48. } else {
  49. $target_file = time() . ".jpg";
  50. if (get_os() == "w") {
  51. exec('magick -size 512x512 canvas:"' . $_POST['color'] . '" -gravity center -fill white -font Arial -pointsize 200 -annotate 0 "' . ucfirst(substr($_POST['name'], 0, 1)) . '" ' . $target_file);
  52. } else {
  53. exec('convert -size 512x512 canvas:"' . $_POST['color'] . '" -gravity center -fill white -font Arial -pointsize 200 -annotate 0 "' . ucfirst(substr($_POST['name'], 0, 1)) . '" ' . $target_file);
  54. }
  55. }
  56. if (empty($_FILES["picture"]["name"]) && isset($_POST['edit'])) {
  57. $image = PDO_FetchAll("SELECT image FROM chat WHERE id = " . $_POST['edit']) [0]['image'];
  58. } else {
  59. if (get_os() == "w") {
  60. exec("magick \"" . $target_file . "\" -resize 100x100 temp.jpg");
  61. } else {
  62. exec("convert \"" . $target_file . "\" -resize 100x100 temp.jpg");
  63. }
  64. unlink($target_file);
  65. $image = base64_encode(file_get_contents("temp.jpg"));
  66. }
  67. $name = $_POST['name'];
  68. $desc = $_POST['desc'];
  69. $color = $_POST['color'];
  70. $pass = $_POST['pass'];
  71. @unlink($target_file);
  72. @unlink("temp.jpg");
  73. if (isset($_POST['edit'])) {
  74. PDO_Execute("UPDATE chat SET name = \"$name\",desc = \"$desc\",image = \"$image\",color = \"$color\",pass = \"$pass\" WHERE id = " . $_POST['edit']);
  75. } else {
  76. PDO_Execute("INSERT INTO chat (name,desc,image,color,pass) VALUES (\"$name\",\"$desc\",\"$image\",\"$color\",\"$pass\")");
  77. }
  78. header("location: index.php");
  79. break;
  80. }
  81. }
  82. @$id = $_GET['id'];
  83. if (isset($_GET['mode'])) {
  84. switch ($_GET['mode']) {
  85. case "downloadfile":
  86. $file = PDO_FetchAll("SELECT name,type,size,content FROM attachment WHERE message_id = $id") [0];
  87. header('Content-type: ' . $file['type']);
  88. header('Content-Length: ' . $file['size']);
  89. header('Content-Disposition: attachment; filename="' . $file['name'] . '"');
  90. if (is_numeric(strpos($file['type'], "image"))) {
  91. file_put_contents($file['name'], base64_decode($file['content']));
  92. readfile($file['name']);
  93. @unlink($file['name']);
  94. } else {
  95. $tmpname = time() . ".7z";
  96. file_put_contents("./tmp/" . $tmpname, base64_decode($file['content']));
  97. exec("7z x \"./tmp/$tmpname\" -o./tmp/ -y");
  98. readfile("./tmp/" . $file['name']);
  99. @unlink("./tmp/" . $file['name']);
  100. @unlink("./tmp/" . $tmpname);
  101. }
  102. die();
  103. break;
  104. case "deletemsg":
  105. PDO_Execute("DELETE FROM message WHERE id = $id");
  106. PDO_Execute("DELETE FROM urlpreview WHERE message_id = $id");
  107. PDO_Execute("DELETE FROM attachment WHERE message_id = $id");
  108. PDO_Execute("DELETE FROM reminder WHERE message_id = $id");
  109. PDO_Execute("DELETE FROM todo WHERE message_id = $id");
  110. PDO_Execute("VACUUM");
  111. break;
  112. case "pinchat":
  113. PDO_Execute("UPDATE chat SET pinned = 1 WHERE id = $id");
  114. include "system/sidebar.php";
  115. break;
  116. case "unpinchat":
  117. PDO_Execute("UPDATE chat SET pinned = 0 WHERE id = $id");
  118. include "system/sidebar.php";
  119. break;
  120. case "highlight":
  121. PDO_Execute("UPDATE message SET highlight = 1 WHERE id = $id");
  122. break;
  123. case "unhighlight":
  124. PDO_Execute("UPDATE message SET highlight = 0 WHERE id = $id");
  125. break;
  126. case "pinmessage":
  127. $chat_id = PDO_FetchAll("SELECT chat.id as chat_id FROM message LEFT JOIN chat ON chat_id = chat.id WHERE message.id = $id") [0]['chat_id'];
  128. PDO_Execute("UPDATE message SET pinned = 0 WHERE chat_id = $chat_id");
  129. PDO_Execute("UPDATE message SET pinned = 1 WHERE id = $id");
  130. @$message = PDO_FetchAll("SELECT message.*,urlpreview.url,urlpreview.site,urlpreview.title,urlpreview.desc,urlpreview.image,attachment.name as fname,attachment.type as ftype,attachment.size as fsize,attachment.content as fcontent,chat.color as color FROM message LEFT JOIN urlpreview ON urlpreview.message_id = message.id LEFT JOIN attachment ON attachment.message_id = message.id LEFT JOIN chat ON chat_id = chat.id WHERE message.id = $id AND message.pinned = 1") [0];
  131. $image = "";
  132. if (!empty($message)) {
  133. if (!empty($message['fname'])) {
  134. if (is_numeric(strpos($message['ftype'], "image"))) {
  135. $preview = "data:" . $message['ftype'] . ";base64," . $message['fcontent'];
  136. } else {
  137. $preview = "data:image/png;base64,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";
  138. }
  139. $image = "<div style='display:inline-block; min-width:40px; background-image:url($preview); background-size:cover; background-position:;center; margin-right:5px;'>.</div>";
  140. }
  141. $text = $message['text'];
  142. if (empty($text)) {
  143. if (is_numeric(strpos($message['ftype'], "image"))) {
  144. $text = "Imagen";
  145. } else {
  146. $text = "Archivo";
  147. }
  148. }
  149. echo "<div class='pinned-message' style='border-bottom:1px solid " . $message['color'] . "' onClick='document.getElementById(\"" . $message['id'] . "\").scrollIntoView();'>
  150. <div style='display:flex;'>
  151. $image
  152. <div style=''><b style='color:" . $message['color'] . ";'>Mensaje Fijado</b>
  153. <div style='color:black; width:100%; height:1em; overflow:hidden;'>" . $text . "</div>
  154. </div>
  155. </div>
  156. </div>";
  157. }
  158. break;
  159. case "unpinmessage":
  160. PDO_Execute("UPDATE message SET pinned = 0 WHERE id = $id");
  161. break;
  162. case "deletechat":
  163. $messages = PDO_FetchAll("SELECT id from message WHERE chat_id = $id");
  164. foreach ($messages as $msg) {
  165. PDO_Execute("DELETE FROM urlpreview WHERE message_id = " . $msg['id']);
  166. PDO_Execute("DELETE FROM attachment WHERE message_id = " . $msg['id']);
  167. PDO_Execute("DELETE FROM todo WHERE message_id = " . $msg['id']);
  168. PDO_Execute("DELETE FROM reminder WHERE message_id = " . $msg['id']);
  169. }
  170. PDO_Execute("DELETE FROM message WHERE chat_id = $id");
  171. PDO_Execute("DELETE FROM chat WHERE id = $id");
  172. PDO_Execute("VACUUM");
  173. include "system/sidebar.php";
  174. break;
  175. case "getpage":
  176. include "./pages/$id.php";
  177. break;
  178. case "getmsg":
  179. $text = html_entity_decode(PDO_FetchAll("SELECT * FROM message WHERE id = $id") [0]['text']);
  180. $matches = [];
  181. preg_match_all('/^>>.*/m', $text, $matches);
  182. if (!empty($matches[0])) {
  183. $todo = PDO_FetchAll("SELECT * FROM todo where message_id = " . $id);
  184. $c = 0;
  185. foreach ($matches[0] as $match) {
  186. $match = str_replace("<br />", "", $match);
  187. if (is_numeric(strpos($match, ">>>"))) {
  188. $cleanmatch = trim(str_replace(">", "", $match));
  189. if ($cleanmatch == html_entity_decode($todo[$c]['text'])) {
  190. if ($todo[$c]['completed'] == "false") {
  191. $text = str_replace_once($text, trim($match), ">> " . trim(html_entity_decode($todo[$c]['text'])));
  192. }
  193. }
  194. } else {
  195. $cleanmatch = trim(str_replace(">", "", $match));
  196. if ($cleanmatch == html_entity_decode($todo[$c]['text'])) {
  197. if ($todo[$c]['completed'] == "true") {
  198. $text = str_replace_once($text, trim($match), ">>> " . trim(html_entity_decode($todo[$c]['text'])));
  199. }
  200. }
  201. }
  202. $c++;
  203. }
  204. }
  205. echo $text;
  206. break;
  207. case "getmessages":
  208. include "system/getmessages.php";
  209. break;
  210. case "search":
  211. include "system/search.php";
  212. break;
  213. case "getstring":
  214. echo (isset($loc_string[$id]) ? $loc_string[$id] : "");
  215. break;
  216. case "getmessage":
  217. include "system/getmessage.php";
  218. $message = PDO_FetchAll("SELECT message.*,urlpreview.url,urlpreview.site,urlpreview.title,urlpreview.desc,urlpreview.image,attachment.name as fname,attachment.type as ftype,attachment.size as fsize, reminder.date as reminder, reminder.active FROM message LEFT JOIN urlpreview ON urlpreview.message_id = message.id LEFT JOIN attachment ON attachment.message_id = message.id LEFT JOIN reminder ON reminder.message_id = message.id WHERE message.id = $id") [0];
  219. echo renderMessage($message);
  220. break;
  221. case "checkreminders":
  222. echo date("h:i", time());
  223. @$reminder = PDO_FetchAll("select message.*,chat.name as chat from reminder LEFT JOIN message on message.id = reminder.message_id LEFT JOIN chat on chat.id = message.chat_id where reminder.date < " . time() . " AND reminder.active = 1") [0];
  224. if (!empty($reminder)) {
  225. @$text = explode("\n",$reminder['text'])[0];
  226. PDO_Execute("UPDATE reminder SET active = 0 WHERE message_id = " . $reminder['id']);
  227. if ($system['os'] == "w") {
  228. exec("nircmd trayballoon \"" . $reminder['chat'] . "\" \"" . $text . "\" \"shell32.dll,16783\" 15000");
  229. } else {
  230. exec("zenity --warning --text=\"" . $text . "\" --title=\"" . $reminder['chat'] . "\" --display=:0");
  231. }
  232. }
  233. break;
  234. case "toggleTodo":
  235. $todo = PDO_FetchAll("SELECT completed FROM todo where id = " . $id) [0]['completed'];
  236. if ($todo == "true") {
  237. echo "1";
  238. PDO_Execute("UPDATE todo SET completed = \"false\" WHERE id = " . $id);
  239. } else {
  240. echo "2";
  241. PDO_Execute("UPDATE todo SET completed = \"true\" WHERE id = " . $id);
  242. }
  243. break;
  244. case "getdialog":
  245. include "system/dialog.php";
  246. break;
  247. case "setlocale":
  248. $settings['locale'] = $_GET['value'];
  249. unset($settings['locale_not_set']);
  250. if ($system['os'] == "w") {
  251. $sfile = file_get_contents($system['workdir'] . "settings.php");
  252. if (!is_numeric(strpos($sfile, "path"))) {
  253. unset($settings['path']);
  254. }
  255. }
  256. if ($system['os'] == "w") {
  257. copy($system['workdir'] . "settings.php", $system['workdir'] . "settings_bak.php");
  258. file_put_contents($system['workdir'] . "settings.php", "<?php\r\n" . '$settings = ' . var_export($settings, true) . ";");
  259. } else {
  260. file_put_contents("$home_dir/.local/share/notebubble/settings.php", "<?php\r\n" . '$settings = ' . var_export($settings, true) . ";");
  261. }
  262. header("location: index.php?localeset=true");
  263. break;
  264. case "movedatabase":
  265. $path = $_GET['path'];
  266. $onlyloc = $_GET['onlyloc'];
  267. if ($path != $settings['path'] && !empty($path)) {
  268. $PDO = null;
  269. if ($onlyloc == "false") {
  270. rename($settings['path'] . "database.db", $path . "database.db");
  271. }
  272. $settings['path'] = $path;
  273. if ($system['os'] == "w") {
  274. copy($system['workdir'] . "settings.php", $system['workdir'] . "settings_bak.php");
  275. file_put_contents($system['workdir'] . "settings.php", "<?php\r\n" . '$settings = ' . var_export($settings, true) . ";");
  276. } else {
  277. copy("$home_dir/.local/share/notebubble/settings.php", "$home_dir/.local/share/notebubble/settings_bak.php");
  278. file_put_contents("$home_dir/.local/share/notebubble/settings.php", "<?php\r\n" . '$settings = ' . var_export($settings, true) . ";");
  279. }
  280. }
  281. break;
  282. }
  283. }
  284. ?>