| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682 |
- <?php
- Lib::loadClass('RouteBase');
- Lib::loadClass('UI');
- /**
- * @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 $sync_projekty_tmp_folder = '/Users/plabudda/sync-projekty-files-to-www';
- public $toyaTvUrl = 'https://toya.net.pl/telewizja';
- public function handleAuth() {
- if (!User::logged()) {
- throw new HttpException('Unauthorized', 401);
- }
- }
- public function updateProjectDescFromToya($idProject) {
- if (!$idProject) return;
- $project = DB::getPDO()->fetchFirst("
- select p.ID
- , p.P_ID
- , p.M_DIST_TYPE
- , p.M_DIST_DESC
- , p.M_DIST_DESC_HTML
- , p.TV_KARTA_DEVICE_SERIAL
- from IN7_MK_BAZA_DYSTRYBUCJI p
- where p.M_DIST_TYPE in ('TV__UMOWA ZAKUPU KANALU')
- and p.A_STATUS in ('NORMAL','WAITING')
- and p.ID = {$idProject}
- ");
- // DBG::nicePrint($project, '$project');
- if (!$project) throw new Exception("Brak projektu '{$idProject}'");
- if (empty($project['TV_KARTA_DEVICE_SERIAL'])) throw new Exception("Brak sid dla projektu '{$idProject}' (TV_KARTA_DEVICE_SERIAL)");
- $sid = $project['TV_KARTA_DEVICE_SERIAL'];
- $imgsToya = $this->fetchImagesFromToya();
- // DBG::nicePrint($imgsToya[$sid], '$imgsToya['.$sid.']');
- if (empty($imgsToya[$sid])) throw new Exception("Brak na stronie toya programu o takim sid '{$sid}'");
- if (!empty($imgsToya[$sid]['desc'])) {
- $affected = DBG::getPDO()->update('IN7_MK_BAZA_DYSTRYBUCJI', 'ID', $idProject, [
- 'A_RECORD_UPDATE_DATE' => 'NOW()',
- 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
- 'M_DIST_DESC_HTML' => $imgsToya[$sid]['desc'],
- ]);
- if ($affected) DB::getPDO()->insert('IN7_MK_BAZA_DYSTRYBUCJI_HIST', [
- 'A_RECORD_CREATE_DATE' => 'NOW()',
- 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
- 'A_RECORD_UPDATE_DATE' => 'NOW()',
- 'A_RECORD_UPDATE_AUTHOR' => User::getLogin(),
- 'M_DIST_DESC_HTML' => $imgsToya[$sid]['desc'],
- ]);
- }
- }
- public function updateProjectLogoFromToya($idProject) {
- if (!$idProject) return;
- $project = DB::getPDO()->fetchFirst("
- select p.ID
- , p.P_ID
- , p.M_DIST_TYPE
- , p.M_DIST_DESC
- , p.M_DIST_DESC_HTML
- , p.TV_KARTA_DEVICE_SERIAL
- from IN7_MK_BAZA_DYSTRYBUCJI p
- where p.M_DIST_TYPE in ('TV__UMOWA ZAKUPU KANALU')
- and p.A_STATUS in ('NORMAL','WAITING')
- and p.ID = {$idProject}
- ");
- // DBG::nicePrint($project, '$project');
- if (!$project) throw new Exception("Brak projektu '{$idProject}'");
- if (empty($project['TV_KARTA_DEVICE_SERIAL'])) throw new Exception("Brak sid dla projektu '{$idProject}' (TV_KARTA_DEVICE_SERIAL)");
- $sid = $project['TV_KARTA_DEVICE_SERIAL'];
- $imgsToya = $this->fetchImagesFromToya();
- // DBG::nicePrint($imgsToya[$sid], '$imgsToya['.$sid.']');
- if (!empty($imgsToya[$sid])) {
- UI::alert('info', "Pobieram logo '{$imgsToya[$sid]['url']}' ...");
- $curl_handle = curl_init();
- curl_setopt($curl_handle, CURLOPT_URL, $imgsToya[$sid]['url']);
- curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
- curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
- // curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name');
- $logo = curl_exec($curl_handle);
- curl_close($curl_handle);
- $projectDir = $this->_findProjectDir($idProject);
- if (!$projectDir) throw new Exception("Brak katalogu projektu!");
- UI::alert('info', "Wgrywam logo '{$imgsToya[$sid]['url']}' do katalogu '{$projectDir}' ...");
- $today = date('Y-m-d');
- $title = preg_replace('/\W/', '_', $imgsToya[$sid]['title']);
- $logoImg = "{$projectDir}/{$idProject}.ZDJECIE.{$title}.{$today}.1.jpg";
- // if (file_exists($logoImg))
- UI::alert('info', "Zapisuje logo jako '{$logoImg}' ...");
- file_put_contents($this->_getProjectBasePath() . '/' . $logoImg, $logo);
- }
- }
- public function logaTVAction() {
- UI::gora();
- UI::startContainer();
- echo UI::h('a', [
- 'href' => $this->getLink(),
- 'class' => 'btn btn-md btn-default'
- ], "wróć");
- echo UI::h('div', [], [
- UI::h('div', [], [
- 'Loga pobierane są ze strony <a href="'.$this->toyaTvUrl.'">'.$this->toyaTvUrl.'</a> ',
- UI::hButtonPost("Pobierz ponownie", [
- 'class' => 'btn btn-xs btn-default',
- 'data' => [
- 'force' => '1'
- ]
- ])
- ]),
- ]);
- $updateLogoProjID = V::get('fetch_logo_from_toya', 0, $_POST, 'int');
- if ($updateLogoProjID > 0) $this->updateProjectLogoFromToya($updateLogoProjID);
- $updateDescProjID = V::get('fetch_desc_from_toya', 0, $_POST, 'int');
- if ($updateDescProjID > 0) $this->updateProjectDescFromToya($updateDescProjID);
- $projects = DB::getPDO()->fetchAll("
- select p.ID
- , p.P_ID
- , p.M_DIST_TYPE
- , p.M_DIST_DESC
- , p.M_DIST_DESC_HTML
- , p.TV_KARTA_DEVICE_SERIAL
- from IN7_MK_BAZA_DYSTRYBUCJI p
- where p.M_DIST_TYPE in ('TV__UMOWA ZAKUPU KANALU')
- and p.A_STATUS in ('NORMAL','WAITING')
- ");
- $imgsToya = $this->fetchImagesFromToya($force = V::get('force', '', $_REQUEST));
- UI::table([
- 'cols_help' => [
- 'sid' => "TV_KARTA_DEVICE_SERIAL",
- 'type' => "M_DIST_TYPE",
- 'desc' => "M_DIST_DESC",
- 'html' => "M_DIST_DESC_HTML",
- 'se' => "Logo wgrane do SE",
- // 'www' => "Logo na stronie www.biall.net.pl",
- 'toya' => "Logo na stronie toya.net.pl",
- ],
- 'rows' => array_map(function ($row) use ($imgsToya) {
- $imgSE = '';
- $imgWWW = '?';
- $sid = (int)$row['TV_KARTA_DEVICE_SERIAL'];
- $sid = ($sid > 0 && $sid < 1000) ? $sid : 0;
- $imgTOYA = ($sid > 0)
- ? UI::h('img', [
- 'src' => "https://toya.net.pl/telewizja/kanaly/logo/sid/{$sid}"
- ])
- : 'brak sid!';
- $filesToAdd = $this->_findProjectFiles($row['ID'], 'ZDJECIE', array('jpg','png','gif'));
- // "name":"5641.ZDJECIE.TVPULS2.2016-09-26.1.jpg"
- // "path":"\/Library\/Server\/Web\/Data\/Sites\/Default\/PLIKI\/PROJEKTY\/5641.sprawy_zwiazane_z_dy_\/5641.ZDJECIE.TVPULS2.2016-09-26.1.jpg"
- // "www":""
- $imgSE = implode(' ', array_map(function ($file) {
- return UI::h('img', [
- 'src' => $file['www']
- ]);
- }, $filesToAdd));
- $imgSE .= '<br>' . UI::hButtonPost("Pobierz z Toya", [
- 'class' => 'btn btn-xs btn-link',
- 'data' => [
- 'fetch_logo_from_toya' => $row['ID'],
- '_route' => 'BiallNet_SyncProjectFiles',
- '_task' => 'logaTV',
- ]
- ]);
- $descHtml = UI::h('div', [], substr($row['M_DIST_DESC_HTML'], 0, 100) . '...');
- if (!empty($imgsToya[$sid]['html'])) {
- $descHtml .= '<br>' . UI::hButtonPost("Pobierz z Toya", [
- 'class' => 'btn btn-xs btn-link',
- 'title' => htmlspecialchars($imgsToya[$sid]['html']),
- 'data' => [
- 'fetch_desc_from_toya' => $row['ID'],
- '_route' => 'BiallNet_SyncProjectFiles',
- '_task' => 'logaTV',
- ]
- ]);
- }
- return [
- 'ID' => UI::h('a', [
- 'href' => Request::getPathUri() . 'index.php?_route=ViewTableAjax&namespace=default_db/IN7_MK_BAZA_DYSTRYBUCJI#FILES/' . $row['ID']
- ], $row['ID']),
- 'sid' => (!empty($row['TV_KARTA_DEVICE_SERIAL']) && !$sid)
- ? "<span style=\"color:red\">błędny sid! ({$row['TV_KARTA_DEVICE_SERIAL']})</span>"
- : $sid,
- 'P_ID' => $row['P_ID'],
- 'type' => $row['M_DIST_TYPE'],
- 'desc' => $row['M_DIST_DESC'],
- 'html' => $descHtml,
- 'se' => $imgSE,
- // 'www' => $imgWWW,
- 'toya' => $imgTOYA,
- ];
- }, $projects)
- ]);
- UI::endContainer();
- UI::dol();
- }
- public function fetchImagesFromToya($force = false) {
- // $html = file_get_contents($this->toyaTvUrl);
- if (!$force && file_exists('/tmp/toya-net-pl-telewizja.json')) {
- $json = file_get_contents('/tmp/toya-net-pl-telewizja.json');
- if ($json) {
- $listLogoToya = @json_decode($json, $assoc = true);
- if (!empty($listLogoToya)) return $listLogoToya;
- }
- UI::alert('warning', "cache error - toya.net.pl/telewizja");
- }
- $listLogoToya = [];
- $curl_handle = curl_init();
- curl_setopt($curl_handle, CURLOPT_URL, $this->toyaTvUrl);
- curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
- curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
- // curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name');
- $html = curl_exec($curl_handle);
- curl_close($curl_handle);
- if (!$html) throw new Exception("błąd pobierania strony '{$this->toyaTvUrl}'");
- $pos = strpos($html, '<div class="offer-more-channel">');
- if (!$pos) throw new Exception("błąd parsowania strony '{$this->toyaTvUrl}'");
- $html = substr($html, $pos);
- $pos = strpos($html, '<!-- grafika i tekst -->');
- if ($pos) $html = substr($html, 0, $pos);
- // echo UI::h('pre', ['style'=>"max-height:400px"], htmlspecialchars($html));
- for ($pos = strpos($html, '<div class="offer-more-channel">'); $pos !== false; ) {
- $logoToya = [];
- $nextPos = strpos($html, '<div class="offer-more-channel">', $pos + 1);
- $offset = strlen('<div class="offer-more-channel">');
- if (false !== $nextPos) {
- $tag = trim(substr($html, $pos + $offset, $nextPos - $pos - $offset));
- } else {
- $tag = trim(substr($html, $pos + $offset));
- }
- preg_match_all('/<img src="(.*)" alt="(.*)"/', $tag, $matches, PREG_SET_ORDER);
- // DBG::nicePrint($matches, '$matches');
- if (!empty($matches[0]) && 3 == count($matches[0])) {
- $url = 'https://toya.net.pl' . $matches[0][1];
- $logoToya['url'] = $url;
- $logoToya['serial_nr'] = substr($url, strrpos($url, '/') + 1);
- $logoToya['title'] = $matches[0][2];
- } else {
- DBG::nicePrint($matches, 'TODO: logo/title $matches');
- }
- preg_match_all('/Na kanale: (\d*)[\W\n\r]*<\/p>/', $tag, $matches, PREG_SET_ORDER);
- // DBG::nicePrint($matches, '$matches');
- if (!empty($matches[0]) && count($matches[0]) > 1) {
- $logoToya['nr'] = $matches[0][1];
- } else {
- DBG::nicePrint($matches, 'TODO: "Na kanale .*" $matches');
- }
- {
- $pDesc = strpos($tag, '<div class="channel-tooltip-content">');
- if ($pDesc) {
- $pDesc = strpos($tag, '<p>', $pDesc);
- if ($pDesc) {
- $pEndDesc = strpos($tag, '</p>', $pDesc);
- if ($pEndDesc) {
- $desc = trim(substr($tag, $pDesc + strlen('<p>'), $pEndDesc - $pDesc));
- if ('Na kanale' != substr($desc, 0, strlen('Na kanale'))) {
- $logoToya['desc'] = $desc;
- }
- }
- }
- }
- }
- if (empty($logoToya['desc'])) {
- $desc = '';
- preg_match_all('/<\/span>\n(.*)\W*<p>\W*Na kanale: /', $tag, $matches, PREG_SET_ORDER);
- if (!empty($matches[0]) && 2 == count($matches[0])) {
- $desc = trim($matches[0][1]);
- } else {
- DBG::nicePrint([$matches, htmlspecialchars($tag)], 'TODO: "Na kanale .*" $matches');
- }
- if ($desc) {
- $logoToya['desc'] = $desc;
- } else {
- DBG::nicePrint(htmlspecialchars($tag), 'TODO: Brak opisu?');
- }
- }
- // echo UI::h('pre', [], htmlspecialchars($tag));
- if ($logoToya['serial_nr']) $listLogoToya[ $logoToya['serial_nr'] ] = $logoToya;
- if (false === $nextPos || $pos > 100000000) break;
- $pos = $nextPos;
- }
- // DBG::nicePrint($listLogoToya, '$listLogoToya');
- file_put_contents('/tmp/toya-net-pl-telewizja.json', json_encode($listLogoToya));
- return $listLogoToya;
- }
- public function defaultAction() {
- UI::gora();
- UI::menu();
- $configError = null;
- try {
- $this->_checkFtpConfig();
- } catch (Exception $e) {
- $configError = $e->getMessage();
- }
- UI::startTag('div', ['class'=>"jumbotron"]);
- UI::startContainer(['style' => "text-align:center"]);
- echo UI::h('h3', [], "Synchronizcja plików na stronę www.biall.net.pl z projektów");
- if (!empty($configError)) {
- UI::alert('danger', $configError);
- } else {
- echo UI::h('a', [
- 'href' => $this->getLink('syncToWwwSite'),
- 'class' => 'btn btn-md btn-primary'
- ], "Synchronizuj wszystkie projekty");
- }
- echo ' ';
- echo UI::h('a', [
- 'href' => $this->getLink('logaTV'),
- 'class' => 'btn btn-md btn-primary'
- ], "Synchronizuj loga TV ze strony toya.net.pl");
- UI::endContainer();
- UI::endTag('div');// .jumbotron
- UI::dol();
- }
- public function syncToWwwSiteAction() {
- UI::gora();
- UI::menu();
- echo UI::h('h1', [], "Synchronizcja plików na stronę www.biall.net.pl z projektów:");
- UI::startTag('pre', ['style'=>"max-height:400px;border:1px solid silver;overflow:auto"]);
- $this->syncToWwwSite();
- UI::endTag('pre');
- UI::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);// fetch pdf files for project
- // fetch more files specific by project type
- 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->_syncProjectFiles($idProject, $files);
- echo "\n";
- }
- }
- private function _getProjectBasePath() {
- global $FOLDERS;
- return $FOLDERS['IN7_MK_BAZA_DYSTRYBUCJI_COLUMN'];
- }
- private function _findProjectDir($project_id) {
- $dir_projekty = $this->_getProjectBasePath();
- //$www_projekty = "PROJEKTY/";
- $pattern = $dir_projekty.'/'.$project_id.'.*';
- $path_projekt = glob($pattern , GLOB_ONLYDIR);// array glob(pattern [, flags])
- if (empty($path_projekt)) {
- return null;
- }
- $path_projekt = reset($path_projekt);
- $dir_projekt = explode('/', $path_projekt);
- $dir_projekt = end($dir_projekt);
- return $dir_projekt;
- }
- private function _findProjectFiles($project_id, $type = '', $suffix = 'pdf') {
- $ret = array();
- // @see .config:$FOLDERS[IN7_MK_BAZA_DYSTRYBUCJI_COLUMN]="/home/samba/PROJEKTY";
- $dir_projekty = $this->_getProjectBasePath();
- //$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 = str_replace($dir_projekty, 'https://biuro.biall-net.pl/PLIKI/PROJEKTY/', $v);
- $ret[] = [
- 'name' => $f_name,
- 'path' => $v,
- 'www' => $f_www
- ];
- }
- return $ret;
- }
- private function _syncProjectFiles($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;
- }
- }
|