| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- <?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;
- }
- }
|