File: /home/safarimaris/home/safarimaris/console/controllers/MgController.php
<?php
namespace console\controllers;
use common\models\Product;
use common\models\Region;
use common\models\Site;
use Yii;
use yii\base\Exception;
use yii\console\Controller;
use yii\imagine\Image;
use yii\helpers\ArrayHelper;
use Imagine\Image\ManipulatorInterface;
use common\components\EntityTypes;
use common\models\Entity;
use common\models\EntityBoat;
use common\models\Fleet;
use common\models\Country;
class MgController extends Controller
{
private $dicAvail = [];
private static $boats;
private static $countries;
public function actionAll($skipImage = false)
{
$this->actionRegion();
$this->actionCountry($skipImage);
$this->actionFleet();
$this->actionBoat($skipImage);
$this->actionBoatDescr();
$this->actionSite($skipImage);
$this->actionProduct($skipImage);
}
public function actionCountry($skipImage = false)
{
echo "migrate country\n";
Yii::$app->db->createCommand()->delete('country')->execute();
Yii::$app->db->createCommand()->delete('gallery_image', "type='country'")->execute();
system("rm -rf " . escapeshellarg(Yii::getAlias('@imgPath/country')));
mkdir(Yii::getAlias('@imgPath/country'), 0777);
$res = Yii::$app->dblive->createCommand('
SELECT cd.parentId, cd.name, i1.name as logo, GROUP_CONCAT(i2.name) as gallery, g.groupId FROM dive_countries_descr cd
LEFT JOIN dive_countries_media cm1 ON cm1.entityId = cd.parentId AND cm1.mediaUse = 1 and cm1.mediaTypeId = 1
LEFT JOIN dive_media_images i1 ON i1.id = cm1.mediaId
LEFT JOIN dive_countries_media cm2 ON cm2.entityId = cd.parentId AND cm2.mediaUse = 3 and cm2.mediaTypeId = 1
LEFT JOIN dive_media_images i2 ON i2.id = cm2.mediaId
LEFT JOIN dive_boats_geo_items g ON g.entityId = cd.parentId AND g.entityTypeId = 5
WHERE cd.languageId = 1
GROUP BY cd.parentId;
')->queryAll();
$db = Yii::$app->db;
$i = 1;
foreach ($res as $item) {
try {
$model = new Country();
$model->id = $item['parentId'];
$model->regionId = $item['groupId'];
$model->name = trim($item['name']);
$model->url = $this->formatUrl($item['name']);
echo $i . "of" . sizeof($res);
if ($item['logo'] && !$skipImage) {
$amazonImg = 'https://media.divebooker.com/media/images/big/' . $item['logo'];
if (!is_file(Yii::getAlias('@imgPath/country/') . $item['logo'])) {
@file_put_contents(Yii::getAlias('@imgPath/country/') . $item['logo'], file_get_contents($amazonImg));
}
if (is_file(Yii::getAlias('@imgPath/country/') . $item['logo'])) {
$this->saveThumb($item['logo'], 1, 'country');
}
$model->logo = $item['logo'];
}
$model->save(false);
if ($item['gallery'] && !$skipImage) {
$list = explode(',', $item['gallery']);
foreach ($list as $image) {
$amazonImg = 'https://media.divebooker.com/media/images/big/' . $image;
$db->createCommand()
->insert(
'{{%gallery_image}}',
[
'type' => 'country',
'ownerId' => $model->id
]
)->execute();
$id = $db->getLastInsertID('gallery_image_id_seq');
$this->createFolders(Yii::getAlias('@imgPath/country/gallery/') . $model->id . '/' . $id . '/original.jpg');
if ($content = file_get_contents($amazonImg)) {
file_put_contents(Yii::getAlias('@imgPath/country/gallery/') . $model->id . '/' . $id . '/original.jpg', $content);
$this->saveThumb(Yii::getAlias('@imgPath/country/gallery/') . $model->id . '/' . $id . '/', 2, 'country');
}
}
}
} catch (Exception $e) {
Yii::error($e->getMessage());
}
echo "\r";
$i++;
}
$this->actionChown('/country');
}
public function actionFleet()
{
echo "migrate fleet\n";
Yii::$app->db->createCommand()->delete('dic_fleet')->execute();
$res = Yii::$app->dblive->createCommand('
SELECT parentId, name
FROM dive_boats_fleets_descr
WHERE languageId = 1 and name != "DELETE";')->queryAll();
$i = 1;
foreach ($res as $item) {
$model = new Fleet();
$model->id = $item['parentId'];
$model->name = trim($item['name']);
$model->save(false);
echo $i."of".sizeof($res)."\r";
$i++;
}
}
public function actionRegion()
{
echo "migrate region\n";
Yii::$app->db->createCommand()->delete('region')->execute();
$res = Yii::$app->dblive->createCommand('
SELECT parentId, name
FROM dive_boats_geo_groups_descr
WHERE languageId = 1
GROUP BY parentId;')->queryAll();
$i = 1;
foreach ($res as $item) {
$model = new Region();
$model->id = $item['parentId'];
$model->ordinal = $item['parentId'];
$model->name = trim($item['name']);
$model->save(false);
echo $i."of".sizeof($res)."\r";
$i++;
}
}
public function actionDictionary()
{
$this->dictionary(38, '{{%dic_material}}');
$this->dictionary(1, '{{%dic_language}}');
$this->dictionary(35, '{{%dic_navigation}}');
$this->dictionary(36, '{{%dic_food}}');
$this->dictionary(37, '{{%dic_service}}');
$this->dictionary(39, '{{%dic_document}}');
$this->dictionary(45, '{{%dic_diving}}');
}
public function actionBoat($skipImage = false)
{
echo "migrate boat\n";
Yii::$app->db->createCommand()->delete('entity')->execute();
Yii::$app->db->createCommand()->delete('entity_boat')->execute();
if (!$skipImage) {
Yii::$app->db->createCommand()->delete('gallery_image', "type='entity'")->execute();
system("rm -rf " . escapeshellarg(Yii::getAlias('@imgPath/entity')));
mkdir(Yii::getAlias('@imgPath/entity'), 0777);
}
$this->actionDictionary();
$res = Yii::$app->dblive->createCommand('
SELECT
b.*,
bc.countryId,
bd.name,
bd.descr,
bd.engines,
bd.tenders,
bd.compressors,
bd.generator,
bd.powerPlugsOnboard,
i1.name as logo,
i3.name as boatPlan,
GROUP_CONCAT(i2.name) as gallery
FROM dive_boats b
INNER JOIN dive_boats_descr bd ON bd.parentId = b.id AND bd.languageId = 1
INNER JOIN dive_boats_counties bc ON bc.boatId = b.id
LEFT JOIN dive_boats_media cm1 ON cm1.entityId = b.id AND cm1.mediaUse = 1 and cm1.mediaTypeId = 1
LEFT JOIN dive_media_images i1 ON i1.id = cm1.mediaId
LEFT JOIN dive_boats_media cm2 ON cm2.entityId = b.id AND cm2.mediaUse = 3 and cm2.mediaTypeId = 1
LEFT JOIN dive_media_images i2 ON i2.id = cm2.mediaId
LEFT JOIN dive_boats_media cm3 ON cm3.entityId = b.id AND cm3.mediaUse = 11 and cm3.mediaTypeId = 1
LEFT JOIN dive_media_images i3 ON i3.id = cm3.mediaId
WHERE b.active = 1
GROUP BY b.id
')->queryAll();
$db = Yii::$app->db;
$i = 1;
foreach ($res as $item) {
try{
$model = new Entity();
$model->setScenario('default');
$model->id = $item['id'];
$model->description = $item['descr'];
$model->countryId = $item['countryId'];
$model->name = trim($item['name']);
$model->type = EntityTypes::TYPE_BOAT;
$model->seoUrl = $this->formatUrl($item['name']);
$model->nitrox = $item['nitroxId'];
$model->wifi = $item['wifiId'];
$model->techDiving = 0;
echo $i . "of" . sizeof($res);
if ($item['logo']) {
$amazonImg = 'https://media.divebooker.com/media/images/big/' . $item['logo'];
if (!is_file(Yii::getAlias('@imgPath/entity/') . $item['logo']) && !$skipImage) {
if ($content = @file_get_contents($amazonImg)) {
file_put_contents(Yii::getAlias('@imgPath/entity/') . $item['logo'], $content);
$this->saveThumb($item['logo'], 1, 'entity');
}
}
$model->logo = $item['logo'];
}
$model->save(false);
$extended = $model->findExtended();
if (!$extended) {
$extended = new EntityBoat();
}
$extended->id = $extended->entityId = $model->id;
$extended->setScenario('default');
$extended->setAttributes($item);
$extended->fleetId = $item['fleetId'];
$extended->year = $item['yearBuilt'];
$extended->materialId = $item['material'];
$extended->countCabin = $item['numberCabins'];
if ($item['boatPlan'] && !$skipImage) {
$amazonImg = 'https://media.divebooker.com/media/images/big/'.$item['boatPlan'];
if (!is_file(Yii::getAlias('@imgPath/entity_boat/').$item['boatPlan'])) {
if ($content = @file_get_contents($amazonImg)) {
@file_put_contents(Yii::getAlias('@imgPath/entity_boat/').$item['boatPlan'], $content);
$this->saveThumb($item['boatPlan'], 1, 'entity_boat');
}
}
$extended->boatPlan = $item['boatPlan'];
}
$extended->compressor = $item['compressors'];
$extended->engine = $item['engines'];
$extended->tender = $item['tenders'];
$extended->socket = $item['powerPlugsOnboard'];
$extended->techEquip = $item['equippedTechDiving'];
$extended->disabilitiesEquip = $item['diversWithDisabilities'];
$extended->lastDockDate = $item['lastDockDate'] == '0000-00-00' ? null : $item['lastDockDate'];
$extended->lastRenovationDate = $item['lastRenovationDate'] == '0000-00-00' ? null : $item['lastRenovationDate'];
$extended->save(false);
//properties
$props = Yii::$app->dblive->createCommand('
SELECT
propertyTypeId, propertyValues
FROM dive_boats_properties
WHERE entityId = :entityId AND propertyTypeId IN(1, 35, 36, 37, 39, 45);
')->bindValue(':entityId', $model->id)
->queryAll();
if ($props) {
foreach($props as $prop) {
$data = [];
foreach (explode('~', $prop['propertyValues']) as $vl) {
if (in_array($vl, $this->dicAvail[$prop['propertyTypeId']]))
$data[] = [$model->id, $vl];
}
switch ($prop['propertyTypeId']) {
case 1:
$this->saveDic('{{%entity_language_link}}', $data, 'languageId');
break;
case 35:
$this->saveDic('{{%entity_boat_navigation_link}}', $data, 'navigationId');
break;
case 36:
$this->saveDic('{{%entity_boat_food_link}}', $data, 'foodId');
break;
case 37:
$this->saveDic('{{%entity_boat_service_link}}', $data, 'serviceId');
break;
case 39:
$this->saveDic('{{%entity_document_link}}', $data, 'documentId');
break;
case 45:
$this->saveDic('{{%entity_boat_diving_link}}', $data, 'divingId');
foreach ($data as $d) {
if ($d[1] == 1093) {//tech diving
$db->createCommand()
->update(
'{{%entity}}',
['techDiving' => 1],
['id' => $model->id]
)->execute();
}
}
break;
}
}
}
$gallery = Yii::$app->dblive->createCommand('
SELECT
i.name
FROM dive_boats_media m
INNER JOIN dive_media_images i ON i.id = m.mediaId
WHERE entityId = :entityId AND m.mediaUse = 3 and m.mediaTypeId = 1;
')->bindValue(':entityId', $model->id)
->queryColumn();
if ($gallery && !$skipImage) {
foreach ($gallery as $image) {
$amazonImg = 'https://media.divebooker.com/media/images/big/'.$image;
$db->createCommand()
->insert(
'{{%gallery_image}}',
[
'type' => 'entity',
'ownerId' => $model->id
]
)->execute();
$id = $db->getLastInsertID('gallery_image_id_seq');
$this->createFolders(Yii::getAlias('@imgPath/entity/gallery/').$model->id.'/'.$id.'/original.jpg');
if ($content = @file_get_contents($amazonImg)) {
file_put_contents(Yii::getAlias('@imgPath/entity/gallery/').$model->id.'/'.$id.'/original.jpg', $content);
$this->saveThumb(Yii::getAlias('@imgPath/entity/gallery/').$model->id.'/'.$id.'/', 2, 'entity');
}
}
}
} catch (Exception $e) {
Yii::error($e->getMessage());
}
echo "\r";
$i++;
}
$this->actionChown('/entity');
}
public function actionBoatDescr()
{
echo "migrate product descr\n";
$res = Yii::$app->dbsm->createCommand('
SELECT
p.ID,
p.post_title as name,
p.post_name as url,
CONCAT(p.post_content, " ", cabin.meta_value) as description
FROM wp_posts p
INNER JOIN wp_postmeta cabin ON cabin.post_id = p.ID AND cabin.meta_key = "_simple_fields_fieldGroupID_20_fieldID_1_numInSet_0"
WHERE p.post_type = "yachts" and p.post_status = "publish";
')->queryAll();
$i = 1;
foreach ($res as $item) {
try {
echo $i . "of" . sizeof($res);
$boatId = $this->getBoatId($item['url']);
if (!$boatId) {
$i++;
echo "\r";
Yii::info('Not found boat'.$item['url']);
continue;
}
$model = Entity::findOne($boatId);
$model->description = $item['description'];
$model->save(false);
} catch (Exception $e) {
Yii::error($e->getMessage());
}
echo "\r";
$i++;
}
}
public function actionSite($skipImage = false)
{
echo "migrate site\n";
Yii::$app->db->createCommand()->delete('{{%site}}')->execute();
system("rm -rf " . escapeshellarg(Yii::getAlias('@imgPath/site')));
mkdir(Yii::getAlias('@imgPath/site'), 0777);
$res = Yii::$app->dbsm->createCommand('
SELECT
p.ID,
p.post_title as name,
p.post_name as url,
p.post_content as description,
p1.guid as logo,
t.slug as countryUrl
FROM wp_posts p
LEFT JOIN wp_postmeta pm1 ON pm1.post_id = p.ID AND pm1.meta_key = "_thumbnail_id"
LEFT JOIN wp_posts p1 ON p1.ID = pm1.meta_value
LEFT JOIN wp_term_relationships as r ON r.object_id = p.ID
LEFT JOIN wp_term_taxonomy as tx ON tx.term_taxonomy_id = r.term_taxonomy_id AND tx.taxonomy = "country"
LEFT JOIN wp_terms t ON t.term_id = tx.term_id
WHERE p.post_type = "site" and p.post_status = "publish"
GROUP BY p.ID;
')->queryAll();
$i = 1;
foreach ($res as $item) {
try {
$countryId = $this->getCountryId($item['countryUrl']);
/*if (!$countryId) {
continue;
}*/
$model = new Site();
$model->setScenario('default');
$model->id = $item['ID'];
$model->countryId = $countryId;
$model->name = $item['name'];
$model->description = $item['description'];
$model->url = $item['url'];
echo $i . "of" . sizeof($res);
if ($item['logo'] && !$skipImage) {
$filename = uniqid().'.'.pathinfo($item['logo'], PATHINFO_EXTENSION);
if (!is_file(Yii::getAlias('@imgPath/site/') . $filename)) {
if ($content = @file_get_contents($item['logo'])) {
file_put_contents(Yii::getAlias('@imgPath/site/') . $filename, $content);
$this->saveThumb($filename, 1, 'site');
}
}
$model->logo = $filename;
}
$model->save(false);
} catch (Exception $e) {
Yii::error($e->getMessage());
}
echo "\r";
$i++;
}
$this->actionChown('/site');
}
public function actionProduct($skipImage = false)
{
echo "migrate product\n";
Yii::$app->db->createCommand()->delete('product')->execute();
system("rm -rf " . escapeshellarg(Yii::getAlias('@imgPath/product')));
mkdir(Yii::getAlias('@imgPath/product'), 0777);
$res = Yii::$app->dbsm->createCommand('
SELECT
p.ID,
p.post_title as name,
CONCAT(p.post_content, " ", pm6.meta_value, " ", pm7.meta_value) as descr,
pb.id as BoatId,
pb.post_name as boatUrl,
pm1.meta_value as include,
pm2.meta_value as notInclude,
pm3.meta_value as additionalCost,
pm4.meta_value as sites,
p5.guid as logo
FROM wp_posts p
INNER JOIN wp_postmeta pmb ON pmb.post_id = p.ID AND pmb.meta_key = "yacht-tur"
INNER JOIN wp_posts pb ON pb.ID = pmb.meta_value
INNER JOIN wp_postmeta pm1 ON pm1.post_id = p.ID AND pm1.meta_key = "_simple_fields_fieldGroupID_6_fieldID_1_numInSet_0"
INNER JOIN wp_postmeta pm2 ON pm2.post_id = p.ID AND pm2.meta_key = "_simple_fields_fieldGroupID_6_fieldID_2_numInSet_0"
INNER JOIN wp_postmeta pm3 ON pm3.post_id = p.ID AND pm3.meta_key = "_simple_fields_fieldGroupID_6_fieldID_3_numInSet_0"
INNER JOIN wp_postmeta pm4 ON pm4.post_id = p.ID AND pm4.meta_key = "wpsc-tur-sites"
INNER JOIN wp_postmeta pm5 ON pm5.post_id = p.ID AND pm5.meta_key = "_thumbnail_id"
INNER JOIN wp_posts p5 ON p5.ID = pm5.meta_value
INNER JOIN wp_postmeta pm6 ON pm6.post_id = p.ID AND pm6.meta_key = "_simple_fields_fieldGroupID_5_fieldID_5_numInSet_0"
INNER JOIN wp_postmeta pm7 ON pm7.post_id = p.ID AND pm7.meta_key = "_simple_fields_fieldGroupID_5_fieldID_6_numInSet_0"
WHERE p.post_type = "turs" and p.post_status = "publish";
')->queryAll();
$allSites = Yii::$app->db->createCommand('SELECT id FROM {{%site}};')->queryColumn();
$db = Yii::$app->db;
$i = 1;
foreach ($res as $item) {
try {
echo $i . "of" . sizeof($res);
$boatId = $this->getBoatId($item['boatUrl']);
if (!$boatId) {
$i++;
echo "\r";
Yii::info('Not found boat'.$item['boatUrl']);
continue;
}
$model = new Product();
$model->setScenario('default');
$model->id = $item['ID'];
$model->name = $item['name'];
$model->descr = $item['descr'];
$model->entityId = $boatId;
$model->include = $item['include'];
$model->notInclude = $item['notInclude'];
$model->additionalCost = $item['additionalCost'];
$model->itinerary = $this->getItinerary($model->id);
$model->save(false);
//sites
$sites = json_decode($item['sites']);
if ($item['sites'] && sizeof($sites)) {
$data = [];
foreach($sites as $site) {
if (in_array($site, $allSites))
$data[] = [$model->id, $site];
if ($data) {
$sql = Yii::$app->db->queryBuilder->batchInsert('{{%product_site_link}}', ['productId', 'siteId'], $data);
$sql = 'INSERT IGNORE' . substr( $sql, strlen( 'INSERT' ) );
Yii::$app->db->createCommand($sql)->execute();
}
}
}
if ($item['logo'] && !$skipImage) {
$ext = pathinfo($item['logo'], PATHINFO_EXTENSION);
if ($ext) {
$filename = $model->id.'.'.$ext;
if (!is_file(Yii::getAlias('@imgPath/product/') . $filename)) {
if ($content = @file_get_contents($item['logo'])) {
file_put_contents(Yii::getAlias('@imgPath/product/') . $filename, $content);
$this->saveThumb($filename, 1, 'product');
}
}
$model->logo = $filename;
$model->save(false);
}
}
} catch (Exception $e) {
Yii::error($e->getMessage());
}
echo "\r";
$i++;
}
$this->actionChown('/product');
}
public function actionChown($dir = '')
{
echo "chown ".$dir."\n";
system("chown -R apache:apache " . escapeshellarg(Yii::getAlias('@imgPath'.$dir)));
}
private function dictionary($typeId, $dest)
{
$this->dicAvail[$typeId] = [];
$db = Yii::$app->db;
$db->createCommand()->delete($dest)->execute();
$res = Yii::$app->dblive->createCommand('
SELECT id, name
FROM dive_catalog_properties
WHERE propertyTypeId = :typeId;')
->bindValue(':typeId', $typeId)
->queryAll();
$i = 1;
echo "migrate ".$dest."\n";
foreach ($res as $item) {
$db->createCommand()
->insert(
$dest,
[
'id' => $item['id'],
'name' => $this->translate($item['name'])
]
)->execute();
echo $i."of".sizeof($res);
echo "\r";
$i++;
$this->dicAvail[$typeId][] = $item['id'];
}
}
private function getItinerary($id)
{
$str = '';
$meta = Yii::$app->dbsm->createCommand('
SELECT meta_key, meta_value
FROM wp_postmeta
WHERE post_id = :postId
ORDER BY meta_key;
')->bindValue(':postId', $id)
->queryAll();
$struct = array();
foreach ($meta as $m) {
if (strstr($m['meta_key'], '_simple_fields_fieldGroupID_13')) {
$struct[$m['meta_key']] = $m['meta_value'];
}
}
for ($i = 0; $i < sizeof($struct) / 4; $i++) {
$str .= sprintf("<p>%s день %s</p> %s",
$struct['_simple_fields_fieldGroupID_13_fieldID_1_numInSet_'.$i],
$struct['_simple_fields_fieldGroupID_13_fieldID_2_numInSet_'.$i],
$struct['_simple_fields_fieldGroupID_13_fieldID_3_numInSet_'.$i]
);
}
return $str;
}
private function saveDic($table, $data, $fldName)
{
$sql = Yii::$app->db->queryBuilder->batchInsert($table, ['entityId', $fldName], $data);
$sql = 'INSERT IGNORE' . substr( $sql, strlen( 'INSERT' ) );
Yii::$app->db->createCommand($sql)->execute();
}
private function formatUrl($url)
{
return str_replace([' ', '&', '(', ')', '.', ','], ['-', 'and', '', '', '', ''], strtolower(trim($url)));
}
private function createFolders($filePath)
{
$parts = explode('/', $filePath);
// skip file name
$parts = array_slice($parts, 0, count($parts) - 1);
$targetPath = implode('/', $parts);
$path = realpath($targetPath);
if (!$path) {
mkdir($targetPath, 0777, true);
}
}
private function saveThumb($filename, $type, $entity)
{
$path = $type == 1 ? Yii::getAlias('@imgPath/'.$entity.'/') : $filename;
foreach (Yii::$app->params['thumbs'] as $profile => $config) {
$thumbPath = $type == 1 ? $path.$profile.'-'.$filename : $path.$profile.'.jpg';
if ($thumbPath !== null) {
if (!is_file($thumbPath)) {
$this->generateImageThumb($config, $type == 1 ? $path.$filename : $filename.'original.jpg', $thumbPath);
}
}
}
if ($type == 2) {
$thumbPath = $path.'preview.jpg';
if ($thumbPath !== null) {
if (!is_file($thumbPath)) {
$this->generateImageThumb(['width' => 200, 'quality' => 90], $filename.'original.jpg', $thumbPath);
}
}
}
}
private function generateImageThumb($config, $path, $thumbPath)
{
$width = ArrayHelper::getValue($config, 'width');
$height = ArrayHelper::getValue($config, 'height');
$quality = ArrayHelper::getValue($config, 'quality', 100);
$mode = ArrayHelper::getValue($config, 'mode', ManipulatorInterface::THUMBNAIL_INSET);
if (!$width || !$height) {
$image = Image::getImagine()->open($path);
$ratio = $image->getSize()->getWidth() / $image->getSize()->getHeight();
if ($width) {
$height = ceil($width / $ratio);
} else {
$width = ceil($height * $ratio);
}
}
// Fix error "PHP GD Allowed memory size exhausted".
ini_set('memory_limit', '1024M');
Image::thumbnail($path, $width, $height, $mode)->save($thumbPath, ['quality' => $quality]);
}
private function translate($name)
{
$arr = [
'Wood' => 'Дерево',
'Steel' => 'Сталь',
'Glass Reinforced Plastic' => 'Стеклопластик',
'Ironwood' => 'Твердое дерево',
'Aluminium' => 'Алюминий',
'English' => 'Английский',
'German' => 'Немецкий',
'French' => 'Французский',
'Russian' => 'Русский',
'Ukrainian' => 'Украинский',
'Other' => 'Другие',
'Radar' => 'Радар',
'Radio VHF/DSC/SSB' => 'Радиосвязь',
'Fire Alarm & Fire Extinguishers' => 'Пожарная сигнализация и система пожаротушения',
'Depth Sounder' => 'Эхолот',
'Bilge Pump Alarm' => 'Помпа',
'EPIRB' => 'EPIRB',
'Crew Trained in CPR' => 'Команда тренированная по CPR',
'Crew Trained in First Aid' => 'Команда тренированная по оказанию первой помощи',
'Fishfinder' => 'Ультразвуковой сонар',
'Emergency Rafts' => 'Спасательные плоты',
'Oxygen' => 'Кислород',
'Sounder' => 'Сирена',
'Search Light' => 'Поисковый прожектор',
'GPS' => 'GPS',
'Life Vests' => 'Спасательные жилеты',
'First Aid Kits' => 'Аптечки первой помощи',
'Satellite & Mobile Phones' => 'Спутниковая и сотовая связь',
'Engine Room CCTV' => 'Система видеонаблюдения в машинном отделении',
'Emergency Flares' => 'Аварийные факелы',
'Western Food' => 'Западная кухня',
'Local Food' => 'Местная кухня',
'Vegetarian Options' => 'Вегетарианская кухня',
'Buffet Style' => 'Шведский стол',
'Beer Available' => 'Пиво',
'Selection of Wines' => 'Вина',
'Fine Cuisine' => 'Высокая кухня',
'Hot and Cold Beverages' => 'Горячие-холодные напитки',
'Snacks All Day' => 'Закуски в течение дня',
'Ice Making Machine' => 'Мороженница',
'Child Friendly' => 'Подходит для детей',
'Non-Diver (Snorkeler) Friendly' => 'Подходит для не-дайверов',
'Air Conditioned Saloon' => 'Кондиционирование салона',
'Air Conditioned Cabins' => 'Кондиционирование в каютах',
'Double Cabins' => 'Двухместные кровати',
'Open Air Saloon' => 'Салон на открытом воздухе',
'Bar' => 'Бар',
'Sun Deck' => 'Сан дек',
'Pool on deck' => 'Бассейн на сан деке',
'Sauna' => 'Сауна',
'Hot Tub' => 'Джакузи',
'Library' => 'Библиотека',
'TV in Cabins' => 'ТВ в каютах',
'Charging Stations' => 'Зарядные станции',
'PC for Shared Use' => 'Компьютер',
'Warm Water Showers' => 'Душ с теплой водой',
'Massage' => 'Массаж',
'Daily Housekeeping' => 'Ежедневная уборка',
'Laundry Service' => 'Прачечная',
'Spacious Dive Deck' => 'Просторный дайв-дек',
'Onboard Kayaks' => 'Каяки',
'Separate Rinse for U/W Camera' => 'Специальное хранилище для фототехники',
'Camera & Photography Station' => 'Оборудована для фотографов',
'Yoke Tanks' => 'баллоны Yoke',
'DIN Tanks' => 'баллоны DIN',
'Rebreather Support' => 'Поддержка ребризеров',
'Compressors' => 'Компрессоры',
'Tech Diving' => 'Технический дайвинг',
'Dive Deck' => 'Дайв-дек',
'Passport' => 'Паспорт',
'Certification Card' => 'Дайвинг-сертификат',
'Date of birth' => 'Дата рождения',
'Date of last dive' => 'Дата последнего дайва',
'Logbook' => 'Логбук',
'Diving Insurance' => 'Дайверская страховка',
'Number of logged dives' => 'Количество дайвов в логбуке'
];
return isset($arr[$name]) ? $arr[$name] : $name;
}
private function getBoatId($slug)
{
$replace = array(
's-echo' => 'c-echo-ii',
'c-echo-i' => 'c-echo-ii',
'golden-dolphin' => 'golden-dolphin-i',
'dive-race-2' => 'diverace-class-e-thailand-burma',
'tropic-dancer' => 'rock-islands-aggressor-tropic-dancer',
'okeanos-agressor-i' => 'okeanos-aggressor-i',
'okeanos-aggressor-ii' => 'okeanos-aggressor-ii-wind-dancer',
'belize-aggressor-iv' => 'belize-aggressor-iv-sun-dancer-ii',
'indo-aggressor' => 'indo-aggressor-komodo-dancer',
'palau-aggressor' => 'palau-aggressor-ii',
'mv-emperor-leo' => 'emperor-leo',
'my-seawolf-soul' => 'seawolf-soul',
'my-seawolf-dominator' => 'seawolf-dominator',
'my-seawolf-felo' => 'seawolf-felo',
'turks-and-caicos-explorer-ii-2' => 'turks-and-caicos-explorer-ii',
'fiji-aggressor' => 'fiji-aggressor-fiji-island-dancer-ii',
'philippines-siren' => 'philippine-siren',
'princesse-haleema' => 'princess-haleema',
'snefro-target-2' => 'snefro-target',
'solitude-one-2' => 'solitude-one',
'fun-azul' => 'fun-azul-maldives',
'dive-race' => 'diverace-class-e-thailand-burma',
'undersea-hunter' => 'nautilus-under-sea',
'blue-force-one' => 'blue-force-i',
'azores' => 'atlantis-azores'
);
$slug = isset($replace[$slug]) ? $replace[$slug] : $slug;
if (!self::$boats) {
self::$boats = Yii::$app->db->createCommand('SELECT id, seoUrl FROM {{%entity}} WHERE type = 1;')->queryAll();
}
foreach (self::$boats as $b) {
$boats[$b['seoUrl']] = $b['id'];
}
return isset($boats[$slug]) ? $boats[$slug] : null;
}
private function getCountryId($slug)
{
$replace = array(
'country_croatia' => 'croatia',
'malaisia' => 'malaysia',
'sri_lanka' => 'sri-lanka',
'tailand' => 'thailand',
'kuba' => 'cuba',
'gavajskie-ostrova' => 'hawaii',
'marshallovy-ostrova' => 'marshall-islands',
'shotlandiya' => 'scotland',
'fidzhi' => 'fiji',
'beliz' => 'belize',
'turciya' => 'turkey',
'terks-i-kajkos' => 'turks-and-caicos',
'ispaniya' => 'spain',
'tanzaniya' => 'tanzania',
'kipr' => '',
);
$slug = isset($replace[$slug]) ? $replace[$slug] : $slug;
if (!self::$countries) {
self::$countries = Yii::$app->db->createCommand('SELECT id, url FROM {{%country}};')->queryAll();
}
foreach (self::$countries as $c) {
$countries[$c['url']] = $c['id'];
}
return isset($countries[$slug]) ? $countries[$slug] : null;
}
}