invite.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. require '../../lib/glob.php';
  3. require '../../lib/muoribene.php';
  4. require '../../lib/sessionstart.php';
  5. require '../../lib/myconn.php';
  6. require '../../lib/getadmacc.php';
  7. if ($account['Level']=='guest')
  8. muoribene('Sorry, you are not authorized.',true);
  9. require '../../lib/jsencode.php';
  10. require '../../lib/menu.php';
  11. $menu['menu']['selected']=true;
  12. $menu['menu']['submenu']['instances']['selected']=true;
  13. buildmenu($menu);
  14. $dbg='';
  15. use function mysqli_real_escape_string as myesc;
  16. // praticamente una macro
  17. function hspech($str) {
  18. return(htmlspecialchars($str,ENT_QUOTES|ENT_HTML5,'UTF-8'));
  19. }
  20. require '../../lib/randstr.php';
  21. function parsetempline($line,$substarr) {
  22. $patterns=array('/%guestinsturi/','/%guestname/','/%guestemail/','/%guestpassword/','/%ourdomain/');
  23. return(preg_replace($patterns,$substarr,$line));
  24. }
  25. if (array_key_exists('id',$_GET) && preg_match('/^[0-9]+$/',$_GET['id'])===1) {
  26. $_GET['id']+=0;
  27. $res=mysqli_query($link,'SELECT * FROM Instances WHERE ID='.$_GET['id'])
  28. or muoribene(__LINE__.': '.mysqli_error($link),true);
  29. if (mysqli_num_rows($res)!=1)
  30. muoribene('Non esiste alcuna istanza con ID='.$_GET['id'].'.',true);
  31. $inst=mysqli_fetch_assoc($res);
  32. if (trim($inst['Email'])=='')
  33. muoribene('Nessun indirizzo email è definito per questa istanza.',true);
  34. $createacc='false';
  35. if (!is_null($inst['GuestID'])) {
  36. $res=mysqli_query($link,'SELECT * FROM Admins WHERE ID='.$inst['GuestID'])
  37. or muoribene(__LINE__.': '.mysqli_error($link),true);
  38. if (mysqli_num_rows($res)==0)
  39. muoribene('Non esiste alcun account con ID='.$inst['GuestID'].'.',true);
  40. $templfp='mailtemplates/reminder';
  41. } else {
  42. $res=mysqli_query($link,'SELECT * FROM Admins WHERE Email=\''.myesc($link,$inst['Email']).'\'')
  43. or muoribene(__LINE__.': '.mysqli_error($link),true);
  44. if (mysqli_num_rows($res)==0) {
  45. $templfp='mailtemplates/first_invitation';
  46. $createacc='true';
  47. } else {
  48. $templfp='mailtemplates/more_instances';
  49. }
  50. }
  51. $templ=file($templfp,FILE_IGNORE_NEW_LINES);
  52. if ($templ===false)
  53. muoribene('Impossibile aprire «'.$templfp.'».',true);
  54. $out='<form action="invite.php" method="post" id="f" onsubmit="return send();">'.N;
  55. $out.='<table class="bigtab">'.N;
  56. $out.='<tbody>'.N;
  57. $out.='<tr><td class="insthead">Email di invito</td></tr>'.N;
  58. $out.='<tr><td>'.N;
  59. if (is_null($inst['AdmDisplayName']))
  60. $admname='';
  61. elseif (trim($inst['AdmDisplayName'])!='')
  62. $admname=$inst['AdmDisplayName'];
  63. elseif (trim($inst['AdmAccount'])!='')
  64. $admname=$inst['AdmAccount'];
  65. else
  66. $admname='';
  67. $haddress=$inst['Email'];
  68. if ($admname!='') $haddress=$admname.' <'.$haddress.'>';
  69. $madmname='';
  70. if ($admname!='') $madmname=' '.$admname;
  71. if ($admname=='') $admname='Unknown';
  72. $password=randstr(16);
  73. define('RN',"\r\n");
  74. //('/%guestinsturi/','/%guestname/','/%guestemail/','/%guestpassword/','/%ourdomain/')
  75. $subj=parsetempline($templ[0],array($inst['URI'],$madmname,$inst['Email'],$password,$iniarr['site_domain']));
  76. $message='';
  77. for ($i=2; $i<count($templ); $i++)
  78. $message.=parsetempline($templ[$i],array($inst['URI'],$madmname,$inst['Email'],$password,$iniarr['site_domain'])).RN;
  79. $out.='<div class="mailheader"><strong>Mittente:</strong> '.hspech($iniarr['ref_name']).' '.hspech('<'.$iniarr['ref_email'].'>').'</div>'.N;
  80. $out.='<div class="mailheader"><strong>Destinatario:</strong> '.hspech($haddress).'</div>'.N;
  81. $out.='<div class="mailheader"><strong>Oggetto:</strong> <input type="text" id="subject" name="subject" class="mailsubj" value="'.hspech($subj).'"></div>'.N;
  82. $out.='<textarea id="message" name="message" rows="20" class="mailmsg">'.hspech($message).'</textarea>'.N;
  83. $out.='<input type="button" value="Invia" class="mailbut" onclick="send();">'.N;
  84. $out.='<input type="hidden" name="id" value="'.$inst['ID'].'">'.N;
  85. $out.='<input type="hidden" name="insturi" value="'.hspech($inst['URI']).'">'.N;
  86. $out.='<input type="hidden" name="password" value="'.hspech($password).'">'.N;
  87. $out.='<input type="hidden" name="to" value="'.hspech($haddress).'">'.N;
  88. $out.='<input type="hidden" name="guestname" value="'.hspech($admname).'">'.N;
  89. $out.='<input type="hidden" name="guestaddr" value="'.hspech($inst['Email']).'">'.N;
  90. $out.='<input type="hidden" name="createacc" value="'.$createacc.'">'.N;
  91. $out.='</td></tr>'.N;
  92. $out.='</tbody>'.N;
  93. $out.='</table>'.N;
  94. $out.='</form>'.N;
  95. $insturi=$inst['URI'];
  96. } elseif (array_key_exists('id',$_POST) && preg_match('/^[0-9]+$/',$_POST['id'])===1 && array_key_exists('insturi',$_POST) && trim($_POST['insturi'])!='' && array_key_exists('subject',$_POST) && trim($_POST['subject'])!='' && array_key_exists('to',$_POST) && trim($_POST['to'])!='' && array_key_exists('message',$_POST) && trim($_POST['message'])!='' && array_key_exists('password',$_POST) && trim($_POST['password'])!='' && array_key_exists('guestaddr',$_POST) && trim($_POST['guestaddr'])!='' && array_key_exists('createacc',$_POST) && preg_match('/^true|false$/',$_POST['createacc'])===1) {
  97. $_POST['id']+=0;
  98. $from=$iniarr['ref_name'].' <'.$iniarr['ref_email'].'>';
  99. //questo per far provette d'invio mail senza toccare il db
  100. if ($iniarr['mail_test_to']!=false && trim($iniarr['mail_test_to'])!='') {
  101. $test=true;
  102. $to=$iniarr['mail_test_to'];
  103. } else {
  104. $test=false;
  105. $to=$_POST['to'];
  106. }
  107. $mail=mail($to,'=?utf-8?B?'.base64_encode($_POST['subject']).'?=',wordwrap($_POST['message'],76,"\r\n",false),array('From'=>$from,'Content-Type'=>'text/plain; charset=UTF-8','Content-Transfer-Encoding'=>'8bit'));
  108. if (!$mail) {
  109. $out='<div class="message">Errori nell’invio della mail.<br>Puoi <a href="invite.php?id='.$_POST['id'].'">riprovare</a>.</div>'.N;
  110. } elseif (!$test) {
  111. if ($_POST['createacc']=='true') {
  112. mysqli_query($link,'INSERT INTO Admins (ID, Username, Email, Password, Level, Page, MaxLocalities, MaxLanguages, MaxFinancing, MaxPolicies, MaxTags, Enabled) VALUES (NULL, \''.myesc($link,$_POST['guestname']).'\', \''.myesc($link,$_POST['guestaddr']).'\', \''.myesc($link,password_hash($_POST['password'],PASSWORD_DEFAULT)).'\', \'guest\', \'0\', \'1\', \'0\', \'3\', \'3\', \'3\', \'1\')')
  113. or muoribene(__LINE__.': '.mysqli_error($link),true);
  114. $accid=mysqli_insert_id($link);
  115. } else {
  116. $res=mysqli_query($link,'SELECT * FROM Admins WHERE Email=\''.myesc($link,$_POST['guestaddr']).'\'')
  117. or muoribene(__LINE__.': '.mysqli_error($link),true);
  118. if (mysqli_num_rows($res)==0)
  119. muoribene(__LINE__.': Non esiste alcun account con Email=“'.$_POST['guestaddr'].'”.',true);
  120. $row=mysqli_fetch_assoc($res);
  121. $accid=$row['ID'];
  122. }
  123. mysqli_query($link,'UPDATE Instances SET GuestID='.$accid.' WHERE ID='.$_POST['id'])
  124. or muoribene(__LINE__.': '.mysqli_error($link),true);
  125. $out='<div class="message">La mail è stata inviata correttamente all’indirizzo «'.$to.'».<br>L’account relativo è stato creato/aggiornato correttamente.</div>'.N;
  126. } else {
  127. $out='<div class="message">La mail è stata inviata correttamente all’indirizzo di test «'.$to.'».<br>Nessun account è stato creato/aggiornato.<br>Se vuoi abilitare l’invio ai destinatari reali e la creazione o l’aggiornamento degli account relativi devi editare il file di configurazione di Mustard.</div>'.N;
  128. }
  129. $insturi=$_POST['insturi'];
  130. } else {
  131. muoribene('Malformed input.',true);
  132. }
  133. mysqli_close($link);
  134. ?>
  135. <!DOCTYPE HTML>
  136. <html lang="it">
  137. <head>
  138. <title>Mustard - Invito admin di «<?php echo(hspech($insturi)); ?>»</title>
  139. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  140. <meta name="description" content="Admin pages for Mastodon Help">
  141. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  142. <link rel="icon" type="image/png" href="imgs/icona-32.png" sizes="32x32">
  143. <link rel="icon" type="image/png" href="imgs/icona-192.png" sizes="192x192">
  144. <link rel="icon" type="image/png" href="imgs/icona-512.png" sizes="512x512">
  145. <link rel="apple-touch-icon-precomposed" href="imgs/icona-180.png">
  146. <link rel="stylesheet" type="text/css" href="css/theme.css?v=<?php echo($cjrand); ?>">
  147. <script language="JavaScript" src="js/menu.js?v=<?php echo($cjrand); ?>"></script>
  148. <script language="JavaScript" src="js/alerta.js?v=<?php echo($cjrand); ?>"></script>
  149. <script language="JavaScript">
  150. <!--
  151. function send() {
  152. var errors='';
  153. if (document.getElementById('subject').value.trim()=='') errors+='<li>Destinatario non definito</li>';
  154. if (document.getElementById('message').value.trim()=='') errors+='<li>Il messaggio è vuoto</li>';
  155. if (errors!='') {
  156. alerta('Errore','<ul>'+errors+'</ul>');
  157. return(false);
  158. } else {
  159. document.getElementById('f').submit();
  160. }
  161. }
  162. //-->
  163. </script>
  164. </head>
  165. <body>
  166. <nav>
  167. <div id="hmenu">
  168. <ul>
  169. <?php echo($menuout); ?>
  170. </ul>
  171. <div class="mtit">Invito admin di «<?php echo(hspech($insturi)); ?>»</div>
  172. <div id="rightdiv">
  173. <img src="imgs/esci.svg" class="rlinks" title="Esci" onclick="document.location.href='logout.php';">
  174. </div>
  175. </div>
  176. </nav>
  177. <div id="popup">
  178. <div id="inpopup">
  179. <div id="popupcont">
  180. ...
  181. </div>
  182. </div>
  183. </div>
  184. <!-- <div id="footer">
  185. </div> -->
  186. <div id="fullscreen">
  187. <div id="middlerow">
  188. <?php
  189. echo($out);
  190. ?>
  191. </div>
  192. </div>
  193. <div id="debug">
  194. <?php echo($dbg); ?>
  195. </div>
  196. </body>
  197. </html>