|
|
@@ -0,0 +1,383 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+Lib::loadClass('RouteBase');
|
|
|
+
|
|
|
+/**
|
|
|
+ * @requires config file config/.cnf--zasob_638-biuro.biall-net.pl.ini.php:
|
|
|
+;<?php
|
|
|
+;die(); // For further security
|
|
|
+;// ftp for www.biall.net.pl
|
|
|
+
|
|
|
+type="ftp"
|
|
|
+host="www.biall.net.pl"
|
|
|
+user="***"
|
|
|
+pass="***"
|
|
|
+ */
|
|
|
+class Route_BiallNet_SyncProjectFiles extends RouteBase {
|
|
|
+
|
|
|
+ public function handleAuth() {
|
|
|
+ if (!User::logged()) {
|
|
|
+ throw new HttpException('Unauthorized', 401);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public function defaultAction() {
|
|
|
+ SE_Layout::gora();
|
|
|
+ SE_Layout::menu();
|
|
|
+
|
|
|
+ $configError = null;
|
|
|
+ try {
|
|
|
+ $this->_checkFtpConfig();
|
|
|
+ } catch (Exception $e) {
|
|
|
+ $configError = $e->getMessage();
|
|
|
+ }
|
|
|
+?>
|
|
|
+<div class="container">
|
|
|
+ <h1></h1>
|
|
|
+</div>
|
|
|
+<div class="jumbotron">
|
|
|
+ <div class="container">
|
|
|
+ <h3>Synchronizcja plików na stronę www.biall.net.pl z projektów</h3>
|
|
|
+ <?php if (empty($configError)) : ?>
|
|
|
+ <form class="form-inline" method="POST">
|
|
|
+ <input type="hidden" name="_task" value="syncToWwwSite" />
|
|
|
+ <button type="submit" id="submitBtn" class="btn btn-primary" autocomplete="off">
|
|
|
+ Synchronizuj wszystkie projekty
|
|
|
+ </button>
|
|
|
+ </form>
|
|
|
+ <!-- TODO: fast sync only one project? -->
|
|
|
+ <?php else : ?>
|
|
|
+ <div class="alert alert-danger">
|
|
|
+ <?php echo $configError; ?>
|
|
|
+ </div>
|
|
|
+ <?php endif; ?>
|
|
|
+ </div>
|
|
|
+</div>
|
|
|
+<script type="text/javascript">
|
|
|
+jQuery(document).ready(function () {
|
|
|
+ jQuery('#submitBtn').on('click', function () {
|
|
|
+ jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
|
|
|
+ jQuery(this).parent().submit();
|
|
|
+ });
|
|
|
+});
|
|
|
+</script>
|
|
|
+ <?php
|
|
|
+ SE_Layout::dol();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function syncToWwwSiteAction() {
|
|
|
+ SE_Layout::gora();
|
|
|
+ SE_Layout::menu();
|
|
|
+ ?>
|
|
|
+<h1>Synchronizcja plików na stronę www.biall.net.pl z projektów:</h1>
|
|
|
+<pre style="max-height:400px;border:1px solid silver;overflow:auto;"><?php $this->syncToWwwSite(); ?></pre>
|
|
|
+<?php
|
|
|
+ SE_Layout::dol();
|
|
|
+ exit;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function syncToWwwSite() {
|
|
|
+ flush();
|
|
|
+ $sync_projekty_tmp_folder = '/Users/plabudda/sync-projekty-files-to-www';
|
|
|
+
|
|
|
+ $sql_select = array();
|
|
|
+ $sql_where_and = array();
|
|
|
+
|
|
|
+ $sql_select[] = "p.`ID`";
|
|
|
+ $sql_select[] = "p.`M_DIST_TYPE`";
|
|
|
+ $sql_select[] = "p.`M_DIST_DESC`";
|
|
|
+ //$sql_select[] = "p.``";
|
|
|
+
|
|
|
+ $sql_project_types = array();
|
|
|
+ $sql_project_types[] = "'WWW_PRACA'";
|
|
|
+ $sql_project_types[] = "'WWW_DOKUMENTY'";
|
|
|
+ $sql_project_types[] = "'WWW_AKTUALNOSCI'";
|
|
|
+ $sql_project_types[] = "'WWW_AKTUALNOSCI_TV'";
|
|
|
+ $sql_project_types[] = "'TV__UMOWA ZAKUPU KANALU'";
|
|
|
+ $sql_where_and[] = "p.`M_DIST_TYPE` in (".implode(",", $sql_project_types).")";
|
|
|
+
|
|
|
+ $sql_where_and[] = "p.`A_STATUS` in ('NORMAL','WAITING')";
|
|
|
+
|
|
|
+ //$projekt_id = V::get('projekt_id', 0, $_REQUEST, 'int');
|
|
|
+ //if ($projekt_id > 0) {
|
|
|
+ // $sql_where_and[] = "p.`ID`='".$projekt_id."'";
|
|
|
+ //}
|
|
|
+
|
|
|
+ $db = DB::getDB();
|
|
|
+ $sql_select = implode(", ", $sql_select);
|
|
|
+ $sql_where = implode("\n and ", $sql_where_and);
|
|
|
+ $sql = "select $sql_select
|
|
|
+ from `IN7_MK_BAZA_DYSTRYBUCJI` as p
|
|
|
+ where
|
|
|
+ {$sql_where}
|
|
|
+ ";
|
|
|
+ $projekty = array();
|
|
|
+ $res = $db->query($sql);
|
|
|
+ while ($r = $db->fetch($res)) {
|
|
|
+ $projekty[$r->ID] = $r;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($projekty as $idProject => $r) {
|
|
|
+ $files = $this->_findProjectFiles($r->ID);
|
|
|
+ if (in_array($r->M_DIST_TYPE, array('WWW_AKTUALNOSCI', 'WWW_AKTUALNOSCI_TV'))) {
|
|
|
+ $filesToAdd = $this->_findProjectFiles($r->ID, 'ZDJECIE', array('jpg','png','gif'));
|
|
|
+ foreach ($filesToAdd as $f) {
|
|
|
+ $tmp_folder_path = $sync_projekty_tmp_folder.'/'.$r->ID;
|
|
|
+ if (!is_dir($tmp_folder_path)) {
|
|
|
+ mkdir($tmp_folder_path);
|
|
|
+ }
|
|
|
+ Lib::loadClass('DB_Image');
|
|
|
+ $img_ext = explode('.', $f['name']);
|
|
|
+ $img_ext = end($img_ext);
|
|
|
+
|
|
|
+ $imBlob = null;
|
|
|
+ $imType = null;
|
|
|
+ if ('jpg' == $img_ext) $imType = "image/jpeg";
|
|
|
+ else if ('png' == $img_ext) $imType = "image/png";
|
|
|
+ else if ('gif' == $img_ext) $imType = "image/gif";
|
|
|
+ if ($imType) {
|
|
|
+ $imBlob = DB_Image::readImageBlobFromFile($f['path'], $imType);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$imBlob) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $sizes_all = array(array('700', '700'), array('150', '120'));
|
|
|
+ foreach ($sizes_all as $sizes) {
|
|
|
+ $tmp_name = substr($f['name'], 0, -4).'.'.$sizes[0].'x'.$sizes[1].'.'.$img_ext;
|
|
|
+ $tmp_path = $tmp_folder_path.'/'.$tmp_name;
|
|
|
+ $files[] = array('name'=>$tmp_name, 'path'=>$tmp_path);
|
|
|
+ $imResizedBlob = DB_Image::resizeImageFromBlob($imBlob, $imType, $sizes[0], $sizes[1]);
|
|
|
+ DB_Image::writeImageBlobToFile($imResizedBlob, $imType, $tmp_path);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (in_array($r->M_DIST_TYPE, array('TV__UMOWA ZAKUPU KANALU'))) {
|
|
|
+ $filesToAdd = $this->_findProjectFiles($r->ID, 'ZDJECIE', array('jpg','png','gif'));
|
|
|
+ foreach ($filesToAdd as $f) {
|
|
|
+ $tmp_folder_path = $sync_projekty_tmp_folder.'/'.$r->ID;
|
|
|
+ if (!is_dir($tmp_folder_path)) {
|
|
|
+ mkdir($tmp_folder_path);
|
|
|
+ }
|
|
|
+ Lib::loadClass('DB_Image');
|
|
|
+ $img_ext = explode('.', $f['name']);
|
|
|
+ $img_ext = end($img_ext);
|
|
|
+
|
|
|
+ $imBlob = null;
|
|
|
+ $imType = null;
|
|
|
+ if ('jpg' == $img_ext) $imType = "image/jpeg";
|
|
|
+ else if ('png' == $img_ext) $imType = "image/png";
|
|
|
+ else if ('gif' == $img_ext) $imType = "image/gif";
|
|
|
+ if ($imType) {
|
|
|
+ $imBlob = DB_Image::readImageBlobFromFile($f['path'], $imType);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$imBlob) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $sizes_all = array(array('90', '78'));
|
|
|
+ foreach ($sizes_all as $sizes) {
|
|
|
+ $tmp_name = substr($f['name'], 0, -4).'.'.$sizes[0].'x'.$sizes[1].'.'.$img_ext;
|
|
|
+ $tmp_path = $tmp_folder_path.'/'.$tmp_name;
|
|
|
+ $files[] = array('name'=>$tmp_name, 'path'=>$tmp_path);
|
|
|
+ $imResizedBlob = DB_Image::resizeImageFromBlob($imBlob, $imType, $sizes[0], $sizes[1]);
|
|
|
+ DB_Image::writeImageBlobToFile($imResizedBlob, $imType, $tmp_path);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ echo "[{$idProject}]:\n";
|
|
|
+ $this->_sendProjectFiles($idProject, $files);
|
|
|
+ echo "\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function _findProjectFiles($project_id, $type = '', $suffix = 'pdf') {
|
|
|
+ global $FOLDERS;
|
|
|
+
|
|
|
+ $ret = array();
|
|
|
+ //global $FOLDERS;
|
|
|
+ // @see .config:$FOLDERS[IN7_MK_BAZA_DYSTRYBUCJI_COLUMN]="/home/samba/PROJEKTY";
|
|
|
+ $dir_projekty = $FOLDERS['IN7_MK_BAZA_DYSTRYBUCJI_COLUMN'];
|
|
|
+ //$www_projekty = "PROJEKTY/";
|
|
|
+
|
|
|
+ $pattern = $dir_projekty.'/'.$project_id.'.*';
|
|
|
+ $path_projekt = glob( $pattern , GLOB_ONLYDIR);// array glob(pattern [, flags])
|
|
|
+ if (empty($path_projekt)) {
|
|
|
+ return $ret;
|
|
|
+ }
|
|
|
+ $path_projekt = reset($path_projekt);
|
|
|
+ $dir_projekt = explode('/', $path_projekt);
|
|
|
+ $dir_projekt = end($dir_projekt);
|
|
|
+
|
|
|
+ if (is_array($suffix)) {
|
|
|
+ $files_projekt_add = array();
|
|
|
+ foreach ($suffix as $add_suffix) {
|
|
|
+ $files_oferty_pattern = $path_projekt.'/*.'.$add_suffix;
|
|
|
+ if ($type) $files_oferty_pattern = $path_projekt.'/*.'.$type.'.*.'.$add_suffix;
|
|
|
+ $files_projekt_add = glob( $files_oferty_pattern);// array glob(pattern [, flags])
|
|
|
+ foreach ($files_projekt_add as $f) {
|
|
|
+ $files_projekt[] = $f;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $files_oferty_pattern = $path_projekt.'/*.'.$suffix;
|
|
|
+ if ($type) $files_oferty_pattern = $path_projekt.'/*.'.$type.'.*.'.$suffix;
|
|
|
+ $files_projekt = glob( $files_oferty_pattern);// array glob(pattern [, flags])
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($files_projekt)) {
|
|
|
+ return $ret;
|
|
|
+ }
|
|
|
+ foreach ($files_projekt as $v) {
|
|
|
+ $f_name = explode('/', $v);
|
|
|
+ $f_name = end($f_name);
|
|
|
+ // TODO: f_www link do akryptu zmieniajacego nazwe pliku na nazwe projektu
|
|
|
+ //$f_www = 'http://'.$host.'/'.$www_projekty.'/'.$dir_projekt.'/'.$f_name;
|
|
|
+ //$f_www = 'http://'.$host.'/index.php?action=project_file&project='.$project_id.'&f='.$f_name;
|
|
|
+ $f_www = '';
|
|
|
+ $ret[] = array('name'=>$f_name, 'path'=>$v, 'www'=>$f_www);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function _sendProjectFiles($idProject, $files) {
|
|
|
+ if (function_exists('ftp_connect')) {
|
|
|
+ $ftp_conn = $this->_ftpAuth();
|
|
|
+
|
|
|
+ $filesOnSite = ftp_nlist($ftp_conn, "public_html/PROJEKTY/{$idProject}/");
|
|
|
+ echo "[{$idProject}]\tPliki na www public_html/PROJEKTY/{$idProject}/: ";
|
|
|
+ if (empty($filesOnSite)) {
|
|
|
+ echo "brak\n";
|
|
|
+ } else {
|
|
|
+ echo implode("\n\t\t - ", $filesOnSite) . "\n";
|
|
|
+ }
|
|
|
+ $filesToRemove = array();
|
|
|
+ if (!empty($filesOnSite)) {
|
|
|
+ foreach ($filesOnSite as $remotePath) {
|
|
|
+ $remoteName = explode('/', $remotePath);
|
|
|
+ $remoteName = end($remoteName);
|
|
|
+ $toRemove = true;
|
|
|
+ foreach ($files as $f) {
|
|
|
+ if ($f['name'] == $remoteName) {
|
|
|
+ $toRemove = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($toRemove) {
|
|
|
+ $filesToRemove[] = $remotePath;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ echo "[{$idProject}]\tPliki do usunięcia: ";
|
|
|
+ if (empty($filesToRemove)) {
|
|
|
+ echo "brak\n";
|
|
|
+ } else {
|
|
|
+ echo implode("\n\t\t - ", $filesToRemove) . "\n";
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($filesToRemove as $remotePath) {
|
|
|
+ $remoteName = explode('/', $remotePath);
|
|
|
+ $remoteName = end($remoteName);
|
|
|
+ echo "[{$idProject}]\t\t";
|
|
|
+ if (ftp_delete($ftp_conn, $remotePath)) {
|
|
|
+ echo "Usunięto plik {$remoteName}\n";
|
|
|
+ } else {
|
|
|
+ echo "Error: Could not delete {$remoteName}\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!empty($files)) {
|
|
|
+ $remoteDir = "public_html/PROJEKTY/{$idProject}/";
|
|
|
+ if (@ftp_mkdir($ftp_conn, $remoteDir)) {
|
|
|
+ echo "[{$idProject}]\t\tUtworzono katalog: '{$remoteDir}'\n";
|
|
|
+ } else {
|
|
|
+ //echo "There was a problem while creating $dir\n";
|
|
|
+ }
|
|
|
+ foreach ($files as $f) {
|
|
|
+ $remotePath = "public_html/PROJEKTY/{$idProject}/{$f['name']}";
|
|
|
+ echo "[{$idProject}]\t\t";
|
|
|
+ if (ftp_put($ftp_conn, $remotePath, $f['path'], FTP_BINARY)) {
|
|
|
+ echo "Wgrano plik {$f['name']}\n";
|
|
|
+ } else {
|
|
|
+ echo "Error: There was a problem while uploading {$f['name']}\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ftp_close($ftp_conn);
|
|
|
+ } else {
|
|
|
+ foreach ($files as $f) {
|
|
|
+ // string exec ( string $command [, array &$output [, int &$return_var ]] )
|
|
|
+ //$sync_project_file_command = 'sync-projekty-files-to-www.sh';
|
|
|
+ /*
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+if [ -z "$1" ]; then
|
|
|
+ echo usage: $0 project_id file
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+if [ -z "$2" ]; then
|
|
|
+ echo usage: $0 project_id file
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+#dest_path="public_html/PROJEKTY/$1/"
|
|
|
+dest_path="public_html/PROJEKTY/$1/"`basename $2`
|
|
|
+
|
|
|
+USER="biallnet"
|
|
|
+PASSWD="***"
|
|
|
+ftp -v -n www.biall.net.pl <<SCRIPT
|
|
|
+user $USER $PASSWD
|
|
|
+binary
|
|
|
+put $2 $dest_path
|
|
|
+quit
|
|
|
+SCRIPT
|
|
|
+
|
|
|
+exit 0;
|
|
|
+ */
|
|
|
+ $cmd = $sync_project_file_command." ".$r->ID." ".$f['path'];
|
|
|
+ $output = array();
|
|
|
+ $ret_val = 0;
|
|
|
+ exec($cmd, $output, $ret_val);
|
|
|
+ $completed = false;
|
|
|
+ if ($ret_val == 0) {
|
|
|
+ foreach ($output as $out_line) {
|
|
|
+ if (strpos($out_line, 'Transfer complete') !== false) {
|
|
|
+ $completed = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ echo "\n cmd:{$cmd} ret({$ret_val}) ";print_r($output);exit;
|
|
|
+ if ($completed) {
|
|
|
+ echo "Plik skopiowano.\n";
|
|
|
+ } else {
|
|
|
+ echo "Error: prawdopodobnie nie udalo sie skopiowac pliku.\n";
|
|
|
+ foreach ($output as $out_line) {
|
|
|
+ echo $out_line."\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function _ftpAuth() {
|
|
|
+ $cnf = $this->_checkFtpConfig();
|
|
|
+ $connFTP = ftp_connect($cnf['host']) or die("Couldn't connect to ftp_server");
|
|
|
+ if (!ftp_login($connFTP, $cnf['user'], $cnf['pass'])) {
|
|
|
+ die("Couldn't login to ftp_server");
|
|
|
+ }
|
|
|
+ return $connFTP;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function _checkFtpConfig() {
|
|
|
+ $cnf = Config::getZasobConf(638);// SERVER www.biall.net.pl
|
|
|
+ if (empty($cnf)) throw new Exception("Error: Empty config for ftp www.biall.net.pl");
|
|
|
+ if (empty($cnf['host'])) throw new Exception("Error: Config host is empty");
|
|
|
+ if (empty($cnf['user'])) throw new Exception("Error: Config user is empty");
|
|
|
+ if (empty($cnf['pass'])) throw new Exception("Error: Config pass is empty");
|
|
|
+ return $cnf;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|