Skip to content

Commit

Permalink
Merge pull request #1 from boscobass/master
Browse files Browse the repository at this point in the history
Source code commit
  • Loading branch information
Lucas Barros committed Mar 23, 2015
2 parents 3034c1d + a0bd7e7 commit 046a2f7
Show file tree
Hide file tree
Showing 12 changed files with 906 additions and 0 deletions.
184 changes: 184 additions & 0 deletions crud/advanced/controller.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
<?php
/**
* This is the template for generating a CRUD controller class file.
*/

use yii\db\ActiveRecordInterface;
use yii\helpers\StringHelper;


/* @var $this yii\web\View */
/* @var $generator yii\gii\generators\crud\Generator */

$controllerClass = StringHelper::basename($generator->controllerClass);
$modelClass = StringHelper::basename($generator->modelClass);
$searchModelClass = StringHelper::basename($generator->searchModelClass);
if ($modelClass === $searchModelClass) {
$searchModelAlias = $searchModelClass . 'Search';
}

/* @var $class ActiveRecordInterface */
$class = $generator->modelClass;
$pks = $class::primaryKey();
$urlParams = $generator->generateUrlParams();
$actionParams = $generator->generateActionParams();
$actionParamComments = $generator->generateActionParamComments();

echo "<?php\n";
?>

namespace <?= StringHelper::dirname(ltrim($generator->controllerClass, '\\')) ?>;

use Yii;
use <?= ltrim($generator->modelClass, '\\') ?>;
<?php if (!empty($generator->searchModelClass)): ?>
use <?= ltrim($generator->searchModelClass, '\\') . (isset($searchModelAlias) ? " as $searchModelAlias" : "") ?>;
<?php else: ?>
use yii\data\ActiveDataProvider;
<?php endif; ?>
use <?= ltrim($generator->baseControllerClass, '\\') ?>;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;

/**
* <?= $controllerClass ?> implements the CRUD actions for <?= $modelClass ?> model.
*/
class <?= $controllerClass ?> extends <?= StringHelper::basename($generator->baseControllerClass) . "\n" ?>
{
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
];
}

/**
* Lists all <?= $modelClass ?> models.
* @return mixed
*/
public function actionIndex()
{
<?php if (!empty($generator->searchModelClass)): ?>
$searchModel = new <?= isset($searchModelAlias) ? $searchModelAlias : $searchModelClass ?>();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
<?php else: ?>
$dataProvider = new ActiveDataProvider([
'query' => <?= $modelClass ?>::find(),
]);

return $this->render('index', [
'dataProvider' => $dataProvider,
]);
<?php endif; ?>
}

/**
* Displays a single <?= $modelClass ?> model.
* <?= implode("\n * ", $actionParamComments) . "\n" ?>
* @return mixed
*/
public function actionView(<?= $actionParams ?>)
{
return $this->render('view', [
'model' => $this->findModel(<?= $actionParams ?>),
]);
}

/**
* Creates a new <?= $modelClass ?> model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate()
{
$model = new <?= $modelClass ?>();

if ($model->loadAndSave(Yii::$app->request->post())) {
Yii::$app->session->setFlash('success',<?= $generator->generateString('Saved successfully!') ?>);
return $this->redirect(['view', <?= $urlParams ?>]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}

/**
* Updates an existing <?= $modelClass ?> model.
* If update is successful, the browser will be redirected to the 'view' page.
* <?= implode("\n * ", $actionParamComments) . "\n" ?>
* @return mixed
*/
public function actionUpdate(<?= $actionParams ?>)
{
$model = $this->findModel(<?= $actionParams ?>);

if ($model->loadAndSave(Yii::$app->request->post())) {
Yii::$app->session->setFlash('success',<?= $generator->generateString('Updated successfully!') ?>);
return $this->redirect(['view', <?= $urlParams ?>]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}

/**
* Deletes an existing <?= $modelClass ?> model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* <?= implode("\n * ", $actionParamComments) . "\n" ?>
* @return mixed
*/
public function actionDelete(<?= $actionParams ?>)
{

try {
$this->findModel(<?= $actionParams ?>)->delete();
} catch (yii\db\IntegrityException $e) {
if($e->getCode() == 23000){
Yii::$app->session->setFlash('danger',<?= $generator->generateString('Record can not be deleted, there is a foreign key associated with it') ?>);
return $this->redirect(['index']);
}
}

Yii::$app->session->setFlash('success',<?= $generator->generateString('deleted successfully') ?>);
return $this->redirect(['index']);
}

/**
* Finds the <?= $modelClass ?> model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* <?= implode("\n * ", $actionParamComments) . "\n" ?>
* @return <?= $modelClass ?> the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel(<?= $actionParams ?>)
{
<?php
if (count($pks) === 1) {
$condition = '$id';
} else {
$condition = [];
foreach ($pks as $pk) {
$condition[] = "'$pk' => \$$pk";
}
$condition = '[' . implode(', ', $condition) . ']';
}
?>
if (($model = <?= $modelClass ?>::findOne(<?= $condition ?>)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
}
80 changes: 80 additions & 0 deletions crud/advanced/search.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php
/**
* This is the template for generating CRUD search class of the specified model.
*/

use yii\helpers\StringHelper;


/* @var $this yii\web\View */
/* @var $generator yii\gii\generators\crud\Generator */

$modelClass = StringHelper::basename($generator->modelClass);
$searchModelClass = StringHelper::basename($generator->searchModelClass);
if ($modelClass === $searchModelClass) {
$modelAlias = $modelClass . 'Model';
}
$rules = $generator->generateSearchRules();
$labels = $generator->generateSearchLabels();
$searchAttributes = $generator->getSearchAttributes();
$searchConditions = $generator->generateSearchConditions();

echo "<?php\n";
?>

namespace <?= StringHelper::dirname(ltrim($generator->searchModelClass, '\\')) ?>;

use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use <?= ltrim($generator->modelClass, '\\') . (isset($modelAlias) ? " as $modelAlias" : "") ?>;

/**
* <?= $searchModelClass ?> represents the model behind the search form about `<?= $generator->modelClass ?>`.
*/
class <?= $searchModelClass ?> extends <?= isset($modelAlias) ? $modelAlias : $modelClass ?>

{
/**
* @inheritdoc
*/
public function rules()
{
return [
<?= implode(",\n ", $rules) ?>,
];
}

/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}

/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = <?= isset($modelAlias) ? $modelAlias : $modelClass ?>::find();

$dataProvider = new ActiveDataProvider([
'query' => $query,
]);

if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}

<?= implode("\n ", $searchConditions) ?>

return $dataProvider;
}
}
88 changes: 88 additions & 0 deletions crud/advanced/views/_form.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<?php

use yii\helpers\Inflector;
use yii\helpers\StringHelper;

/* @var $this yii\web\View */
/* @var $generator yii\gii\generators\crud\Generator */

/* @var $model \yii\db\ActiveRecord */
$model = new $generator->modelClass();
$safeAttributes = $model->safeAttributes();
if (empty($safeAttributes)) {
$safeAttributes = $model->attributes();
}

echo "<?php\n";
?>

use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $model <?= ltrim($generator->modelClass, '\\') ?> */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-form form-create">

<?= "<?php " ?>$form = ActiveForm::begin(); ?>

<?php
function is_fkey2($attribute, $schema){
foreach($schema->foreignKeys as $key => $value){
foreach($value as $k => $v){
if ( strtolower($attribute) == strtolower($k) ){
return true;
}
}
}
return false;
}

foreach ($generator->getColumnNames() as $attribute) {



if (in_array($attribute, $safeAttributes)) {


if ( is_fkey2($attribute, $generator->getTableSchema()) ){




echo " <?php\n";
?>
$relData[''] = '';
$relData[Yii::t('app', 'Select')] = $model->getAllDataList<?php echo Inflector::id2camel(str_replace('_id','',strtolower($attribute)), '_')?>();
echo $form->field($model, '<?=$attribute?>')->dropDownList($relData);
<?php
echo "?>\n\n";

}else{

echo " <?= " . $generator->generateActiveField($attribute) . " ?>\n\n";

}

}
}
?>
<?php echo "<?php\n"; ?>
/*
***************************************************************************************************
* * Legba Yii Advanced SAMPLE USAGE (Hey! Change remind <<nameOfYourPorpertyRelations>>)
* [NOTE] if you need show n:n (n:m special) based em Yii2 hasMany()->viaTable() use this sample code:
***************************************************************************************************
* $relModel = $model->getAllDataListNameOfYourPorpertyRelations();
* echo $form->field($model, 'nameOfYourPorpertyRelations')->checkboxList($relModel)
*/
<?php echo "?>\n"; ?>
<div class="form-group">
<?= "<?= " ?>Html::submitButton($model->isNewRecord ? <?= $generator->generateString('Create') ?> : <?= $generator->generateString('Update') ?>, ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

<?= "<?php " ?>ActiveForm::end(); ?>

</div>
44 changes: 44 additions & 0 deletions crud/advanced/views/_search.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

use yii\helpers\Inflector;
use yii\helpers\StringHelper;

/* @var $this yii\web\View */
/* @var $generator yii\gii\generators\crud\Generator */

echo "<?php\n";
?>

use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $model <?= ltrim($generator->searchModelClass, '\\') ?> */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="panel-search <?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-search">

<?= "<?php " ?>$form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]); ?>

<?php
$count = 0;
foreach ($generator->getColumnNames() as $attribute) {
if (++$count < 6) {
echo " <?= " . $generator->generateActiveSearchField($attribute) . " ?>\n\n";
} else {
echo " <?php // echo " . $generator->generateActiveSearchField($attribute) . " ?>\n\n";
}
}
?>
<div class="form-group">
<?= "<?= " ?>Html::submitButton(<?= $generator->generateString('Search') ?>, ['class' => 'btn btn-primary']) ?>
<?= "<?= " ?>Html::resetButton(<?= $generator->generateString('Reset') ?>, ['class' => 'btn btn-default']) ?>
</div>

<?= "<?php " ?>ActiveForm::end(); ?>

</div>
Loading

0 comments on commit 046a2f7

Please sign in to comment.