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

/db_mare.class.php

https://github.com/elia/mare
PHP | 664 lines | 518 code | 38 blank | 108 comment | 57 complexity | c624dee16a29af3f88bb82cf69ead439 MD5 | raw file
  1. <?php
  2. require_once('db_cover.class.php');
  3. require_once ('Mail/mimeDecode.php');
  4. require_once ('Mail/RFC822.php');
  5. class DB_mare extends DB_cover {
  6. function __construct() {
  7. parent::__construct();
  8. $this->add_message_runned = false;
  9. }
  10. function __destruct() {
  11. parent::__destruct();
  12. }
  13. /////////////////////////USER{
  14. ////////////////////////////////
  15. public function get_user($login){//ok
  16. $ass_arr = parent::get_array("SELECT * FROM utente WHERE login='".$login."';");
  17. return $ass_arr[0];
  18. }
  19. public function set_user($login, $password, $name = null, $surname = null) {//ok
  20. trim(&$name);
  21. trim(&$surname);
  22. // se vuoti li imposta a null
  23. $name = empty($name)?'NULL':"'$name'";
  24. $surname = empty($surname)?'NULL':"'$surname'";
  25. $result = parent::get_array("INSERT INTO utente(login, password, id_utente, nome, cognome)
  26. VALUES ('$login', '$password', DEFAULT, $name, $surname);");
  27. return $result;
  28. }
  29. ////////////////////////////////}
  30. /////////////////////////ACCOUNT{
  31. ////////////////////////////////
  32. public function get_accounts(){//ok
  33. $result = parent::get_array("SELECT email_account, visibile FROM account
  34. WHERE id_utente=".$_SESSION['user']['id'].";");
  35. // questo ciclo butta fuori un'array nella forma 'indirizzo_mail'=>'{true|false}'
  36. if (is_array($result)) {
  37. foreach ($result as $item) {
  38. $arr[$item['email_account']] = $item['visibile']=='t'?true:false;
  39. }
  40. } else {
  41. return $result;
  42. }
  43. return $arr;
  44. }
  45. public function set_accounts($accounts) {//ok
  46. /* il parametro accounts richiede un array come quello fornito da get accounts
  47. * con almeno gli account da attivare (comunque settati a true)
  48. * in forma array ( 'account_uno@asg'=>true|false, ...)
  49. * OPPURE la stringa 'all' che attivarŕ automaticamente tutti gli account
  50. */
  51. // tutti ON se c'č 'all'
  52. if (is_string($accounts) && $accounts == 'all') {
  53. $result = parent::get_array("UPDATE account SET visibile = TRUE
  54. WHERE id_utente=".$_SESSION['user']['id'].";");
  55. return $result;
  56. }
  57. ////////////////////////////////////////////////////
  58. // poi mettiamo a ON tutti quelli con $visible = true
  59. // prepara la query solo per gli account con $visible = true
  60. $addr_counter=0;
  61. $list = "";
  62. foreach ($accounts as $address=>$visible) {// crea la lista di condizioni per la query
  63. if ($visible) {
  64. // mette OR davanti a tutti tranne che al primo della lista
  65. $list .= $addr_counter!=0 ? " OR " : "" ;
  66. // aggiunge gli indirizzi per la condizione WHERE
  67. $list .= " email_account = '".$address."' ";
  68. //impediamo di mettere OR davanti al primo
  69. $addr_counter++;
  70. }
  71. }
  72. // prima mettiamo tutti OFF
  73. $clear_query = "UPDATE account SET visibile = FALSE
  74. WHERE id_utente=".$_SESSION['user']['id'].";";
  75. // inserisce la lista e manda la query
  76. $query = "UPDATE account SET visibile = TRUE
  77. WHERE (id_utente = ".$_SESSION['user']['id']." AND (".$list."));";
  78. $result = parent::get_array($clear_query);
  79. $result = parent::get_array($query);
  80. return $result;
  81. }
  82. public function add_account($new_account) {//ok
  83. /* per caso esiste giŕ una copia di quella cartella? */
  84. $copy_parent = is_null($parent_fld)?" IS NULL ":" =$parent_fld ";
  85. $copy = $this->get_array("SELECT * FROM account
  86. WHERE email_account='$new_account' AND id_utente=".$_SESSION['user']['id']." ;");
  87. if (is_array($copy)) return false;
  88. /* fine controllo per copie... */
  89. parent::get_array("INSERT INTO account(email_account, visibile, id_utente)
  90. VALUES ('$new_account', DEFAULT, ".$_SESSION['user']['id'].");");
  91. }
  92. public function del_account($del_account) {//ok
  93. parent::get_array("DELETE FROM account
  94. WHERE email_account='$del_account' AND id_utente=".$_SESSION['user']['id'].";");
  95. }
  96. ////////////////////////////////}
  97. /////////////////////////MESSAGE{
  98. ////////////////////////////////
  99. private function get_messaggio_new_id(){
  100. $result = parent::get_array("select nextval('public.messaggio_id_messaggio_seq'::text)");
  101. return $result[0]['nextval'];
  102. }
  103. public function add_message($account,$message){
  104. require_once('message_parser.class.php');
  105. // $messagge č il testo RFC2822 del messaggio
  106. // l'estrazione dei messagi dall'MBOX viene fatta in 'load_mbox.php'
  107. $params['include_bodies'] = true;
  108. $params['decode_bodies'] = true;//impostato a true da false
  109. $params['decode_headers'] = true;
  110. $params['input'] = $message;
  111. $params['crlf'] = "\r\n";
  112. // $st come $structure
  113. $st = Mail_mimeDecode::decode($params);
  114. $headers=$st->headers;
  115. //prepariamo i dati per la tabella msg
  116. // User-agent
  117. if (isset($headers['user-agent'])) {
  118. $user_agent = $headers['user-agent'];
  119. $user_agent = "'$user_agent'";
  120. trim(&$user_agent);
  121. } elseif(isset($headers['x-mailer'])) {
  122. $user_agent=$headers['x-mailer'];
  123. $user_agent = "'$user_agent'";
  124. trim(&$user_agent);
  125. } else {
  126. $user_agent = 'NULL';
  127. }
  128. // Message-ID
  129. $msg_id_arr = Mail_RFC822::parseAddressList($headers['message-id'], '', false);
  130. if (!is_object($msg_id_arr)){
  131. $msg_id = addslashes($msg_id_arr[0]->mailbox.'@'.$msg_id_arr[0]->host);
  132. }
  133. // Subject
  134. $subject = addslashes($headers['subject']);
  135. // Body
  136. $body = Message_parser::prepare_bodies($st);
  137. //controllo il tipo testo e decido quale text inserire nel db
  138. $testo_normale = is_null($body['text'])?'NULL':"'".addslashes($body['text'])."'";
  139. $testo_html = is_null($body['html'])?'NULL':"'".addslashes($body['html'])."'";
  140. $date = Message_parser::date_prepare($headers['date']);
  141. $forwarded = Message_parser::is_forwarded($subject)?'TRUE':'FALSE';
  142. if(isset($headers['list-id']) and trim($headers['list-id'])!="") {
  143. $newsgroup = Message_parser::get_newsgroup_name($headers['list-id']);
  144. $newsgroup = is_null($newsgroup)?'NULL':"'".addslashes($newsgroup)."'";
  145. } else {
  146. $newsgroup = 'NULL';
  147. }
  148. //ci riserviamo un id della seq_messaggio del db
  149. $id_current_msg = $this->get_messaggio_new_id();
  150. //inserisci messaggio nel db
  151. parent::get_array("
  152. INSERT INTO messaggio (
  153. id_utente, email_account, id_messaggio,
  154. date, subject, testo_normale, testo_html, message_id,
  155. forwarded, newsgroup, user_agent)
  156. VALUES ( ".$_SESSION['user']['id'].", '$account', $id_current_msg,
  157. '$date', '$subject', $testo_normale, $testo_html, '$msg_id',
  158. $forwarded, $newsgroup, $user_agent );");
  159. //lavoriamo su from ,to ,cc
  160. /*ESEMPIO di array fatto da Mail_RFC822::parseAddressList():
  161. array(1) {
  162. [0]=>
  163. object(stdClass)#7 (4) {
  164. ["personal"]=>
  165. string(0) "NOME_VISUALIZZATO"
  166. ["comment"]=>
  167. array(0) {
  168. }
  169. ["mailbox"]=>
  170. string(13) "progetto_mare"
  171. ["host"]=>
  172. string(8) "yahoo.it"
  173. }
  174. }*/
  175. $types = array("from", "sender", "reply-to", "to", "cc", "bcc");
  176. foreach ($types as $type) {
  177. if (isset($headers[$type])) {
  178. $addr_arr = Mail_RFC822::parseAddressList($headers[$type], '', false);
  179. if (is_object($addr_arr)) continue;
  180. for ($i=0;$i<count($addr_arr);$i++) {
  181. $email = $addr_arr[$i]->mailbox.'@'.$addr_arr[$i]->host;
  182. $name = addslashes($addr_arr[$i]->personal);
  183. $this->add_message_address($id_current_msg, $type, $i, $email, $name);
  184. }
  185. }
  186. }
  187. // Received
  188. //tabella host_riceventi e host mittenti vedi dove inserire by e from
  189. if (is_array($headers['received']) && count($headers['received'])) {
  190. foreach($headers['received'] as $key_receive => $value_receive) {
  191. $host = Message_parser::parse_received($value_receive);
  192. if ($host['host'] != ""){
  193. parent::get_array("INSERT INTO received (id_messaggio, posizione, date, id_host)
  194. VALUES ($id_current_msg, $key_receive, '".$host['date']."', '".$host['host']."');");
  195. }
  196. }
  197. }
  198. //Attachment
  199. if(trim($st->ctype_primary)=="multipart" and trim($st->ctype_secondary)=="mixed"){
  200. foreach($st->parts as $part_num => $part){
  201. if( (isset($part->disposition)) && $part->body!=""){//and (trim($parts_value->disposition)=="attachment"))
  202. $file_name = $part->ctype_parameters['name'];
  203. trim(&$file_name);
  204. if ($file_name == ""){
  205. $file_name = "unnamed_attachment_$part_num";
  206. }
  207. $this->add_attachment($id_current_msg, $file_name, $part->body);
  208. }
  209. }
  210. }
  211. // In-Reply_to
  212. if( isset($headers['in-reply-to']) and $headers['in-reply-to'] != "") {
  213. $msg_id_arr = Mail_RFC822::parseAddressList($headers['in-reply-to'], '', false);
  214. // se č un oggetto allora č sicuramente PEAR_Error
  215. // quindi si fa il ciclo solo se non lo č.
  216. if (!is_object($msg_id_arr)){
  217. for ($i=0;$i<count($msg_id_arr);$i++) {
  218. $msg_id = $msg_id_arr[$i]->mailbox.'@'.$msg_id_arr[$i]->host;
  219. $this->add_message_in_reply_to($id_current_msg, $msg_id);
  220. }
  221. }
  222. }
  223. }
  224. private function add_message_address($id, $type, $pos, $email, $name=''){
  225. parent::get_array("INSERT INTO indirizzo_in_messaggio
  226. (id_messaggio, tipo_header, posizione_in_elenco, indirizzo_email, nome_visualizzato)
  227. VALUES ($id, '$type', $pos, '$email', '$name' );");
  228. }
  229. public function add_message_to_folder($id_msg, $id_fld) {
  230. /* per caso esiste giŕ una copia in quella cartella? */
  231. $copy = $this->get_array("SELECT * FROM inclusione_cartella_msg
  232. WHERE id_cartella=$id_fld AND id_messaggio=$id_msg;");
  233. if (is_array($copy)) return false;
  234. /* fine controllo per copie... */
  235. $this->get_array("
  236. INSERT INTO inclusione_cartella_msg (id_cartella, id_messaggio)
  237. VALUES ($id_fld, $id_msg);
  238. ");
  239. return true;
  240. }
  241. public function add_message_in_reply_to($id_msg, $msg_id){
  242. $this->get_array("
  243. INSERT INTO risposta_messaggio (id_msg_risposta, msg_id_originale)
  244. VALUES ($id_msg, '$msg_id');");
  245. }
  246. public function get_message_in_reply_to($id){
  247. $result = $this->get_array("SELECT msg_id_originale FROM risposta_messaggio WHERE id_msg_risposta=$id;");
  248. return $result;
  249. }
  250. public function get_message($id){
  251. $result = parent::get_array("SELECT *
  252. FROM messaggio
  253. WHERE
  254. id_utente = ".$_SESSION['user']['id']."
  255. AND id_messaggio = ".$id."
  256. ;");
  257. return $result[0];
  258. }
  259. public function get_message_address($id_msg, $type, $pos){
  260. $result = parent::get_array("SELECT indirizzo_email, nome_visualizzato
  261. FROM indirizzo_in_messaggio
  262. WHERE id_messaggio = $id_msg AND tipo_header='$type'
  263. AND posizione_in_elenco=$pos;");
  264. return $result[0];
  265. }
  266. public function get_message_addresses($id, $type=null){
  267. // per aumentare la sicurezza, anche qui controlliamo l'utente
  268. if ($type == null) {
  269. $result = parent::get_array("SELECT ind.tipo_header, ind.posizione_in_elenco, ind.indirizzo_email,
  270. ind.nome_visualizzato, c_email.id_contatto
  271. FROM ((messaggio AS msg NATURAL JOIN account AS acc)
  272. NATURAL JOIN indirizzo_in_messaggio AS ind)
  273. LEFT JOIN (contatto NATURAL JOIN contatto_email AS c_email)
  274. ON (ind.indirizzo_email = c_email.indirizzo_email)
  275. WHERE
  276. acc.id_utente = ".$_SESSION['user']['id']."
  277. AND acc.visibile = TRUE
  278. AND ind.id_messaggio = ".$id."
  279. ORDER BY ind.tipo_header, posizione_in_elenco ASC
  280. ;");
  281. return $result;
  282. } else {
  283. $result = parent::get_array("SELECT ind.posizione_in_elenco, ind.indirizzo_email,
  284. nome_visualizzato, c_email.id_contatto
  285. FROM ((messaggio AS msg NATURAL JOIN account AS acc)
  286. NATURAL JOIN indirizzo_in_messaggio AS ind)
  287. LEFT JOIN (contatto NATURAL JOIN contatto_email AS c_email)
  288. ON (ind.indirizzo_email = c_email.indirizzo_email)
  289. WHERE
  290. acc.id_utente = ".$_SESSION['user']['id']."
  291. AND acc.visibile = TRUE
  292. AND ind.id_messaggio = ".$id."
  293. AND ind.tipo_header = '$type'
  294. ORDER BY posizione_in_elenco ASC
  295. ;");
  296. return $result;
  297. }
  298. }
  299. public function get_messages($id_fld){
  300. $result = parent::get_array("SELECT msg.id_messaggio, msg.subject, msg.date, msg.email_account
  301. FROM (messaggio AS msg NATURAL JOIN account AS acc) NATURAL JOIN inclusione_cartella_msg AS inc
  302. WHERE
  303. acc.id_utente = ".$_SESSION['user']['id']."
  304. AND acc.visibile = TRUE
  305. AND inc.id_cartella = ".$id_fld."
  306. ;");
  307. return $result;
  308. }
  309. public function get_message_attachments($id) {
  310. $result = parent::get_array("SELECT id_file, percorso, nome_allegato
  311. FROM messaggio AS m NATURAL JOIN file_allegato AS f
  312. WHERE
  313. m.id_messaggio = ".$id."
  314. ;");
  315. return $result;
  316. }
  317. public function del_message_from_folder($id_msg, $id_fld) {
  318. if (!$this->get_message($id_msg)) return false;
  319. $result = parent::get_array("DELETE FROM inclusione_cartella_msg
  320. WHERE id_cartella=$id_fld AND id_messaggio=$id_msg ;");
  321. return $result;
  322. }
  323. public function del_message($id_msg) {
  324. if (!$this->get_message($id_msg)) return false;
  325. $result = parent::get_array("DELETE FROM messaggio
  326. WHERE id_messaggio=$id_msg;");
  327. return $result;
  328. }
  329. public function get_message_thread($id){
  330. /*{
  331. * il formato finale sarŕ un array del tipo:
  332. * $msg_thread[0]=id_messaggio piů vecchio
  333. * $msg_thread[1]=id_messaggio
  334. * $msg_thread[2]=id_messaggio
  335. * $msg_thread[3]=id_messaggio corrente
  336. }*/
  337. // RICORSIVO
  338. $parent_id = $this->get_array("SELECT id_messaggio FROM messaggio
  339. WHERE message_id = (SELECT msg_id_originale FROM risposta_messaggio
  340. WHERE id_msg_risposta=$id)
  341. AND id_utente = ".$_SESSION['user']['id']." ;");
  342. if (is_array($parent_id)) {
  343. $recursive_arr = $this->get_message_thread($parent_id[0]['id_messaggio']);
  344. return array_merge($recursive_arr, array($id));
  345. } else {
  346. return array($id);
  347. }
  348. }
  349. ////////////////////////////////}
  350. /////////////////////////FOLDER{
  351. ////////////////////////////////
  352. public function get_folder($id){//ok
  353. // non č gestito il caso di richiesta dell'ID 0 (InBox)
  354. // forse da completare, bisogna recuperare anche i nomi di tutte le cartelle superiori
  355. $id = intval($id);
  356. $fld_arr = parent::get_array("SELECT id_cartella, nome, id_cartella_superiore FROM cartella
  357. WHERE id_cartella='".$id."' AND id_utente=".$_SESSION['user']['id'].";");
  358. return $fld_arr[0];
  359. }
  360. public function get_subfolders($id = null){//ok
  361. if(is_integer(intval($id)) && $id>0) $id = " = $id ";
  362. else $id = ' IS NULL ';
  363. $subfolders = parent::get_array("
  364. SELECT id_cartella, nome, id_cartella_superiore FROM cartella
  365. WHERE id_cartella = any
  366. (SELECT id_cartella FROM cartella
  367. WHERE id_cartella_superiore ".$id."
  368. AND id_utente=".$_SESSION['user']['id'].");");
  369. return $subfolders;
  370. }
  371. public function get_all_subfolders($id){//ok
  372. // questo metodo serve per le ricerche
  373. $subs = $this->get_subfolders($id);
  374. $current_fld[] = $this->get_folder($id);
  375. if (is_array($subs)) {
  376. foreach($subs as $val) {
  377. $current_arr = $this->get_all_subfolders($val['id_cartella']);
  378. return array_merge($current_fld, $current_arr);
  379. }
  380. } else {
  381. return $current_fld;
  382. }
  383. }
  384. public function get_inbox_folder(){
  385. $inbox_fld = parent::get_array("
  386. SELECT id_cartella, nome, id_cartella_superiore FROM cartella
  387. WHERE nome = 'InBox'
  388. AND id_cartella_superiore IS NULL
  389. AND id_utente=".$_SESSION['user']['id'].";");
  390. return $inbox_fld[0];
  391. }
  392. private function get_parent_folder($id){//ok
  393. $fld_arr = parent::get_array("
  394. SELECT id_cartella, nome, id_cartella_superiore FROM cartella
  395. WHERE id_cartella =
  396. (SELECT id_cartella_superiore FROM cartella
  397. WHERE id_cartella='".$id."'
  398. AND id_utente=".$_SESSION['user']['id'].");");
  399. return $fld_arr[0];
  400. }
  401. public function get_path_to_folder($id = null){//ok
  402. //la cartella stessa č inclusa
  403. /*{
  404. * il formato finale sarŕ un array del tipo:
  405. * $fld_tree[0]['nome cartella'] = "cartella attaccata alla radice"
  406. * $fld_tree[1]['nome cartella'] = "cartella intermedia"
  407. * $fld_tree[2]['nome cartella'] = "cartella intermedia"
  408. * $fld_tree[3]['nome cartella'] = "cartella foglia"
  409. }*/
  410. // l'id=0 non č permesso nel db
  411. if ($id==0) {
  412. $all_fld[0]['id_cartella'] = null;
  413. $all_fld[0]['id_cartella_superiore'] = null;
  414. $all_fld[0]['nome'] = null;
  415. return $all_fld;
  416. }
  417. // RICORSIVO
  418. // per ora si implementa in php ma se salta fuori una soluzione in PGSQL č preferibile
  419. $curr_fld[0] = $this->get_folder($id);
  420. $parent_id = $curr_fld[0]['id_cartella_superiore'];
  421. unset($curr_fld[0]['id_cartella_superiore']);
  422. if (!is_null($parent_id)) {
  423. $recursive_arr = $this->get_path_to_folder($parent_id);
  424. return array_merge($recursive_arr, $curr_fld);
  425. } else {
  426. return $curr_fld;
  427. }
  428. }
  429. public function add_folder($name, $parent_fld = null){
  430. /* per caso esiste giŕ una copia di quella cartella? */
  431. $copy_parent = is_null($parent_fld)?" IS NULL ":" =$parent_fld ";
  432. $copy = $this->get_array("SELECT * FROM cartella
  433. WHERE nome='$name' AND id_cartella_superiore $copy_parent;");
  434. if (is_array($copy)) return false;
  435. /* fine controllo per copie... */
  436. $parent_fld = is_null($parent_fld)?" NULL ":" $parent_fld ";
  437. $fld = parent::get_array("
  438. INSERT INTO cartella (id_cartella, nome, id_cartella_superiore, id_utente)
  439. VALUES (DEFAULT, '$name', $parent_fld, ".$_SESSION['user']['id']." );");
  440. return $fld;
  441. }
  442. public function del_folder($id) {
  443. parent::get_array("DELETE FROM cartella
  444. WHERE id_cartella=".$id." AND id_utente=".$_SESSION['user']['id']." ;");
  445. }
  446. public function ren_folder($id, $name) {
  447. parent::get_array("UPDATE cartella SET nome='".$name."'
  448. WHERE id_cartella=".$id." AND id_utente=".$_SESSION['user']['id']." ;");
  449. }
  450. public function print_folder_tree($id = null){
  451. require_once('folder.class.php');
  452. $subs = $this->get_subfolders($id);
  453. echo "<dir>";
  454. if (is_array($subs)) {
  455. foreach($subs as $val) {
  456. echo '<li>';
  457. Folder::print_folder($val['nome'], $val['id_cartella'], $val['id_cartella_superiore']);
  458. //echo $separator;
  459. $this->print_folder_tree($val['id_cartella']);
  460. }
  461. }
  462. echo "</dir>";
  463. }
  464. public function print_folder_tree_msg($op, $id_msg, $fld=null, $id = null){
  465. // questo metodo č fondamentalmente per il file message_tools.php
  466. require_once('folder.class.php');
  467. $subs = $this->get_subfolders($id);
  468. echo "<dir>";
  469. if (is_array($subs)) {
  470. foreach($subs as $val) {
  471. $fld_query = is_null($fld)?"":"&fld=$fld";//per quando si tratta di move
  472. echo '<li>';
  473. echo "<a href=\"javascript: opener.location.href='message_tools.php?op=$op&id=$id_msg&fld_dest="
  474. .$val['id_cartella'].$fld_query."'; window.close()\" >".$val['nome']."</a> ";
  475. //echo $separator;
  476. $this->print_folder_tree_msg($op, $id_msg, $fld, $val['id_cartella']);
  477. }
  478. }
  479. echo "</dir>";
  480. }
  481. public function print_folder_tree_search($id=null){
  482. // questo metodo č fondamentalmente per il file message_tools.php
  483. $subs = $this->get_subfolders($id);
  484. echo "<dir>";
  485. if (is_array($subs)) {
  486. foreach($subs as $val) {
  487. $fld_query = is_null($fld)?"":"&fld=$fld";//per quando si tratta di move
  488. echo '<li>';
  489. echo "<a href=\"javascript: sendFolder(".$val['id_cartella'].",'".$val['nome']."'); window.close()\" >".$val['nome']."</a> ";
  490. //echo $separator;
  491. $this->print_folder_tree_search($val['id_cartella']);
  492. }
  493. }
  494. echo "</dir>";
  495. }
  496. ////////////////////////////////}
  497. /////////////////////////ATTACHMENT{
  498. ////////////////////////////////
  499. private function get_attachment_new_id(){
  500. $result = parent::get_array("select nextval('public.file_allegato_id_file_seq'::text)");
  501. return $result[0]['nextval'];
  502. }
  503. public function add_attachment($id_msg, $file_name, &$attachment) {
  504. // aggiungere l'allegato al fileystem
  505. $id_file = $this->get_attachment_new_id();
  506. $attach_dir = "./attachments/";
  507. $file_path = "$attach_dir$id_file/";
  508. if (!is_dir($attach_dir)) mkdir($attach_dir);
  509. mkdir($file_path);
  510. touch($file_path.$file_name);
  511. file_put_contents($file_path.$file_name, $attachment);
  512. // aggiungere al DB
  513. parent::get_array("INSERT INTO file_allegato
  514. (id_messaggio, id_file, percorso, nome_allegato)
  515. VALUES ($id_msg, $id_file, '$file_path', '$file_name' );");
  516. }
  517. public function del_attachments(){
  518. //error_reporting(0);
  519. $to_del = parent::get_array("
  520. SELECT * FROM file_allegato
  521. WHERE id_messaggio IS NULL;");
  522. if (!is_array($to_del))
  523. return false;
  524. foreach ($to_del as $attach) {
  525. if(file_exists($attach['percorso'].$attach['nome_allegato']))
  526. unlink($attach['percorso'].$attach['nome_allegato']);
  527. if (rmdir($attach['percorso']))
  528. parent::get_array("DELETE FROM file_allegato
  529. WHERE id_file=".$attach['id_file'].";");
  530. }
  531. return true;
  532. }
  533. ////////////////////////////////}
  534. /////////////////////////CONTACT{
  535. ////////////////////////////////
  536. public function get_contact_new_id(){
  537. $result = parent::get_array("SELECT nextval('public.contatto_id_contatto_seq'::text)");
  538. return $result[0]['nextval'];
  539. }
  540. public function get_contacts(){
  541. $results = parent::get_array("SELECT id_contatto, nome, cognome
  542. FROM contatto WHERE id_utente = ".$_SESSION['user']['id']." ;");
  543. if(!is_bool($results)){
  544. foreach ($results as $key => $row){
  545. $tmp=$this->get_contact_email($row['id_contatto']);
  546. $results[$key]['email']=$tmp[0];
  547. }
  548. }
  549. return $results;
  550. }
  551. public function get_contact($id){
  552. $result = parent::get_array("SELECT * FROM contatto
  553. WHERE id_contatto=$id AND id_utente=".$_SESSION['user']['id']." ;");
  554. return $result[0];
  555. }
  556. public function get_contact_email($id){
  557. $tmp_result = parent::get_array("SELECT indirizzo_email FROM contatto_email
  558. WHERE id_contatto=$id ;");
  559. if (is_array($tmp_result)){
  560. foreach ($tmp_result as $key => $email){
  561. $result[$key] = $tmp_result[$key]['indirizzo_email'];
  562. }
  563. }else $result = $tmp_result;
  564. return $result;
  565. }
  566. public function get_contact_number($id, $type){
  567. $tmp_result = parent::get_array("SELECT numero FROM contatto_numero
  568. WHERE id_contatto=$id AND tipo='$type' ;");
  569. if (is_array($tmp_result)){
  570. foreach ($tmp_result as $key => $email){
  571. $result[$key] = $tmp_result[$key]['numero'];
  572. }
  573. }else $result = $tmp_result;
  574. return $result;
  575. }
  576. public function add_contact($id, $name, $surname, $address) {
  577. parent::get_array("INSERT INTO contatto
  578. (id_contatto, nome, cognome, indirizzo, id_utente)
  579. VALUES ($id, '$name', '$surname', '$address', ".$_SESSION['user']['id']." );");
  580. }
  581. public function add_contact_email($id, $email){
  582. /* per caso esiste giŕ una copia di quella contatto? */
  583. $copy_parent = is_null($parent_fld)?" IS NULL ":" =$parent_fld ";
  584. $copy = $this->get_array("SELECT * FROM contatto_email
  585. WHERE id_contatto='$id' AND indirizzo_email='$email' ;");
  586. if (is_array($copy)) return false;
  587. /* fine controllo per copie... */
  588. parent::get_array("INSERT INTO contatto_email
  589. (id_contatto, indirizzo_email)
  590. VALUES ($id, '$email' );");
  591. }
  592. public function add_contact_number($id, $number, $type){
  593. /* per caso esiste giŕ una copia di quella contatto? */
  594. $copy_parent = is_null($parent_fld)?" IS NULL ":" =$parent_fld ";
  595. $copy = $this->get_array("SELECT * FROM contatto_numero
  596. WHERE id_contatto='$id' AND numero='$number' AND tipo='$type';");
  597. if (is_array($copy)) return false;
  598. /* fine controllo per copie... */
  599. parent::get_array("INSERT INTO contatto_numero
  600. (id_contatto, numero, tipo)
  601. VALUES ($id, '$number', '$type' );");
  602. return true;
  603. }
  604. public function mod_contact($id, $name, $surname, $address) {
  605. parent::get_array("UPDATE contatto
  606. SET nome='$name',
  607. cognome= '$surname',
  608. indirizzo= '$address'
  609. WHERE id_contatto=$id
  610. AND id_utente= ".$_SESSION['user']['id']." ;");
  611. }
  612. public function del_contact($id){
  613. parent::get_array("DELETE FROM contatto
  614. WHERE id_contatto=$id AND id_utente=".$_SESSION['user']['id']." ;");
  615. }
  616. public function del_contact_email($id, $email){
  617. parent::get_array("DELETE FROM contatto_email
  618. WHERE id_contatto=$id AND indirizzo_email='$email' ;");
  619. }
  620. public function del_contact_number($id, $number, $type){
  621. parent::get_array("DELETE FROM contatto_numero
  622. WHERE id_contatto=$id AND numero='$number' AND tipo='$type' ;");
  623. }
  624. ////////////////////////////////}
  625. }
  626. ?>