FileUploader.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. <?php
  2. class FileUploader {
  3. private $_column = '';
  4. private $_glob = '';
  5. private $_cnf = array();
  6. private $_foundFolders = array();
  7. private $_record = null;
  8. private $BAD_FILE_SIGNS = array();
  9. private $OK_FILE_SIGNS = array();
  10. private $_lastUploadedFile = null;
  11. public function __construct($column, $record) {
  12. $this->_column = $column;
  13. $this->_record = $record;
  14. $this->BAD_FILE_SIGNS = array('.', ' ', ',', '/', 'ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż', 'Ą', 'Ć', 'Ę', 'Ł', 'Ń', 'Ó', 'Ś', 'Ź', 'Ż');
  15. $this->OK_FILE_SIGNS = array('-', '_', '--', '---', 'a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z', 'A', 'C', 'E', 'L', 'N', 'O', 'S', 'Z', 'Z');
  16. }
  17. public function setConfig($conf, &$errMsg = '') {
  18. $DBG = (V::get('DBG_F', 0, $_GET, 'int') > 0);
  19. $this->_cnf['LOCAL_PATH'] = V::get('mount_point', null, $conf);
  20. $this->_cnf['PATH'] = V::get('share_point', null, $conf);
  21. $this->_cnf['WWW'] = V::get('www_share_point', null, $conf);
  22. $this->_cnf['LOOKAT_FOLDER'] = array();
  23. $this->_cnf['LOOKAT_FILES'] = array();// LOOKAT_FILES_LOOK_GLOB
  24. $this->_cnf['DEST_FOLDER'] = array();
  25. foreach ($conf as $key => $val) {
  26. if (substr($key, 0, 14) == 'LOOKAT_FOLDER_') {
  27. $key = substr($key, 14);
  28. $this->_cnf['LOOKAT_FOLDER'][$key] = $val;
  29. }
  30. else if (substr($key, 0, 12) == 'DEST_FOLDER_') {
  31. $key = substr($key, 12);
  32. $this->_cnf['DEST_FOLDER'][$key] = $val;
  33. }
  34. else if (substr($key, 0, 13) == 'LOOKAT_FILES_') {
  35. $key = substr($key, 13);
  36. $this->_cnf['LOOKAT_FILES'][$key] = $val;
  37. }
  38. }
  39. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">this->_conf (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_cnf);echo'</pre>'."\n"; }
  40. foreach ($this->_cnf as $key => $val) {
  41. if ($key == 'LOOKAT_FILES') {
  42. continue;
  43. }
  44. if ($val == null) {
  45. $errMsg = "Brak wartości dla {$key}.";
  46. return false;
  47. }
  48. }
  49. if (!is_writable($this->_cnf['LOCAL_PATH'])) {
  50. $errMsg = "Error: brak uprawnień do zapisu w głównym katalogu!";
  51. return false;
  52. }
  53. return true;
  54. }
  55. private function setLastUploadedFile($lastUploadedFile) {
  56. $this->_lastUploadedFile = $lastUploadedFile;
  57. }
  58. public function getLastUploadedFile() {
  59. return $this->_lastUploadedFile;
  60. }
  61. public function getFolderWeb() {
  62. return $this->_cnf['WWW'];
  63. }
  64. public function getLocalPath() {
  65. return $this->_cnf['LOCAL_PATH'];
  66. }
  67. function findFolder() {
  68. $DBG = (V::get('DBG_F', 0, $_GET, 'int') > 0);
  69. if (!empty($this->_foundFolders)) {
  70. return $this->_foundFolders;
  71. }
  72. $this->_foundFolders = array();
  73. if (empty($this->_cnf['LOOKAT_FOLDER'])) {
  74. return $this->_foundFolders;
  75. }
  76. $look = new stdClass();
  77. //$look->regex = V::get('LOOK_REGEX', '', $this->_cnf['LOOKAT_FOLDER']);
  78. $look->glob = V::get('LOOK_GLOB', '', $this->_cnf['LOOKAT_FOLDER']);
  79. $look->varname = array();
  80. $look->varname['VARNAME'] = V::get('VARNAME', '', $this->_cnf['LOOKAT_FOLDER']);
  81. $look->varname['VARNAME1'] = V::get('VARNAME1', '', $this->_cnf['LOOKAT_FOLDER']);
  82. $look->varname['VARNAME2'] = V::get('VARNAME2', '', $this->_cnf['LOOKAT_FOLDER']);
  83. $look->varname['VARNAME3'] = V::get('VARNAME3', '', $this->_cnf['LOOKAT_FOLDER']);
  84. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$look (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($look);echo'</pre>'; }
  85. foreach ($look->varname as $kName => $vVar) {
  86. if ($vVar) {
  87. if (isset($this->_record->{$vVar})) {
  88. $vVar = $this->_record->{$vVar};
  89. }
  90. $look->glob = str_replace("<{$kName}>", $vVar, $look->glob);
  91. }
  92. }
  93. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">look->glob (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($look->glob);echo'</pre>'."\n"; }
  94. $foundFolders = glob("{$this->_cnf['LOCAL_PATH']}/{$look->glob}", GLOB_ONLYDIR & GLOB_NOSORT);
  95. if (false == $foundFolders) {
  96. return false;
  97. } else {
  98. foreach ($foundFolders as $vFolder) {
  99. $this->_foundFolders []= end(explode('/', $vFolder));
  100. }
  101. }
  102. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">this->_foundFolders (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_foundFolders);echo'</pre>'."\n"; }
  103. return $this->_foundFolders;
  104. }
  105. function cleanFilenamePart($part) {
  106. if ($part == '') return '_';
  107. $part = str_replace($this->BAD_FILE_SIGNS, $this->OK_FILE_SIGNS, trim($part));
  108. if (strlen($part) > 20) $part = substr($part, 0, 20) . '_';
  109. $part = preg_replace('/[^0-9a-zA-Z\-_]/', '_', $part);
  110. return $part;
  111. }
  112. /**
  113. * TODO:
  114. */
  115. function generateFolderName() {
  116. $DBG = false;
  117. $folderParts = array();
  118. $look = new stdClass();
  119. $look->format = V::get('FORMAT', '', $this->_cnf['DEST_FOLDER']);
  120. $look->varname = array();
  121. $look->varname['VARNAME'] = V::get('VARNAME', '', $this->_cnf['DEST_FOLDER']);
  122. $look->varname['VARNAME1'] = V::get('VARNAME1', '', $this->_cnf['DEST_FOLDER']);
  123. $look->varname['VARNAME2'] = V::get('VARNAME2', '', $this->_cnf['DEST_FOLDER']);
  124. $look->varname['VARNAME3'] = V::get('VARNAME3', '', $this->_cnf['DEST_FOLDER']);
  125. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$look (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($look);echo'</pre>'; }
  126. foreach ($look->varname as $kName => $vVar) {
  127. if (!empty($vVar)) {
  128. if (isset($this->_record->{$vVar})) {
  129. if ($vVar == 'M_DIST_DESC') {
  130. $badPrefixes = array();
  131. $badPrefixes[] = 'Sprawy związane z ';
  132. $badPrefixes[] = 'Sprawy związane ze ';
  133. $badPrefixes[] = 'Sprawy zwiazane z ';
  134. $badPrefixes[] = 'Sprawy zwiazane ze ';
  135. $badPrefixes[] = 'Sprawy prowadzone przez ';
  136. $badPrefixes[] = 'Sprawy ';
  137. foreach ($badPrefixes as $vBadPrefix) {
  138. $prefixLen = strlen($vBadPrefix);
  139. if (substr($this->_record->{$vVar}, 0, $prefixLen) == $vBadPrefix) {
  140. $this->_record->{$vVar} = substr($this->_record->{$vVar}, $prefixLen);
  141. break;
  142. }
  143. }
  144. }
  145. $part = $this->cleanFilenamePart($this->_record->{$vVar});
  146. }
  147. if (empty($part)) {
  148. $part = '_';
  149. }
  150. $look->format = str_replace("<{$kName}>", $part, $look->format);
  151. }
  152. }
  153. if (false !== strpos('<', $look->format) || false !== strpos('>', $look->format)) {
  154. return false;// TODO: blad konfiguracji - brakuje definicji zmiennych
  155. }
  156. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$look (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($look);echo'</pre>'; }
  157. return $look->format;
  158. }
  159. function generateFolderName__OLD() {
  160. $dir_tree = array();
  161. foreach ($this->_cnf['DEST_FOLDER'] as $k => $v_fldr) {
  162. $look = new stdClass();
  163. $look->regex = V::get('LOOK_REGEX', '', $v_fldr);
  164. $look->varname = array();
  165. foreach ($v_fldr['VARNAME'] as $k_var_ind => $v_look) {
  166. if (false !== strpos($v_look, '$_SESSION[$thiss->DETECT_TABLE_COLUMN][EDITRECORD][')) {
  167. $v_look = substr($v_look, strlen('$_SESSION[$thiss->DETECT_TABLE_COLUMN][EDITRECORD]['), -1);
  168. $v_look = V::get($v_look, '', $_SESSION[$this->_column]['EDITRECORD']);
  169. }
  170. $v_look = (empty($v_look))? '_' : $this->cleanFilenamePart($v_look);
  171. $look->regex = str_replace('<VARNAME' . $k_var_ind.'>', $v_look, $look->regex);
  172. }
  173. if (false !== strpos('<', $look->regex) || false !== strpos('>', $look->regex)) {
  174. die('<p>' . "Error: Blad konfiguracji \$FOLDERS[{$this->_column}_DEST_FOLDER]" . '</p>');
  175. } else {
  176. $dir_tree []= $look->regex;
  177. }
  178. }
  179. return implode('/', $dir_tree);
  180. }
  181. function getDestFolder($show_if_not_found = false) {
  182. if (empty($this->_foundFolders)) {
  183. if ($show_if_not_found) {
  184. return $this->generateFolderName();
  185. } else {
  186. return null;
  187. }
  188. } else {
  189. return reset($this->_foundFolders);
  190. }
  191. }
  192. function getDestPathShare($show_if_not_found = false) {
  193. $dest_dir = $this->getDestFolder($show_if_not_found);
  194. if (!$dest_dir) {
  195. return null;
  196. }
  197. return $this->_cnf['PATH'] . '/' . $dest_dir;
  198. }
  199. function getDestLocalPath($show_if_not_found = false) {
  200. $dest_dir = $this->getDestFolder($show_if_not_found);
  201. if (!$dest_dir) {
  202. return null;
  203. }
  204. return "{$this->_cnf['LOCAL_PATH']}/{$dest_dir}";
  205. }
  206. function getFoundFolders() {
  207. return $this->_foundFolders;
  208. }
  209. function getFilesFromFolder($folder, $fileNamesOnly = false, $recursive = false) {
  210. $DBG = (V::get('DBG_F', 0, $_GET, 'int') > 0);
  211. if (empty($folder)) {
  212. return false;
  213. }
  214. $look = new stdClass();
  215. if ($this->_cnf['LOOKAT_FILES']) {
  216. //$look->regex = V::get('LOOK_REGEX', '', $this->_cnf['LOOKAT_FOLDER']);
  217. $look->glob = V::get('LOOK_GLOB', '', $this->_cnf['LOOKAT_FILES']);
  218. $look->varname = array();
  219. $look->varname['VARNAME'] = V::get('VARNAME', '', $this->_cnf['LOOKAT_FILES']);
  220. $look->varname['VARNAME1'] = V::get('VARNAME1', '', $this->_cnf['LOOKAT_FILES']);
  221. $look->varname['VARNAME2'] = V::get('VARNAME2', '', $this->_cnf['LOOKAT_FILES']);
  222. $look->varname['VARNAME3'] = V::get('VARNAME3', '', $this->_cnf['LOOKAT_FILES']);
  223. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">$look (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($look);echo'</pre>'; }
  224. foreach ($look->varname as $kName => $vVar) {
  225. if ($vVar) {
  226. if (isset($this->_record->{$vVar})) {
  227. $vVar = $this->_record->{$vVar};
  228. }
  229. $look->glob = str_replace("<{$kName}>", $vVar, $look->glob);
  230. }
  231. }
  232. } else {
  233. $look->glob = "*.*";
  234. }
  235. $ret = glob("{$this->_cnf['LOCAL_PATH']}/{$folder}/{$look->glob}", GLOB_NOSORT);
  236. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">glob('."{$this->_cnf['LOCAL_PATH']}/{$folder}/*.*".') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($ret);echo'</pre>'; }
  237. if ($recursive) {
  238. $retSubFolderFiles = glob("{$this->_cnf['LOCAL_PATH']}/{$folder}/*/*.*", GLOB_NOSORT);
  239. if ($retSubFolderFiles !== false) {
  240. foreach ($retSubFolderFiles as $vFile) {
  241. if ($fileNamesOnly == true) {
  242. $ret[] = str_replace("{$this->_cnf['LOCAL_PATH']}/{$folder}/", '', $vFile);
  243. } else {
  244. $ret[] = $vFile;
  245. }
  246. }
  247. }
  248. }
  249. if (false === $ret) {
  250. return false;
  251. } else {
  252. foreach ($ret as $k => $vFile) {
  253. if ($fileNamesOnly == true) {
  254. $ret[$k] = str_replace("{$this->_cnf['LOCAL_PATH']}/{$folder}/", '', $vFile);
  255. } else {
  256. $ret[$k] = $vFile;
  257. }
  258. }
  259. }
  260. return $ret;
  261. }
  262. function getFilesFromSkany($skanyConf, $fileNamesOnly = false) {
  263. $DBG = (V::get('DBG_F', 0, $_GET, 'int') > 0);
  264. if (empty($skanyConf)) {
  265. return false;
  266. }
  267. $skanyLocalPath = V::get('mount_point', '', $skanyConf);
  268. if (empty($skanyLocalPath)) {
  269. return false;
  270. }
  271. $ret = glob("{$skanyLocalPath}/*.*", GLOB_NOSORT);
  272. if($DBG){ echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">glob('."{$this->_cnf['LOCAL_PATH']}/{$folder}/*.*".') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($ret);echo'</pre>'; }
  273. if (false === $ret) {
  274. return false;
  275. } else {
  276. foreach ($ret as $k => $vFile) {
  277. if ($fileNamesOnly == true) {
  278. $ret[$k] = end(explode('/', $vFile));
  279. } else {
  280. $ret[$k] = $vFile;
  281. }
  282. }
  283. }
  284. return $ret;
  285. }
  286. function showFoundFolders() {// TODO: RMME not used
  287. $cnt_dirs = count($this->_foundFolders);
  288. if ($cnt_dirs > 1) {
  289. echo '<p style="color:red">' . "Odnaleziono {$cnt_dirs} folderów, przenieś pliki do jednego folderu i usuń błędnie nazwane." . '</p>';
  290. } else if ($cnt_dirs == 0) {
  291. echo '<p>' . "Nie odnaleziono folderu - zostanie utworzony automatycznie podczas dodawania pliku." . '</p>';
  292. } else {
  293. echo '<p style="color:green">' . "Odnaleziono odpowiedni folder: " . '<code><b>' . $this->getDestFolder() . '</b></code>' . '</p>';
  294. }
  295. foreach ($this->_foundFolders as $v_dir) {
  296. $v_files = $this->getFilesFromFolder($v_dir);
  297. $path_samba = $this->_cnf['PATH'] . '/' . $v_dir;
  298. $path_www = $this->_cnf['WWW'] . '/' . $v_dir;
  299. echo '<table cellspacing="0" cellpadding="0" border="0" style="margin:20px 0;border:1px solid #777;">';
  300. echo '<tr><td colspan="3" bgcolor="#ccf" style="font-size:small;"><img src="icon/ms_directory.gif" border="0">' . "Adres:" . '<a href="' . "file://{$path_samba}" . '">' . $path_samba . '</a>' . " WWW: " . '<a href="' . $path_www . '" target="_blank">' . "(Web)" . '</font></a> </td></tr>';
  301. echo '<tr>';
  302. echo '<th style="border-right:1px solid #777;text-align:left;">' . "Nazwa" . '</th>';
  303. echo '<th style="border-right:1px solid #777;text-align:left;">' . "Rozmiar" . '</th>';
  304. echo '<th style="text-align:left;">' . "Typ" . '</th>';
  305. echo '</tr>';
  306. if (empty($v_files)) {
  307. echo '<tr><td colspan="3">' . '<i style="color:#777;">' . "Folder jest pusty" . '</i>' . '</td></tr>';
  308. } else {
  309. foreach ($v_files as $v_file) {
  310. $v_file_name = end(explode('/', $v_file));
  311. $v_file_www = $path_www . '/' . $v_file_name;
  312. echo '<tr>';
  313. echo '<td style="border-right:1px solid #777;">' . $v_file_name . '</td>';
  314. echo '<td style="border-right:1px solid #777;text-align:right">' . filesize($v_file) . " B" . '</td>';
  315. echo '<td>' . (is_dir($v_file)? "Folder" : "Plik") . " " . '<a href="' . $v_file_www . '" target="_blank">' . "(Web)" . '</a>' . '</td>';
  316. echo '</tr>';
  317. }
  318. }
  319. echo '</table>';
  320. }
  321. }
  322. /**
  323. * TODO: obecnie działa tylko werjs tryUploadAjax
  324. */
  325. function tryUpload() {
  326. return false;
  327. if ($_FILES['M_DIST_FILES_NAME']['error'] > 0) {
  328. echo '<p style="color:red">Error: Wystąpił błąd podczas wgrywania pliku: ' . $_FILES['M_DIST_FILES_NAME']['error'] . '</p>';
  329. return;
  330. }
  331. echo '<div style="border:1px solid #777">';
  332. echo 'Informacje o wgrywanym pliku:<br />';
  333. echo 'Nazwa: ' . $_FILES['M_DIST_FILES_NAME']['name'] . '<br>';
  334. echo 'Typ: ' . $_FILES['M_DIST_FILES_NAME']['type'] . '<br>';
  335. echo 'Rozmiar: ' . $_FILES['M_DIST_FILES_NAME']['size'] . ' B<br>';
  336. if ($_SESSION['DEBUG']) echo 'Stored in: ' . $_FILES['M_DIST_FILES_NAME']['tmp_name'];
  337. echo '</div>';
  338. //if (false === strpos($_SESSION[$this->_column]['PERMEDIT']['M_DIST_FILES'], "W")) {
  339. // echo '<p>' . "Error: Brak uprawnień do zapisu (W) dla pola M_DIST_FILES." . '</p>';
  340. // return;
  341. //}
  342. if (!is_uploaded_file($_FILES['M_DIST_FILES_NAME']['tmp_name'])) {
  343. echo '<p>' . "Error: Wystąpił błąd podczas wgrywania pliku." . '</p>';
  344. return;
  345. }
  346. $IN7_FILERENAME = $this->renameFile($_POST, $_FILES['M_DIST_FILES_NAME']['name'], $this->getDestLocalPath(true));
  347. if ($IN7_FILERENAME == false) {
  348. return false;
  349. }
  350. if (!empty($IN7_FILERENAME['ERROR'])) {
  351. echo "<br> <font color=red> Wystapil error (".$IN7_FILERENAME['ERROR'].")<br>EOL.";
  352. }
  353. else if (!empty($IN7_FILERENAME['DST_FILE_NAME']) && !empty($IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER'])) {
  354. if (!move_uploaded_file($_FILES['M_DIST_FILES_NAME']['tmp_name'], $IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER'] . "/" . $IN7_FILERENAME['DST_FILE_NAME'])) {
  355. echo '<hr /><h1 style="color:red">' . "Error: plik nie został przeniesiony do odpowiedniego katalogu, " . '<a href="JavaScript:window.close()">zamknij to okno i wroc do wczesniejszego</a></h1>';
  356. }
  357. else {
  358. echo "<br>wykonalem funkcje move dla parametrow ".$_FILES['M_DIST_FILES_NAME']['tmp_name']." oraz ".$IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER']."/".$IN7_FILERENAME['DST_FILE_NAME'] ." <br>Informacje dodatkowe :".$IN7_FILERENAME['INFO']." <br> EOL <br> ";
  359. if (file_exists($IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER']."/".$IN7_FILERENAME['DST_FILE_NAME'])) {
  360. echo '<hr /><h1 style="color:green">' . "Plik został poprawnie wgrany do odpowiedniego katalogu, " . '<a href="JavaScript:window.close()">zamknij to okno i wroc do wczesniejszego</a></h1>';
  361. IN7_POST_HISTORY($TABLE, array('M_DIST_FILES'), array(" Wgrano plik z przegladarki WWW ".$_SERVER['REMOTE_ADDR']." ".$_FILES['M_DIST_FILES_NAME']['name']." do ".$IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER']."/".$IN7_FILERENAME['DST_FILE_NAME']." "), $thiss, $SESSION);
  362. }
  363. else {
  364. echo '<hr /><h1 style="color:red">' . "PLIK NIE ZOSTAL WGRANY BLAD/ERROR, " . '<a href="JavaScript:window.close()">zamknij to okno i wroc do wczesniejszego</a></h1>';
  365. }
  366. }
  367. }
  368. }
  369. function tryUploadAjax(&$errorMsg) {
  370. if ($_FILES['M_DIST_FILES_NAME']['error'] > 0) {
  371. $errorMsg = 'Wystąpił błąd podczas wgrywania pliku: ' . $_FILES['M_DIST_FILES_NAME']['error'] . '';
  372. return false;
  373. }
  374. /*
  375. echo '<div style="border:1px solid #777">';
  376. echo 'Informacje o wgrywanym pliku:<br />';
  377. echo 'Nazwa: ' . $_FILES['M_DIST_FILES_NAME']['name'] . '<br>';
  378. echo 'Typ: ' . $_FILES['M_DIST_FILES_NAME']['type'] . '<br>';
  379. echo 'Rozmiar: ' . $_FILES['M_DIST_FILES_NAME']['size'] . ' B<br>';
  380. if ($_SESSION['DEBUG']) echo 'Stored in: ' . $_FILES['M_DIST_FILES_NAME']['tmp_name'];
  381. echo '</div>';
  382. */
  383. //if (false === strpos($_SESSION[$this->_column]['PERMEDIT']['M_DIST_FILES'], "W")) {
  384. // echo '<p>' . "Error: Brak uprawnień do zapisu (W) dla pola M_DIST_FILES." . '</p>';
  385. // return;
  386. //}
  387. if (!is_uploaded_file($_FILES['M_DIST_FILES_NAME']['tmp_name'])) {
  388. $errorMsg = ' Wystąpił błąd podczas wgrywania pliku';
  389. return;
  390. }
  391. $renameErrorMsg = '';
  392. $IN7_FILERENAME = $this->renameFile($_POST, $_FILES['M_DIST_FILES_NAME']['name'], $this->getDestLocalPath(true), $renameErrorMsg);
  393. if ($IN7_FILERENAME == false) {
  394. $errorMsg = "Wystąpił błąd podczas zmiany nazwy wgrywanego pliku: {$renameErrorMsg}.";
  395. return false;
  396. }
  397. if (!empty($IN7_FILERENAME['ERROR'])) {
  398. $errorMsg = "Wystąpiły błądy podczas zmiany nazwy wgrywanego pliku: '{$IN7_FILERENAME['ERROR']}'";
  399. }
  400. else if (!empty($IN7_FILERENAME['DST_FILE_NAME']) && !empty($IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER'])) {
  401. $newFilePath = "{$IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER']}/{$IN7_FILERENAME['DST_FILE_NAME']}";
  402. if (!move_uploaded_file($_FILES['M_DIST_FILES_NAME']['tmp_name'], $newFilePath)) {
  403. $errorMsg = "plik nie został przeniesiony do odpowiedniego katalogu";
  404. }
  405. else {
  406. if (file_exists($newFilePath)) {
  407. $this->setLastUploadedFile($newFilePath);
  408. return true;
  409. }
  410. else {
  411. $errorMsg = "PLIK NIE ZOSTAL WGRANY BLAD/ERROR";
  412. }
  413. }
  414. }
  415. return false;
  416. }
  417. function tryMoveFromScanAjax(&$errorMsg) {
  418. $destFolderPath = $this->getDestLocalPath(true);
  419. $skanFileName = V::get('SCANS_COLUMN_ADD', '', $_POST);
  420. if (empty($skanFileName)) {
  421. $errorMsg = 'Nie wybrano pliku ze skanów';
  422. return false;
  423. }
  424. Lib::loadClass('FoldersConfig');
  425. $skanyConf = FoldersConfig::getAll('SCANS_COLUMN');
  426. $skanyLocalPath = V::get('mount_point', '', $skanyConf);
  427. $skanyFiles = $this->getFilesFromSkany($skanyConf, true);
  428. if (!in_array($skanFileName, $skanyFiles)) {
  429. $errorMsg = 'Wybrany plik nie istnieje w skanach';
  430. return false;
  431. }
  432. $renameErrorMsg = '';
  433. $IN7_FILERENAME = $this->renameFile($_POST, $skanFileName, $destFolderPath, $renameErrorMsg);
  434. if ($IN7_FILERENAME == false) {
  435. $errorMsg = "Wystąpił błąd podczas zmiany nazwy wgrywanego pliku: {$renameErrorMsg}.";
  436. return false;
  437. }
  438. if (!empty($IN7_FILERENAME['ERROR'])) {
  439. $errorMsg = "Wystąpiły błądy podczas zmiany nazwy wgrywanego pliku: '{$IN7_FILERENAME['ERROR']}'";
  440. }
  441. else if (!empty($IN7_FILERENAME['DST_FILE_NAME']) && !empty($IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER'])) {
  442. $newFilePath = "{$IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER']}/{$IN7_FILERENAME['DST_FILE_NAME']}";
  443. if (!copy("{$skanyLocalPath}/{$skanFileName}", "{$newFilePath}")) {
  444. $errorMsg = "Plik nie został przeniesiony do odpowiedniego katalogu";
  445. }
  446. else {
  447. unlink("{$skanyLocalPath}/{$skanFileName}");
  448. if (file_exists("{$newFilePath}")) {
  449. $this->setLastUploadedFile($newFilePath);
  450. return true;
  451. }
  452. else {
  453. $errorMsg = "Plik nie został przenisiony ze skanów";
  454. }
  455. }
  456. }
  457. return false;
  458. }
  459. /**
  460. * TODO: obecnie działa tylko wersja tryMoveFromScanAjax
  461. */
  462. function tryMoveFromScan() {
  463. return false;
  464. $dest_folder = $this->getDestLocalPath(true);
  465. foreach ($_POST as $POST_I => $POST_V) {
  466. if (false === strpos($POST_I, 'SCANS_COLUMN_ADD__')) continue;
  467. echo "<br> Proba przeniesienia pliku ze SCANS_COLUMN \n";
  468. $SCAN_PLIK = end(explode('__',$POST_I));
  469. echo "DLa ID {$SCAN_PLIK} ";
  470. echo $_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FOLDER'];
  471. $IN7_FILERENAME = $this->renameFile($_POST, $_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FILE'], $dest_folder);
  472. if (($IN7_FILERENAME['DST_FILE_NAME'])&&($IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER'])&&(!$IN7_FILERENAME['ERROR'])) {
  473. if(file_exists($_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FOLDER']."/".$_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FILE'])) {
  474. if(copy($_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FOLDER']."/".$_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK][FILE],$IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER']."/".$IN7_FILERENAME['DST_FILE_NAME'])) {
  475. chmod("$IN7_FILERENAME[M_DIST_FILES_DEST_FOLDER]."/".$IN7_FILERENAME[DST_FILE_NAME]", 0777);
  476. unlink($_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FOLDER']."/".$_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FILE']);
  477. } else $IN7_FILERENAME['ERROR'].="COPY_ERROR Problem z kopiowaniem pliku w docelowe miejsce , ";
  478. } else $IN7_FILERENAME['ERROR'].="COPY_ERROR Problem z kopiowaniem brak pliku zrodlowego , ";
  479. echo "<br>wykonalem funkcje move dla parametrow ".$_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FOLDER']."/".$_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FILE']." oraz ".$IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER']."/".$IN7_FILERENAME['DST_FILE_NAME'] ." <br>
  480. Informacje dodatkowe :".$IN7_FILERENAME['INFO']." <br> EOL <br> <hr><h1>PRAWDOPODOBNIE WGRALES PLIK, zamknij to okno i wroc do wczesniejszego</h1>";
  481. } else if($IN7_FILERENAME['ERROR']) {
  482. echo "<br> <font color=red> Wystapil error (".$IN7_FILERENAME['ERROR'].")<br>EOL.";
  483. }
  484. if ($IN7_FILERENAME['ERROR']) {
  485. echo "<br> <font color=red> Wystapil error (".$IN7_FILERENAME['ERROR'].")<br>EOL.";
  486. }
  487. else {
  488. SEF('IN7_POST_HISTORY');
  489. IN7_POST_HISTORY($TABLE,array('M_DIST_FILES'),array("Przeniesiono plik z folderu ".$_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FOLDER']."/".$_SESSION["SCANS_COLUMN"]["ADD_FILE"][$SCAN_PLIK]['FILE']." do ".$IN7_FILERENAME['M_DIST_FILES_DEST_FOLDER']."/".$IN7_FILERENAME['DST_FILE_NAME']." "),$thiss,$SESSION);
  490. }
  491. }
  492. }
  493. function _isDate($str) {
  494. $str_arr = explode("-", $str);
  495. if (count($str_arr) == 3 &&
  496. strlen($str_arr[2]) == 2 &&
  497. strlen($str_arr[1]) == 2 &&
  498. strlen($str_arr[0]) == 4 &&
  499. $str_arr[0] > 1980 &&
  500. $str_arr[0] < 9999 &&
  501. $str_arr[1] <= 12 &&
  502. $str_arr[2] <= 33
  503. ) {
  504. return true;
  505. }
  506. return false;
  507. }
  508. /**
  509. * Rename file by params.
  510. *
  511. * @param array $params
  512. * @param string $FILENAME_POST
  513. * @param string $dest_folder
  514. *
  515. * @returns array (
  516. * 'M_DIST_FILES_DEST_FOLDER',
  517. * 'DST_FILE_NAME',
  518. * 'ERROR',
  519. * 'INFO'
  520. * )
  521. */
  522. function renameFile($params, $FILENAME_POST, $dest_folder, &$errorMsg = '') {
  523. $genLog = array();// return array
  524. $genLog_INDEX = array();
  525. $postFileNameByDot = explode('.', $FILENAME_POST);
  526. $postFileNameBy_ = explode('_', $FILENAME_POST);
  527. if (empty($params['M_DIST_FILES_TYPE'])) {
  528. $errorMsg = "nie wybrano typu pliku";
  529. return false;
  530. }
  531. $genLog['INDEXNAME'] = $this->_record->ID;
  532. $genLog['EXT'] = end($postFileNameByDot);
  533. $genLog['TYPE'] = $params['M_DIST_FILES_TYPE'];
  534. if (!empty($params['M_DIST_FILES_TEMP'])) {
  535. $genLog['TYPE'] .= "_TEMP";
  536. }
  537. // set $genLog['DATE'], $genLog_INDEX['DATE']
  538. // use $params M_DIST_FILES_DATE
  539. $postFileNameBy_Cnt = count($postFileNameBy_);
  540. if ($postFileNameBy_Cnt >= 2 && $postFileNameBy_Cnt <= 7) {
  541. foreach ($postFileNameBy_ as $ind => $file_part) {
  542. if ($this->_isDate($file_part)) {
  543. if (empty($params['M_DIST_FILES_DATE'])) {
  544. $genLog['DATE'] = $file_part;
  545. }
  546. $genLog_INDEX['DATE'] []= array('PREFIX'=>"_", 'INDEKS'=>"$ind", 'VALUE'=>$file_part);
  547. }
  548. }
  549. }
  550. // set $genLog['DATE'], $genLog_INDEX['DATE']
  551. // use $params M_DIST_FILES_DATE
  552. $FILE_P_COUNT = count($postFileNameByDot);
  553. if ($FILE_P_COUNT >= 2 && $FILE_P_COUNT <= 7) {
  554. foreach ($postFileNameByDot as $ind => $file_part) {
  555. if ($this->_isDate($file_part)) {
  556. if (empty($params['M_DIST_FILES_DATE'])) {
  557. if (!$genLog_INDEX['DATE'][1]) {
  558. $genLog['DATE'] = $file_part;
  559. }
  560. }
  561. $genLog_INDEX['DATE'] []= array('PREFIX'=>".", 'INDEKS'=>"$ind", 'VALUE'=>$file_part);
  562. }
  563. }
  564. }
  565. // set $genLog['VERSION']
  566. // TODO: szuka wersji w miejscu drugiej daty?
  567. if (!empty($params['M_DIST_FILES_VERSION'])) {
  568. $genLog['VERSION'] = $params['M_DIST_FILES_VERSION'];
  569. }
  570. else if (!empty($params['M_DIST_FILES_VERSION_AUTO'])) {
  571. if (isset($genLog_INDEX['DATE'][1])) {// sa 2 poprawne daty w pliku
  572. $SPLITER = $genLog_INDEX['DATE'][1]['PREFIX'];
  573. $GIS = explode($SPLITER, $FILENAME_POST);
  574. echo $genLog_INDEX['DATE'][1]['INDEKS'];
  575. $pattern = '/[[:alpha:]]/';
  576. $subject = $GIS[$genLog_INDEX['DATE'][1]['INDEKS']];
  577. $PO = preg_match($pattern, $subject, $PO2, PREG_OFFSET_CAPTURE);
  578. if ($PO == 0 && $GIS[$genLog_INDEX['DATE'][1]['INDEKS']] >= 0 && $GIS[$genLog_INDEX['DATE'][1]['INDEKS']] <= 999) {
  579. $genLog['VERSION'] = $GIS[$genLog_INDEX['DATE'][1]['INDEKS']];
  580. }
  581. }
  582. }
  583. // set $genLog['DESCRIPTION']
  584. $genLog['DESCRIPTION'] = '';
  585. if (!empty($params['M_DIST_FILES_DESCRIPTION'])) {
  586. $genLog['DESCRIPTION'] = $params['M_DIST_FILES_DESCRIPTION'];
  587. }
  588. else {// !empty($params['M_DIST_FILES_DESCRIPTION_AUTO'])
  589. //echo "M_DIST_FILES_DESCRIPTION_AUTO <br> dla parametru $FILENAME_POST (FILENAME_POST) <br>\n";
  590. $genLog['DESCRIPTION'] = $params['M_DIST_FILES_DESCRIPTION'] . "_" . $FILENAME_POST;
  591. if (isset($genLog_INDEX['DATE'][0])) {
  592. $SPL = explode('_', $genLog['DESCRIPTION']);
  593. $genLog['DESCRIPTION'] = '';// clear $genLog['DESCRIPTION']
  594. foreach ($SPL as $SPLL) {
  595. //echo "<br> if $SPLL == ".$genLog_INDEX['DATE'][0]['VALUE']." EOL";
  596. if (false === strpos($SPLL, $genLog_INDEX['DATE'][0]['VALUE'])) {
  597. $genLog['DESCRIPTION'] .= "_" . $SPLL;
  598. //echo "<br> Added Line 177a | $SPLL |";
  599. }
  600. }
  601. //echo "<br> GUESS[DESCRIPTION] line 177: ".$genLog['DESCRIPTION']." should be added ".$params['M_DIST_FILES_DESCRIPTION']." EOL.";
  602. if (isset($genLog_INDEX['DATE'][1])) {
  603. $SPL = explode('.', $genLog['DESCRIPTION']);
  604. $genLog['DESCRIPTION'] = '';// clear $genLog['DESCRIPTION']
  605. foreach ($SPL as $SPLL) {
  606. if (false === strpos($SPLL, $genLog_INDEX['DATE'][1]['VALUE'])) {
  607. $genLog['DESCRIPTION'] .= "." . $SPLL;
  608. }
  609. }
  610. }
  611. //echo "<br> DESCRIPT TO $genLog[DESCRIPTION] - line 203";
  612. }
  613. $genLog['DESCRIPTION'] = str_replace('.' . $genLog['EXT'], '', $genLog['DESCRIPTION']);
  614. $SPL = explode('.', $genLog['DESCRIPTION']);
  615. $genLog['DESCRIPTION'] = '';// clear $genLog['DESCRIPTION'] po raz kolejny
  616. $I = 0;
  617. foreach ($SPL as $SPLL) {
  618. if (!strstr($genLog['VERSION'], $SPLL)) {
  619. $genLog['DESCRIPTION'] .= $SPLL;
  620. //if ($_SESSION['DEBUG']) echo "<br>Sciagam z desc wersje $SPLL == ".$genLog['VERSION']." |";
  621. }
  622. //if ($_SESSION['DEBUG']) echo "<br>line 203: teraz GUESS[DESCRIPTION]= ".$genLog['DESCRIPTION']." | a w oryginale z parametru: ".$FILENAME_POST." |";
  623. }
  624. }
  625. if (!empty($params['M_DIST_FILES_DATE'])) {
  626. $genLog['DATE'] = $params['M_DIST_FILES_DATE'];
  627. }
  628. if (empty($genLog['DATE'])) {
  629. //$errorMsg = "Error: Pusta data {$genLog['DATE']} - ustawiam na dzisiaj";
  630. $genLog['DATE'] = date('Y-m-d');
  631. }
  632. else {
  633. if ($this->_isDate($genLog['DATE'])) {
  634. $genLog['INFO'] .= "3.1.1 WALIDACJA DATY OK , ";
  635. }
  636. else {
  637. $genLog['ERROR'] .= "ERROR_BAD_M_DIST_FILES_DATE (zly format daty {$genLog['DATE']}) , ";
  638. $errorMsg = "zły format daty {$genLog['DATE']}";
  639. return false;
  640. }
  641. }
  642. if (!$genLog['VERSION'] && $params['M_DIST_FILES_VERSION']) {
  643. $genLog['VERSION'] = $params['M_DIST_FILES_VERSION'];
  644. }
  645. else if (!$genLog['VERSION'] && !$params['M_DIST_FILES_VERSION']) {
  646. $genLog['VERSION'] = "1";
  647. }
  648. $genLog['VERSION'] = str_replace(' ', '_', $genLog['VERSION']);
  649. $genLog['DESCRIPTION'] = str_replace(' ', '_', $genLog['DESCRIPTION']);
  650. if($_SESSION['DEBUG']) print_r($genLog);
  651. // try to create folder if not exists
  652. if (!file_exists($dest_folder)) {
  653. mkdir($dest_folder, 0777, true);
  654. @chmod($dest_folder, 0777);
  655. $genLog['INFO'] .= "TWORZE_NOWY_FOLDER , ";
  656. if (!file_exists($dest_folder)) {
  657. //$genLog['ERROR'] .= "ERROR_DEST_FOLDER_NOT_EXISTS";
  658. $errorMsg = "folder nie istnieje - nie udało się go utworzyć";
  659. return false;
  660. }
  661. }
  662. $dest_folder_name = end(explode('/', $dest_folder));
  663. $genLog['M_DIST_FILES_DEST_FOLDER'] = $dest_folder;
  664. $genLog['DST_FILE_NAME'] = $this->generateFileName( array($genLog['INDEXNAME'], $genLog['TYPE'], $genLog['DESCRIPTION'], $genLog['DATE'], $genLog['VERSION'], $genLog['EXT']) );
  665. $v_files = $this->getFilesFromFolder($dest_folder_name, true);
  666. if (!empty($v_files)) {
  667. $genLog['VERSION'] = $this->getFileNextVersion($v_files, $genLog['TYPE'], $genLog['DATE'], $genLog['VERSION']);
  668. $genLog['DST_FILE_NAME'] = $this->generateFileName( array($genLog['INDEXNAME'], $genLog['TYPE'], $genLog['DESCRIPTION'], $genLog['DATE'], $genLog['VERSION'], $genLog['EXT']) );
  669. }
  670. return $genLog;
  671. }
  672. function generateFileName($dirname_parts) {
  673. foreach ($dirname_parts as $k_ind => $v_part) {
  674. $dirname_parts[$k_ind] = $this->cleanFilenamePart($v_part);
  675. }
  676. return implode('.', $dirname_parts);
  677. }
  678. /**
  679. * Generate next file version if exists with the same type and date.
  680. */
  681. function getFileNextVersion($files, $type, $date, $version) {
  682. $max_version = $version;
  683. if (empty($files)) {
  684. return $max_version;
  685. }
  686. foreach ($files as $v_file) {
  687. $v_file_parts = explode('.', $v_file);
  688. if (count($v_file_parts) == 6) {// nowe nazewnictwo 5 kropek
  689. $v_file_type = $v_file_parts[1];
  690. $v_file_date = $v_file_parts[3];
  691. $v_file_version = $v_file_parts[4];
  692. if ($v_file_type == $type && $v_file_date == $date) {
  693. // TODO: echo "<br>WARNING Plik typu $v_file_type dodany w dniu $v_file_date juz istnieje z numerem wersji = $v_file_version ($v_file)";
  694. if (is_numeric($v_file_version)) {
  695. $v_file_version++;
  696. $max_version = max($max_version, $v_file_version);
  697. }
  698. }
  699. } else {
  700. // pomin plik - bledna nazwa
  701. }
  702. }
  703. return $max_version;
  704. }
  705. function tryRemoveFromAjax($fileName) {
  706. $localPath = $this->getDestLocalPath();
  707. if (!$localPath) {
  708. return false;
  709. }
  710. $pathParts = explode('/', $fileName);
  711. $realFileName = array_pop($pathParts);
  712. if (!empty($pathParts)) {
  713. array_unshift($pathParts, $localPath);
  714. $localPath = implode('/', $pathParts);
  715. }
  716. if (file_exists("{$localPath}/{$realFileName}")) {
  717. //return unlink("{$localPath}/{$realFileName}");
  718. $deletedFileName = ".deleted-" . date("Y-m-d-H-i") . ".{$realFileName}";
  719. rename("{$localPath}/{$realFileName}", "{$localPath}/{$deletedFileName}");
  720. return true;
  721. }
  722. return false;
  723. }
  724. }