action.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. <?php
  2. session_start();
  3. require_once('config.php');
  4. require_once('function.php');
  5. mb_internal_encoding("UTF-8" );
  6. mb_http_output("UTF-8" );
  7. mb_http_input("UTF-8" );
  8. iconv_set_encoding("internal_encoding", "UTF-8" );
  9. iconv_set_encoding("output_encoding", "UTF-8" );
  10. iconv_set_encoding("input_encoding", "UTF-8" );
  11. header('Content-Type: text/html; charset=utf-8');
  12. $user = (isset($_SESSION['user']) && $_SESSION['user']!=null ?@unserialize($_SESSION['user']):null);
  13. $user = ($user?$user:null);
  14. $event = array();
  15. $event['date'] = time();
  16. $javascript = array();
  17. $javascript['succes'] = false;
  18. $_ = array();
  19. foreach($_POST as $key=>$val){
  20. $_[$key]=htmlentities($val);
  21. }
  22. foreach($_GET as $key=>$val){
  23. $_[$key]=htmlentities($val);
  24. }
  25. if(isset($_['action'])){
  26. $event['action']=$_['action'];
  27. switch($_['action']){
  28. case 'addUser':
  29. if(file_exists('../'.DCFOLDER.USERFILE)){
  30. if(isset($user) && $user->rank=='admin'){
  31. if($_['tpmToken']==$_SESSION['tpmToken']){
  32. if(isset($_['login']) && isset($_['password'])){
  33. //Vérifie que l'utilisateur n'existe pas déja
  34. if(!existLogin($_['login'])){
  35. $addedUser = array();
  36. $addedUser['login'] = $_['login'];
  37. $addedUser['avatar'] = (isset($_['avatar'])?$_['avatar']:'');
  38. $addedUser['password'] = $_['password'];
  39. $addedUser['rank'] = $_['rank'];
  40. $addedUser['mail'] = $_['mail'];
  41. $addedUser['notifMail'] = "off";
  42. $addedUser['lang'] = DC_LANG;
  43. addUser($addedUser);
  44. $event['user']=$user->login;
  45. $event['result'] = true;
  46. $event['addedUser'] = $_['login'];
  47. addEvent($event);
  48. }
  49. $error = '?openUserPanel=true';
  50. }else{
  51. $error = '?error='.tt('Champs obligatoires non remplis');
  52. }
  53. }
  54. header('location: ../index.php'.$error);
  55. }
  56. }else{
  57. $addedUser = array();
  58. $addedUser['login'] = $_['login'];
  59. $addedUser['avatar'] = (isset($_['avatar'])?$_['avatar']:'');
  60. $addedUser['password'] = $_['password'];
  61. $addedUser['rank'] = $_['rank'];
  62. $addedUser['mail'] = $_['mail'];
  63. $addedUser['notifMail'] = "off";
  64. $addedUser['lang'] = DC_LANG;
  65. addUser($addedUser);
  66. addConfig('ROOT',(isset($_['root'])?$_['root']:''));
  67. $event['user']=$_['login'];
  68. $event['result'] = true;
  69. $event['addedUser'] = $_['login'];
  70. $event['action']= 'install';
  71. addEvent($event);
  72. header('location: ./action.php?action=login&login='.$_['login'].'&password='.$_['password']);
  73. }
  74. break;
  75. case 'openFile':
  76. $file = stripslashes(utf8_decode(html_entity_decode($_['file'])));
  77. $file ='../'.UPLOAD_FOLDER.str_replace(array('../'.UPLOAD_FOLDER,UPLOAD_FOLDER),'',$file);
  78. if(
  79. (READ_FOR_ANONYMOUS || (isset($user) && ($user->rank=='admin' || $user->rank=='user')))
  80. || (isPublished($_['file']))
  81. ){
  82. header('Content-Description: File Transfer');
  83. header('Content-Type: application/octet-stream');
  84. header('Content-Disposition: attachment; filename='.str_replace(' ','-',basename($file)));
  85. header('Content-Transfer-Encoding: binary');
  86. header('Expires: 0');
  87. header('Cache-Control: must-revalidate');
  88. header('Pragma: public');
  89. //header('Content-Length: ' . $file);
  90. ob_clean();
  91. flush();
  92. readfile($file);
  93. exit();
  94. }else{
  95. exit('Fichier priv&eacute;, acc&egrave;s interdit');
  96. }
  97. break;
  98. case 'publishFile':
  99. if(isset($user) && ($user->rank=='admin' || $user->rank=='user')){
  100. $file = stripslashes(utf8_decode(html_entity_decode("../".$_['file'])));
  101. addPublish($file);
  102. $javascript['succes'] = true;
  103. $javascript['status'] = 'Fichier rendu public';
  104. }else{
  105. $javascript['status'] = tt('Vous n\'avez pas les droits pour publier ce fichier');
  106. }
  107. break;
  108. case 'unpublishFile':
  109. if(isset($user) && ($user->rank=='admin' || $user->rank=='user')){
  110. $file = stripslashes(utf8_decode(html_entity_decode("../".$_['file'])));
  111. deletePublish($file);
  112. $javascript['succes'] = true;
  113. $javascript['status'] = 'Fichier rendu privé';
  114. }else{
  115. $javascript['status'] = tt('Vous n\'avez pas les droits pour publier ce fichier');
  116. }
  117. break;
  118. case 'getFiles':
  119. if(READ_FOR_ANONYMOUS || (isset($user) && ($user->rank=='admin' || $user->rank=='user'))){
  120. if(isset($_['folder'])){
  121. $_['folder'] = html_entity_decode($_['folder']);
  122. $requiredFolder = $_['folder'].'/';
  123. }else{
  124. $requiredFolder = '../'.UPLOAD_FOLDER;
  125. }
  126. if($requiredFolder =='//CURRENT/'){
  127. $requiredFolder =$_SESSION['currentFolder'];
  128. }else{
  129. $_SESSION['currentFolder'] = $requiredFolder;
  130. }
  131. $scan = scanFolder($requiredFolder,(isset($_['keywords'])?$_['keywords']:null));
  132. if(count($scan)==0){
  133. $javascript['status'] = tt('aucun fichier');
  134. }else{
  135. $javascript['succes'] = true;
  136. $javascript['currentFolder'] = $requiredFolder;
  137. $javascript['status'] = $scan;
  138. }
  139. }
  140. break;
  141. case 'saveSettings':
  142. if(isset($user) && ($user->rank=='admin' || ($user->rank=='user' && $user->login==$_['user']) )){
  143. if($_['tpmToken']==$_SESSION['tpmToken']){
  144. if(file_exists('../'.DCFOLDER.USERFILE)){
  145. $_['notifMail'] = (isset($_['notifMail'])?'true':'false');
  146. $values = array(
  147. 'password'=>$_['password'],
  148. 'mail'=>$_['mail'],
  149. 'avatar'=>$_['avatar'],
  150. 'notifMail'=>$_['notifMail'],
  151. 'lang'=>$_['lang']
  152. );
  153. updateUser($_['user'], $values);
  154. $javascript['succes'] = true;
  155. header('location: ../index.php');
  156. }
  157. }
  158. }
  159. break;
  160. case 'zipFile':
  161. if(isset($user) && $user->rank=='admin'){
  162. require_once('zip.class.php');
  163. $tempDir = '../'.DCFOLDER.'temp/';
  164. if(!file_exists($tempDir)) mkdir($tempDir);
  165. $filesTemp = scandir($tempDir);
  166. foreach($filesTemp as $file){
  167. if(is_file($tempDir.$file))unlink($tempDir.$file);
  168. }
  169. $file = stripslashes(utf8_decode(html_entity_decode("../".$_['file'])));
  170. $zipName = $tempDir.'.dropFile-'.date('d-m-Y h\hi\ms').'.zip';
  171. $archive = new PclZip($zipName);
  172. $v_list = $archive->create($file, PCLZIP_OPT_REMOVE_PATH,'..\\'.DCFOLDER);
  173. if ($v_list != 0){
  174. $javascript['succes'] = true;
  175. $javascript['status'] = str_replace('../','','./php/action.php?action=openFile&file='.$zipName);
  176. }else{
  177. $javascript['status'] = tt('Impossible de zipper le fichier, nom incorrect ou fichier inexistant :').$archive->errorInfo(true);
  178. }
  179. }else{
  180. $javascript['status'] = tt('Vous n\'avez pas les droits pour zipper ce fichier');
  181. }
  182. break;
  183. case 'moveFile':
  184. if(isset($user)){
  185. $file = stripslashes(utf8_decode(html_entity_decode($_['fileUrl'])));
  186. $fileName = stripslashes(utf8_decode(html_entity_decode($_['fileName'])));
  187. $folder = utf8_decode(html_entity_decode($_['folder']));
  188. if(is_dir($folder)){
  189. if(is_file('../'.$file)){
  190. if(@rename('../'.$file,$folder.'/'.$fileName)){
  191. if(isPublished('../'.$file)){
  192. deletePublish('../'.$file);
  193. addPublish($folder.'/'.$fileName);
  194. }
  195. $javascript['succes'] = true;
  196. $javascript['status'] = tt('Fichier correctement deplace');
  197. }else{
  198. $javascript['status'] = tt('Impossible de deplacer le fichier');
  199. }
  200. }else{
  201. $javascript['status'] = tt('Impossible de deplacer le fichier, fichier incorrect ou inexistant');
  202. }
  203. }else{
  204. $javascript['status'] = tt('Impossible de d&eacute;placer le fichier, dossier incorrect ou inexistant');
  205. }
  206. }else{
  207. $javascript['status'] = tt('Vous n\'avez pas les droits pour deplacer ce fichier');
  208. }
  209. break;
  210. case 'deleteFiles':
  211. if(isset($user) && $user->rank=='admin'){
  212. $file = stripslashes(utf8_decode(html_entity_decode($_['file'])));
  213. if(is_file('../'.$file)){
  214. if(unlink('../'.$file)){
  215. $event['user']=$user->login;
  216. $event['result'] = true;
  217. $event['file'] = $_['file'];
  218. $event['type'] = 'file';
  219. deletePublish('../'.$file);
  220. addEvent($event);
  221. $javascript['succes'] = true;
  222. $javascript['status'] = tt('Fichier correctement supprime');
  223. }else{
  224. $javascript['status'] = tt('Impossible de supprimer le fichier, nom incorrect ou fichier inexistant');
  225. }
  226. }else if(is_dir($file)){
  227. if(recursiveDelete($file)){
  228. $event['user']=$user->login;
  229. $event['result'] = true;
  230. $event['file'] = $_['file'];
  231. $event['type'] = 'folder';
  232. addEvent($event);
  233. $javascript['succes'] = true;
  234. $javascript['status'] = tt('Dossier correctement supprime');
  235. }else{
  236. $javascript['status'] = tt('Impossible de supprimer le dossier, nom incorrect ou dossier inexistant');
  237. }
  238. }
  239. }else{
  240. $javascript['status'] = tt('Vous n\'avez pas les droits pour supprimer ce fichier');
  241. }
  242. break;
  243. case 'deleteUser':
  244. if(isset($user) && $user->rank=='admin'){
  245. if($_['tmpToken']==$_SESSION['tpmToken']){
  246. deleteUser($_['user']);
  247. $event['user']=$user->login;
  248. $event['result'] = true;
  249. $event['deletedUser'] = $_['user'];
  250. addEvent($event);
  251. if($_['user']==$user->login){
  252. header('location: ./action.php?action=logout');
  253. }else{
  254. header('location: ../index.php');
  255. }
  256. }
  257. }
  258. break;
  259. case 'backup':
  260. if(isset($user) && $user->rank=='admin'){
  261. require_once('zip.class.php');
  262. $zipName = '../'.UPLOAD_FOLDER.'dropFiles-'.date('d-m-Y-H\hi').'.zip';
  263. $archive = new PclZip($zipName);
  264. $v_list = $archive->create('../'.UPLOAD_FOLDER, PCLZIP_OPT_REMOVE_PATH,'..');
  265. if ($v_list == 0) {die("Error : ".$archive->errorInfo(true));}
  266. $_SESSION['backup']= file_get_contents($zipName);
  267. $fileSize = filesize($zipName);
  268. unlink($zipName);
  269. header('Content-Description: File Transfer');
  270. header('Content-Type: application/octet-stream');
  271. header('Content-Disposition: attachment; filename='.basename($zipName));
  272. header('Content-Transfer-Encoding: binary');
  273. header('Expires: 0');
  274. header('Cache-Control: must-revalidate');
  275. header('Pragma: public');
  276. header('Content-Length: ' . $fileSize);
  277. ob_clean();
  278. flush();
  279. echo $_SESSION['backup'];
  280. $javascript = null;
  281. }
  282. //header('location: ../index.php');
  283. break;
  284. case 'login':
  285. if(isset($_['token'])){
  286. $user = existToken($_['token']);
  287. $_SESSION['user'] = (!$user?null:serialize($user));
  288. $_SESSION['tpmToken'] = sha1(time().rand(0,100));
  289. if(!$user){
  290. header('location: ../index.php?error=Mauvais identifiant ou mot de passe');
  291. }else{
  292. header('location: ../php/action.php?action=rss');
  293. }
  294. }else{
  295. $user = exist($_['login'],$_['password']);
  296. $_SESSION['user'] = (!$user?null:serialize($user));
  297. $_SESSION['tpmToken'] = sha1(time().rand(0,100));
  298. header('location: ../index.php'.(!$user?'?error=Mauvais identifiant ou mot de passe':''));
  299. }
  300. break;
  301. case 'logout':
  302. $_SESSION = array();
  303. session_unset();
  304. session_destroy();
  305. header('location: ../index.php');
  306. break;
  307. case 'renameFile':
  308. if(isset($user) && ($user->rank=='admin' || $user->rank=='user')){
  309. $file = stripslashes(utf8_decode(html_entity_decode($_['file'])));
  310. $newPath = substr($file,0,strrpos ($file,'/')+1);
  311. $newFileName = stripslashes(utf8_decode(html_entity_decode($_['newName'])));
  312. $forbidenFormats = explode(',',FORBIDEN_FORMAT);
  313. if(in_array(get_extension($_['newName']),$forbidenFormats)) $newFileName .='.txt';
  314. if(!file_exists($newPath.$newFileName)){
  315. if(is_file('../'.$file)){
  316. if(@rename('../'.$file,'../'.$newPath.$newFileName)){
  317. $event['user']=$user->login;
  318. $event['result'] = true;
  319. $event['file'] = $file;
  320. $event['type'] = 'file';
  321. $event['rename'] = $_['newName'];
  322. addEvent($event);
  323. $javascript['succes'] = true;
  324. }else{
  325. $javascript['status'] = tt('Impossible de renommer le fichier, nom incorrect ou fichier inexistant');
  326. }
  327. }else{
  328. if(@rename($file,$newPath.$newFileName)){
  329. $event['user']=$user->login;
  330. $event['result'] = true;
  331. $event['file'] = $file;
  332. $event['type'] = 'folder';
  333. $event['rename'] = $_['newName'];
  334. addEvent($event);
  335. $javascript['succes'] = true;
  336. }else{
  337. $javascript['status'] = tt('Impossible de renommer le dossier, nom incorrect ou dossier inexistant');
  338. }
  339. }
  340. }else{
  341. $javascript['status'] = tt('Impossible de renommer l element % en %, l element % existe deja',array($file,$newFileName,$newFileName));
  342. }
  343. }else{
  344. $javascript['status'] = tt('Vous n\'avez pas les droits pour renommer ce fichier');
  345. }
  346. break;
  347. case 'checkVersion':
  348. echo DC_VERSION_NUMBER;
  349. $javascript = null;
  350. break;
  351. case 'rss':
  352. if(READ_FOR_ANONYMOUS || (isset($user) && ($user->rank=='admin' || $user->rank=='user'))){
  353. header('Content-Type: text/xml; charset=utf-8');
  354. echo rssHeader('http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'?action=rss');
  355. $allEvents = array_reverse(parseEvents());
  356. $root = getConfig('ROOT');
  357. if(isset($allEvents) && count($allEvents)!=0){
  358. foreach($allEvents as $event){
  359. $event = describeEvent($event,$root);
  360. $user = $event['user'];
  361. echo rssItem($event['title'],$event['lien'],$event['date'],$event['description'],$event['action'],$user->login,$root.$user->avatar);
  362. }
  363. }
  364. echo rssFooter();
  365. $javascript = null;
  366. }
  367. break;
  368. case 'addFolder':
  369. if(isset($user) && ($user->rank=='admin' || $user->rank=='user')){
  370. $_['name'] = stripslashes(utf8_decode(html_entity_decode($_['name'])));
  371. $tempName = utf8_decode($_SESSION['currentFolder']).'/'.$_['name'];
  372. if(!isset($_['name']) || trim($_['name'])==''){
  373. $tempName = makeName(utf8_decode($_SESSION['currentFolder']),str_replace(array("\r","\n"),'',tt('Nouveau dossier (%)')));
  374. }
  375. if(!file_exists($tempName)){
  376. if(!in_array(trim($_['name']),array('/','\\',':','?','"','<','>'))){
  377. if(mkdir($tempName)){
  378. @chmod( utf8_decode($_SESSION['currentFolder']).$tempName , 0755);
  379. $javascript['succes'] = true;
  380. $javascript['tempName'] = $tempName;
  381. $javascript['tempNameUrl'] = utf8_decode($_SESSION['currentFolder']).$tempName;
  382. }else{
  383. $javascript['status'] = tt('Erreur, impossible de cr&eacute;er le dossier');
  384. }
  385. }else{
  386. $javascript['status'] = 'Erreur, un nom de fichier/dossier ne peux contenir les caractères suivants : /,\,:,?,",<,>';
  387. }
  388. }else{
  389. $javascript['status'] = 'Erreur, un dossier de ce nom existe déjà!';
  390. }
  391. }else{
  392. $javascript['status'] = tt('Vous ne pouvez rien envoyer car vous n\'avez aucun droits d\'ajout sur le dropCenter');
  393. }
  394. break;
  395. case 'addEventForUpload':
  396. if(isset($user) && ($user->rank=='admin' || $user->rank=='user')){
  397. $user = getUser($user->login);
  398. $files = json_decode(stripslashes(html_entity_decode($_['files'])));
  399. $event['user']=$user->login;
  400. $event['result'] = true;
  401. foreach($files as $key=>$file){
  402. $file->path = str_replace(getConfig('ROOT').UPLOAD_FOLDER,getConfig('ROOT').'php/action.php?action=openFile&file=',$file->path);
  403. $files[$key] = $file;
  404. }
  405. $event['files'] = $files;
  406. addEvent($event);
  407. if (MAIL){
  408. foreach(parseUsers('../') as $userInfos){
  409. if($userInfos->notifMail=="true"){
  410. $mailmembre = $userInfos->mail;
  411. $messageMail ='';
  412. $messageMail .='<img src="'.getConfig('ROOT').AVATARFOLDER.$user->login . '.jpg'.'" align="absmiddle" border="0" />&nbsp;<a href="mailto: '.$user->mail.'">'.$event['user'].'</a> '.tt('a ajoute % fichier%',array(count($files),(count($files)>1?'s':''))).' : <ul>';
  413. foreach($files as $file){
  414. $messageMail .='<li><a href="'.$file->path.'">'.$file->name.'</a> | '.convertSize($file->size).' | '.$file->type.'</li>';
  415. }
  416. $messageMail .= '</ul>';
  417. @mail ($mailmembre . ',', 'DropCenter: '.mb_encode_mimeheader(tt('Ajout d\'un ou plusieurs fichiers par').' '.$event['user']), $messageMail.'<br/>'.tt('Ceci est un message automatique du').' '.'<a href="'.getConfig('ROOT').'">Dropcenter</a>, '.tt('ne pas repondre').'.','Content-type: text/html; charset=UTF-8');
  418. }
  419. }
  420. }
  421. $javascript['succes'] = true;
  422. }else{
  423. $javascript['status'] = tt('Vous ne pouvez rien notifier car vous n\'avez aucun droits d\'ajout sur le dropCenter');
  424. }
  425. break;
  426. case 'upload':
  427. if(isset($user) && ($user->rank=='admin' || $user->rank=='user')){
  428. if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){
  429. $javascript['status'] = tt('Erreur, mauvaise m&eacute;thode http');
  430. }
  431. if(array_key_exists('files',$_FILES) && $_FILES['files']['error'][0] == 0 ){
  432. $pic = $_FILES['files'];
  433. $pic['name'] = utf8_decode($pic['name'][0]);
  434. $pic['tmp_name'] = $pic['tmp_name'][0];
  435. $forbidenFormats = explode(',',FORBIDEN_FORMAT);
  436. $pic['name'] = stripslashes($pic['name']);
  437. if(in_array(get_extension($pic['name']),$forbidenFormats)){
  438. $pic['name'] = $pic['name'].'.txt';
  439. }
  440. $size = filesize($pic['tmp_name']);
  441. if($size<=(MAX_SIZE*1048576)){
  442. $destination = (isset($_SESSION['currentFolder'])?utf8_decode($_SESSION['currentFolder']):'../'.UPLOAD_FOLDER).$pic['name'];
  443. if(move_uploaded_file($pic['tmp_name'], $destination)){
  444. $javascript['status'] = tt('Fichier envoy&eacute; avec succ&egrave;s!');
  445. $javascript['extension'] = get_extension($pic['name']);
  446. $javascript['succes'] = true;
  447. $javascript['filePath'] = getConfig('ROOT').str_replace('../','',$destination);
  448. $javascript['file'] = $pic['name'];
  449. }
  450. }else{
  451. $javascript['status'] = tt('Taille maximale : %Mo d&eacute;pass&eacute;e',array(MAX_SIZE));
  452. }
  453. }else{
  454. $javascript['status'] = tt('Probl&egrave;me rencontr&eacute; lors de l\'upload');
  455. }
  456. }else{
  457. $javascript['status'] = tt('Vous ne pouvez rien envoyer car vous n\'avez aucun droits d\'ajout sur le dropCenter');
  458. }
  459. break;
  460. }
  461. }
  462. echo (isset($javascript)?json_encode($javascript):'');
  463. ?>