Commit edfa67b1f29a9f5565b542286b3ceee49fa083dd

Authored by Mihail
1 parent 400e8b29

add delete price functional (not tested yet)

backend/components/FieldEditor/FieldEditor.php
1 1 <?php
2   -namespace backend\components;
3   -use common\models\Fields;
  2 +namespace backend\components\FieldEditor;
  3 +use common\models\DetailsCriteria;
4 4 use yii\base\Widget;
5 5  
6 6  
7 7 class FieldEditor extends Widget
8 8 {
9   - public $item_id;
  9 + public $name;
  10 + public $brand;
10 11 public $model;
11 12 public $template;
12 13  
... ... @@ -19,10 +20,10 @@ class FieldEditor extends Widget
19 20  
20 21 public function run()
21 22 {
22   - if($this->item_id && $this->model){
  23 + if($this->name && $this->brand && $this->model){
23 24 $widgetData = $this->findModel();
24 25 } else {
25   - $widgetData= [new Fields()];
  26 + $widgetData= [new DetailsCriteria()];
26 27 }
27 28  
28 29  
... ... @@ -31,12 +32,12 @@ class FieldEditor extends Widget
31 32  
32 33 protected function findModel()
33 34 {
34   - if (($model = Fields::find()->where(['table_id'=>$this->item_id, 'table_name'=>$this->model, 'field_type'=>$this->template])->all()) !== null) {
  35 + if (($model = DetailsCriteria::find()->where(['name'=>$this->name, 'brand'=>$this->brand])->all()) !== null) {
35 36  
36 37 return $model;
37 38  
38 39 } else {
39   - return [new Fields()];
  40 + return [new DetailsCriteria()];
40 41 }
41 42 }
42 43 }
43 44 \ No newline at end of file
... ...
backend/components/FieldEditor/views/price_field.php deleted
1   -<?php
2   -use yii\helpers\Html;
3   -?>
4   -<div class="price_fields_result">
5   - <?php $i=0; foreach ($model as $field):?>
6   - <?= Html::beginTag('div',['class'=>'form-group'])?>
7   - <input type="text" placeholder="Описание" class="form-control" value="<?= $field->field_name ?>" name="Fields[price][<?=$i?>][description]" />
8   - <input type="text" placeholder="Цена" class="form-control" value="<?= $field->value ?>" name="Fields[price][<?=$i++?>][value]" />
9   - <span data-id="<?= $field->id ?>" title="удалить" class="glyphicon glyphicon-trash delete-field-item"></span>
10   - <?= Html::endTag('div')?>
11   - <?php endforeach; ?>
12   -</div>
13   -<p class="btn btn-success add_price_field">Добавить поле</p>
14   -
15   -
16   -<script>
17   - $( document ).ready(function(){
18   - var start_i = <?=$i?>;
19   - $('.add_price_field').click(function(){
20   - var block = $('.price_fields_result');
21   - var sub_block = '<div class="form-group">'+
22   - '<input type="text" placeholder="Описание" class="form-control" value="" name="Fields[price]['+ start_i +'][description]">'+
23   - '<input type="text" placeholder="Цена" class="form-control" value="" name="Fields[price]['+ start_i++ +'][value]">'+
24   - '<span data-id="none" title="удалить" class="glyphicon glyphicon-trash delete-field-item"></span>'+
25   - '<div>';
26   - block.append(sub_block);
27   -
28   - });
29   - });
30   -</script>
31 0 \ No newline at end of file
backend/controllers/CheckPriceController.php
1 1 <?php
2 2 namespace backend\controllers;
3 3  
  4 +use backend\models\ImportersCheckPriceSearch;
  5 +use common\components\PriceWriter;
  6 +use common\models\DetailsCurrency;
4 7 use Yii;
5 8 use yii\bootstrap\Modal;
6 9 use yii\data\ActiveDataProvider;
... ... @@ -62,15 +65,14 @@ class CheckPriceController extends BaseController
62 65 public function actionIndex()
63 66 {
64 67 //$query = (new Query())->select('*')->from('{{%importer_files}}')->where(['not', ['time_end' => null]])->orderBy(['upload_time' => SORT_DESC]);
65   - $query = Importers::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]);
66   - $provider = new ActiveDataProvider([
67   - 'query' => $query,
68   - 'pagination' => [
69   - 'pageSize' => 10,
70   - ],
71   - ]);
  68 +
  69 + $searchModel = new ImportersCheckPriceSearch();
  70 + $provider = $searchModel->search(Yii::$app->request->queryParams);
  71 +
  72 +
72 73 return $this->render('index',
73 74 [
  75 + 'searchModel' => $searchModel,
74 76 'dataProvider' => $provider,
75 77 ]);
76 78 }
... ... @@ -79,7 +81,8 @@ class CheckPriceController extends BaseController
79 81 public function actionView ($id, $date_update)
80 82 {
81 83  
82   - $query = Details::find()->where(['IMPORT_ID' => $id, 'timestamp' => $date_update])->limit(20);
  84 + $query = DetailsCurrency::find()->where(['IMPORT_ID' => $id, 'timestamp' => $date_update])->limit(100);
  85 +
83 86  
84 87 $importer = Importers::findOne($id)->name;
85 88 $date = Yii::$app->formatter->asDate( $date_update, 'yyyy-MM-dd' );
... ... @@ -97,4 +100,26 @@ class CheckPriceController extends BaseController
97 100 ]);
98 101 }
99 102  
  103 + public function actionDelete ($id, $update_date)
  104 + {
  105 +
  106 + $price_writer = new PriceWriter();
  107 + $price_writer->setConfiguration(['importer_id' => $id,'update_date' => $update_date]);
  108 +
  109 + $price_writer->deletePriceFromDB();
  110 +
  111 + $query = Importers::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]);
  112 + $provider = new ActiveDataProvider([
  113 + 'query' => $query,
  114 + 'pagination' => [
  115 + 'pageSize' => 10,
  116 + ],
  117 + ]);
  118 +
  119 + return $this->renderAjax('index',
  120 + [
  121 + 'dataProvider' => $provider,
  122 + ]);
  123 +
  124 + }
100 125 }
... ...
backend/controllers/DetailsDescriptionController.php
... ... @@ -43,30 +43,19 @@ class DetailsDescriptionController extends BaseController
43 43 ]);
44 44 }
45 45  
46   -
47   -
48 46 /**
49   - * Updates an existing DetailsDescription model.
50   - * If update is successful, the browser will be redirected to the 'view' page.
  47 + * Displays a single DetailsDescription model.
51 48 * @param string $name
52 49 * @param string $brand
53 50 * @return mixed
54 51 */
55   - public function actionUpdate($name, $brand)
  52 + public function actionView($name, $brand)
56 53 {
57   - $model = $this->findModel($name, $brand);
58   -
59   - if ($model->load(Yii::$app->request->post()) && $model->save()) {
60   - return $this->redirect(['view', 'name' => $model->name, 'brand' => $model->brand]);
61   - } else {
62   - return $this->render('update', [
63   - 'model' => $model,
64   - ]);
65   - }
  54 + return $this->render('view', [
  55 + 'model' => $this->findModel($name, $brand),
  56 + ]);
66 57 }
67 58  
68   -
69   -
70 59 /**
71 60 * Finds the DetailsDescription model based on its primary key value.
72 61 * If the model is not found, a 404 HTTP exception will be thrown.
... ...
backend/controllers/ParserController.php
... ... @@ -193,10 +193,10 @@ class ParserController extends BaseController
193 193  
194 194 // запустим специальный класс который запишет данные в таблицы связанные с прайсами
195 195 $writer = new PriceWriter();
196   - $writer->configuration = $configuration;
197   - $writer->data = $data;
198   - $writer->mode = 0; //web-режим
199   - if ( $writer->writeDataToDB() ) {
  196 + $writer->setConfiguration( $configuration );
  197 + $writer->setData($data);
  198 + $writer->setMode(0); //web-режим
  199 + if ( $writer->writePriceToDB() ) {
200 200  
201 201 $configuration['success'] = true;
202 202 // все прошло успешно - очищаем кеш
... ...
backend/models/Details.php
... ... @@ -91,18 +91,15 @@ class Details extends BaseActiveRecord
91 91 * @param $importer_id - (int) - идентификатор поставщика у которого будет сперва удалены прайсы а потом вставлены из массива $data
92 92 * @throws \yii\db\Exception
93 93 */
94   - public function ManualInsert($data, $importer_id)
  94 + public function manualInsert($data, $importer_id)
95 95 {
96 96 if ($this->delete_price) {
97 97 // запустим пакетное удаление всех прайсов поставщика
98   - do {
99   - $query = Yii::$app->db->createCommand()->delete(self::tableName(), "IMPORT_ID = {$importer_id}")->sql . ' Limit ' . $this::BATCH;
100   - $res = Yii::$app->db->createCommand($query)->execute();
101   - } while ($res);
102   -
103   - }
  98 + $conditions = "IMPORT_ID = {$importer_id}";
  99 + $this->manualDelete( $conditions );
104 100  
105   - $this->ManualInsertWithUpdate($data);
  101 + $this->manualInsertWithUpdate($data);
  102 + }
106 103 }
107 104  
108 105 /**
... ... @@ -110,7 +107,7 @@ class Details extends BaseActiveRecord
110 107 * @param $data - массив вставляемых данный, вставка будет прозводится пакетами размером указанным в константе BATCH
111 108 * @throws \yii\db\Exception
112 109 */
113   - private function ManualInsertWithUpdate($data)
  110 + private function manualInsertWithUpdate($data)
114 111 {
115 112 $table_name = self::tableName();
116 113 $keys_arr = array_keys($data[0]);
... ... @@ -141,4 +138,18 @@ class Details extends BaseActiveRecord
141 138 }
142 139 }
143 140  
  141 + public function manualDelete( $conditions )
  142 + {
  143 + do {
  144 + $query = Yii::$app->db->createCommand()->delete(self::tableName(),$conditions )->sql . ' Limit ' . $this::BATCH;
  145 + try {
  146 + $res = Yii::$app->db->createCommand($query)->execute();
  147 + } catch (\Exception $e) {
  148 + throw new \ErrorException('Ошибка удаления товаров '.$e->getMessage());
  149 + }
  150 + } while ($res);
  151 +
  152 + return true;
  153 + }
  154 +
144 155 }
... ...
backend/models/ImportersCheckPriceSearch.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\models;
  4 +
  5 +use Yii;
  6 +use yii\base\Model;
  7 +use yii\data\ActiveDataProvider;
  8 +use backend\models\Importers;
  9 +
  10 +/**
  11 + * ImportersSearch represents the model behind the search form about `backend\models\Importers`.
  12 + */
  13 +class ImportersCheckPriceSearch extends Importers
  14 +{
  15 + /**
  16 + * @inheritdoc
  17 + */
  18 +
  19 + public $date_to;
  20 +
  21 + public function rules()
  22 + {
  23 +
  24 + return [
  25 + [['price_date_update', 'date_to'], 'string', 'max' => 10],
  26 + ];
  27 +
  28 +
  29 + }
  30 +
  31 + /**
  32 + * @inheritdoc
  33 + */
  34 + public function scenarios()
  35 + {
  36 + // bypass scenarios() implementation in the parent class
  37 + return Model::scenarios();
  38 + }
  39 +
  40 + /**
  41 + * Creates data provider instance with search query applied
  42 + *
  43 + * @param array $params
  44 + *
  45 + * @return ActiveDataProvider
  46 + */
  47 + public function search($params)
  48 + {
  49 +
  50 + $query = Importers::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]);
  51 + $provider = new ActiveDataProvider([
  52 + 'query' => $query,
  53 + 'pagination' => [
  54 + 'pageSize' => 10,
  55 + ],
  56 + ]);
  57 +
  58 +
  59 + $this->load($params);
  60 +
  61 + if (!$this->validate()) {
  62 + // uncomment the following line if you do not want to return any records when validation fails
  63 + // $query->where('0=1');
  64 + return $provider;
  65 + }
  66 +
  67 + if($this->price_date_update !== null || $this->date_to !== null){
  68 + $date_from = mktime(0,0,0,(int)substr($this->price_date_update,4,2),(int)substr($this->price_date_update,1,2),(int)substr($this->price_date_update,7,4));
  69 + $date_to = mktime(23,59,59,(int)substr($this->date_to,4,2),(int)substr($this->date_to,1,2),(int)substr($this->date_to,7,4));
  70 +
  71 + $query->andFilterWhere([
  72 + 'between', 'price_date_update', $date_from, $date_to
  73 + ]);
  74 + }
  75 +
  76 + return $provider;
  77 + }
  78 +}
... ...
backend/views/check-price/index.php
... ... @@ -24,12 +24,13 @@ Pjax::begin([&#39;id&#39; =&gt; &#39;gridViewContent&#39;]);
24 24  
25 25  
26 26 <?= GridView::widget(['dataProvider' => $dataProvider,
  27 + 'filterModel' => $searchModel,
27 28 'columns' => [
28 29 ['class' => SerialColumn::className()],
29 30  
30 31 ['content' => function ($model) {
31 32 $url = Url::to(['view', 'id' => $model->id, 'date_update' => $model->price_date_update]);
32   - return Html::a('<span class="glyphicon glyphicon-remove"> Просмотреть </span>', '#', [
  33 + return Html::a('<span class="glyphicon glyphicon-eye-open"> </span>', '#', [
33 34 'class' => 'modalButton',
34 35 'value' => $url,
35 36 ]);
... ... @@ -44,7 +45,17 @@ Pjax::begin([&#39;id&#39; =&gt; &#39;gridViewContent&#39;]);
44 45 ],
45 46  
46 47 ['label' => 'Дата обновления',
47   - 'attribute' => 'price_date_update'],
  48 + 'attribute' => 'price_date_update',
  49 + 'filter' => \kartik\date\DatePicker::widget([
  50 + 'model' =>$searchModel,
  51 + 'language' =>'ru',
  52 + 'size' =>'xs',
  53 + 'separator' =>'по',
  54 + 'attribute' => 'price_date_update',
  55 + 'type' => \kartik\date\DatePicker::TYPE_RANGE,
  56 + 'attribute2' => 'date_to',
  57 + ]),
  58 + ],
48 59  
49 60 ['label' => 'Кол-во дней',
50 61 'value' => function ($data) {
... ... @@ -61,6 +72,14 @@ Pjax::begin([&#39;id&#39; =&gt; &#39;gridViewContent&#39;]);
61 72 return $quo_days;
62 73 }
63 74 ],
  75 + ['content' => function ($model) {
  76 + $url = Url::to(['delete', 'id' => $model->id, 'date_update' => $model->price_date_update]);
  77 + return Html::a('<span class="glyphicon glyphicon-trash"> </span>', '#', [
  78 + 'class' => 'modalButton',
  79 + 'value' => $url,
  80 + ]);
  81 + },
  82 + ],
64 83 ]
65 84 ]); ?>
66 85  
... ...
backend/views/check-price/view.php
... ... @@ -17,7 +17,23 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
17 17 <h1><?= Html::encode($this->title) ?></h1>
18 18  
19 19 <?= GridView::widget( ['dataProvider' => $dataProvider,
20   -
  20 + 'columns' => [
  21 + ['class' => 'yii\grid\SerialColumn'],
  22 + 'FULL_ARTICLE',
  23 + 'ARTICLE',
  24 + 'BRAND',
  25 + 'DESCR',
  26 + 'BOX',
  27 + 'ADD_BOX',
  28 + 'GROUP',
  29 + 'name',
  30 + ['attribute' => 'PRICE',
  31 + 'value' => function($data) {
  32 + return \Yii::$app->formatter->asDecimal($data->PRICE);
  33 + }
  34 + ],
  35 +
  36 + ],
21 37 ] );
22 38  
23 39  
... ...
backend/views/details-description/index.php
... ... @@ -7,7 +7,7 @@ use yii\grid\GridView;
7 7 /* @var $searchModel common\models\DetailsDescriptionSearch */
8 8 /* @var $dataProvider yii\data\ActiveDataProvider */
9 9  
10   -$this->title = Yii::t('app', 'Details Descriptions');
  10 +$this->title = Yii::t('app', 'Карточки товаров');
11 11 $this->params['breadcrumbs'][] = $this->title;
12 12 ?>
13 13 <div class="details-description-index">
... ... @@ -15,31 +15,16 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
15 15 <h1><?= Html::encode($this->title) ?></h1>
16 16 <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
17 17  
18   - <p>
19   - <?= Html::a(Yii::t('app', 'Create Details Description'), ['create'], ['class' => 'btn btn-success']) ?>
20   - </p>
21 18  
22 19 <?= GridView::widget([
23 20 'dataProvider' => $dataProvider,
24 21 'filterModel' => $searchModel,
25 22 'columns' => [
26 23 ['class' => 'yii\grid\SerialColumn'],
27   -
28   - 'id',
29 24 'name',
30 25 'brand',
31   - 'tecdoc_id',
32   - 'tecdoc_article',
33   - // 'description',
34   - // 'tecdoc_description',
35   - // 'supplier_description',
36   - // 'article',
37   - // 'image',
38   - // 'tecdoc_image',
39   - // 'category_id',
40   - // 'timestamp',
41   -
42   - ['class' => 'yii\grid\ActionColumn'],
  26 + ['class' => 'yii\grid\ActionColumn',
  27 + 'template' => '{view}'],
43 28 ],
44 29 ]); ?>
45 30  
... ...
backend/views/details-description/view.php
... ... @@ -6,7 +6,7 @@ use yii\widgets\DetailView;
6 6 /* @var $this yii\web\View */
7 7 /* @var $model common\models\DetailsDescription */
8 8  
9   -$this->title = $model->name;
  9 +$this->title = 'Карточка товара - ' . $model->name;
10 10 $this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Details Descriptions'), 'url' => ['index']];
11 11 $this->params['breadcrumbs'][] = $this->title;
12 12 ?>
... ... @@ -14,21 +14,10 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
14 14  
15 15 <h1><?= Html::encode($this->title) ?></h1>
16 16  
17   - <p>
18   - <?= Html::a(Yii::t('app', 'Update'), ['update', 'name' => $model->name, 'brand' => $model->brand], ['class' => 'btn btn-primary']) ?>
19   - <?= Html::a(Yii::t('app', 'Delete'), ['delete', 'name' => $model->name, 'brand' => $model->brand], [
20   - 'class' => 'btn btn-danger',
21   - 'data' => [
22   - 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'),
23   - 'method' => 'post',
24   - ],
25   - ]) ?>
26   - </p>
27 17  
28 18 <?= DetailView::widget([
29 19 'model' => $model,
30 20 'attributes' => [
31   - 'id',
32 21 'name',
33 22 'brand',
34 23 'tecdoc_id',
... ... @@ -40,8 +29,11 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
40 29 'image',
41 30 'tecdoc_image',
42 31 'category_id',
43   - 'timestamp',
44 32 ],
45 33 ]) ?>
46 34  
  35 + <fieldset>
  36 + <legend>Характеристики товара</legend>
  37 + <?= \backend\components\FieldEditor\FieldEditor::widget(['template'=>'options','name'=> $model->name, 'brand'=> $model->brand,'model'=>'DetailsDescription']); ?>
  38 + </fieldset>
47 39 </div>
... ...
backend/views/layouts/column.php
... ... @@ -311,7 +311,7 @@ $this-&gt;beginContent(&#39;@app/views/layouts/main.php&#39;);
311 311 ],
312 312 ['label' => 'Справочник', 'url' => ['#'], 'items' => [
313 313 ['label' => 'Замены брендов', 'url' => ['brands-replace/index']],
314   - ['label' => 'Карточки товаров', 'url' => ['#']],
  314 + ['label' => 'Карточки товаров', 'url' => ['details-description/index']],
315 315 ['label' => 'Товары поставщиков', 'url' => ['details/index']],
316 316 ['label' => 'Кроссы', 'url' => ['details-crosses/index']],
317 317 ['label' => 'Бренды', 'url' => ['brands/index']],
... ...
common/components/PriceWriter.php
... ... @@ -25,24 +25,50 @@ class PriceWriter
25 25 /**
26 26 * @var - int - 0 - интерактивный режим, 1 - консольный
27 27 */
28   - public $mode;
  28 + protected $mode;
29 29  
30 30 /**
31 31 * @var - массив с настройками записи
32 32 */
33   - public $configuration;
  33 + protected $configuration;
34 34  
35 35 /**
36 36 * @var - массив с данными которые нужно записать
37 37 */
38   - public $data;
  38 + protected $data;
39 39  
40 40 function __construct()
41 41 {
42 42 set_time_limit(300);
43 43 }
44 44  
45   - public function writeDataToDB()
  45 + /**
  46 + * @param mixed $mode
  47 + */
  48 + public function setMode($mode)
  49 + {
  50 + $this->mode = $mode;
  51 + }
  52 +
  53 + /**
  54 + * @param mixed $configuration
  55 + */
  56 + public function setConfiguration($configuration)
  57 + {
  58 + $this->configuration = $configuration;
  59 + }
  60 +
  61 + /**
  62 + * @param mixed $data
  63 + */
  64 + public function setData($data)
  65 + {
  66 + $this->data = $data;
  67 + }
  68 +
  69 +
  70 +
  71 + public function writePriceToDB()
46 72 {
47 73 // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles)
48 74 // id загруженного файла получим из конфигурации
... ... @@ -61,14 +87,14 @@ class PriceWriter
61 87 if ($this->mode == 0) {
62 88 // преобразуем числовые значения
63 89 foreach ($this->data as &$row) {
64   - if(isset( $row['PRICE'] ))
65   - $row['PRICE'] = \Yii::$app->converter->convertTo('float',$row['PRICE']);
  90 + if (isset($row['PRICE']))
  91 + $row['PRICE'] = \Yii::$app->converter->convertTo('float', $row['PRICE']);
66 92  
67   - if(isset( $row['BOX'] ))
68   - $row['BOX'] = \Yii::$app->converter->convertTo('integer',$row['BOX']);
  93 + if (isset($row['BOX']))
  94 + $row['BOX'] = \Yii::$app->converter->convertTo('integer', $row['BOX']);
69 95 // присвоим полный артикул
70 96  
71   - if( isset( $row['ARTICLE'] ) ) {
  97 + if (isset($row['ARTICLE'])) {
72 98  
73 99 $row['FULL_ARTICLE'] = $row['ARTICLE'];
74 100  
... ... @@ -81,26 +107,27 @@ class PriceWriter
81 107 }
82 108  
83 109 if (isset($row['ADD_BOX']))
84   - $row['ADD_BOX'] = \Yii::$app->converter->convertTo( 'integer', $row['ADD_BOX'] );
  110 + $row['ADD_BOX'] = \Yii::$app->converter->convertTo('integer', $row['ADD_BOX']);
85 111  
86 112 // проверим все ли обязательные колонки были указаны пользователем
87 113 $details_model->load(['Details' => $row]);
88 114 if (!$details_model->validate())
89   - $details_model->throwStringErrorException( key($this->data) );
  115 + $details_model->throwStringErrorException(key($this->data));
90 116  
91 117 }
92 118 }
93 119  
94 120 // дополним данные значением импортера и даты обновления цены
95   - $this->data = CustomArrayHelper::addColumns( $this->data, ['IMPORT_ID' => $this->configuration['importer_id'], 'timestamp' => $update_date] );
  121 + $this->data = CustomArrayHelper::addColumns($this->data, ['IMPORT_ID' => $this->configuration['importer_id'], 'timestamp' => $update_date]);
  122 + $transaction = \Yii::$app->db->beginTransaction();
96 123 try {
97 124  
98   - if ( isset($this->configuration['delete_price']) && (int)$this->configuration['delete_price'] ) {
  125 + if (isset($this->configuration['delete_price']) && (int)$this->configuration['delete_price']) {
99 126 $details_model->delete_price = true;
100 127 }
101   - $transaction = \Yii::$app->db->beginTransaction();
  128 +
102 129 //2. попытаемся вставить данные в БД с апдейтом по ключам
103   - $details_model->ManualInsert($this->data, $this->configuration['importer_id']);
  130 + $details_model->manualInsert($this->data, $this->configuration['importer_id']);
104 131  
105 132 // 3. зафиксируем дату конца загрузки в файлах поставщика
106 133 if (!$files_model->save()) {
... ... @@ -114,7 +141,7 @@ class PriceWriter
114 141  
115 142 if (!$imp_model->save()) {
116 143 $transaction->rollBack();
117   - throw new \ErrorException(implode(', ', $imp_model->getErrors()));
  144 + $imp_model->throwStringErrorException();;
118 145 }
119 146 $transaction->commit();
120 147  
... ... @@ -127,5 +154,55 @@ class PriceWriter
127 154 return true;
128 155 }
129 156  
  157 + public function deletePriceFromDB()
  158 + {
  159 +
  160 + $importer_id = '';
  161 + $update_date = '';
  162 +
  163 + if (isset($this->configuration['importer_id']))
  164 + $importer_id = $this->configuration['importer_id'];
  165 +
  166 + if (isset($this->configuration['update_date']))
  167 + $update_date = $this->configuration['update_date'];
  168 +
  169 + if (!$importer_id) {
  170 + throw new \ErrorException('Не указан поставщик прайса для удаления');
  171 + } elseif (!$update_date) {
  172 + throw new \ErrorException('Не указана дата загрузки прайса для удаления');
  173 + }
  174 +
  175 + $transaction = \Yii::$app->db->beginTransaction();
  176 + try {
  177 + // 1. удалим из таблицы файлов поставщика (ImportersFiles)
  178 +
  179 + $rows = ImportersFiles::deleteAll(['importer_id' => $importer_id, 'upload_time' => $update_date]);
  180 + if ($rows != 1) {
  181 + $transaction->rollBack();
  182 + throw new \ErrorException('Ошибка удаления из таблицы фалов поставщиков');
  183 + }
  184 +
  185 + $last_upload_time = ImportersFiles::find(['importer_id' => $importer_id])->orderBy(['upload_time' => SORT_DESC])->one()->upload_time;
  186 +
  187 + // 2. удалим прайс из таблицы товаров (Details)
  188 + $details_model = new Details();
  189 + $conditions = "importer_id = {$importer_id} AND upload_time = {$update_date}";
  190 + $details_model->manualDelete($conditions);
  191 +
  192 + // 3. откатимся до старой даты загрузки в таблице поставщиков
  193 + $imp_model = Importers::findOne( $importer_id );
  194 + $imp_model->price_date_update = $last_upload_time;
  195 +
  196 + if (!$imp_model->save()) {
  197 + $transaction->rollBack();
  198 + $imp_model->throwStringErrorException();
  199 + }
  200 +
  201 + $transaction->commit();
  202 + } catch (ErrorException $e) {
  203 + $transaction->rollBack();
  204 + throw new \ErrorException($e->getMessage());
  205 + }
  206 + }
130 207  
131 208 }
132 209 \ No newline at end of file
... ...
common/models/Details.php deleted
1   -<?php
2   -
3   -namespace common\models;
4   -
5   -use Yii;
6   -
7   -/**
8   - * This is the model class for table "w_details".
9   - *
10   - * @property integer $ID
11   - * @property integer $IMPORT_ID
12   - * @property string $BRAND
13   - * @property string $ARTICLE
14   - * @property string $FULL_ARTICLE
15   - * @property double $PRICE
16   - * @property string $DESCR
17   - * @property integer $BOX
18   - * @property integer $ADD_BOX
19   - * @property string $GROUP
20   - * @property string $timestamp
21   - */
22   -class Details extends \yii\db\ActiveRecord
23   -{
24   - /**
25   - * @inheritdoc
26   - */
27   - public static function tableName()
28   - {
29   - return 'w_details';
30   - }
31   -
32   - /**
33   - * @inheritdoc
34   - */
35   - public function rules()
36   - {
37   - return [
38   - [['IMPORT_ID', 'BRAND', 'ARTICLE', 'FULL_ARTICLE', 'PRICE', 'DESCR', 'BOX'], 'required'],
39   - [['IMPORT_ID', 'BOX', 'ADD_BOX'], 'integer'],
40   - [['PRICE'], 'number'],
41   - [['timestamp'], 'safe'],
42   - [['BRAND', 'ARTICLE'], 'string', 'max' => 100],
43   - [['FULL_ARTICLE'], 'string', 'max' => 150],
44   - [['DESCR', 'GROUP'], 'string', 'max' => 200]
45   - ];
46   - }
47   -
48   - /**
49   - * @inheritdoc
50   - */
51   - public function attributeLabels()
52   - {
53   - return [
54   - 'ID' => 'ID',
55   - 'IMPORT_ID' => 'ПОСТАВЩИК',
56   - 'BRAND' => 'БРЕНД',
57   - 'ARTICLE' => 'АРТИКУЛ',
58   - 'FULL_ARTICLE' => 'ПОЛНЫЙ АРТИКУЛ',
59   - 'PRICE' => 'ЦЕНА',
60   - 'DESCR' => 'ОПИСАНИЕ',
61   - 'BOX' => 'НАЛИЧИЕ',
62   - 'ADD_BOX' => 'В ПУТИ',
63   - 'GROUP' => 'ГРУППА RG',
64   - 'timestamp' => 'Timestamp',
65   - ];
66   - }
67   -}
common/models/DetailsDescription.php
... ... @@ -55,10 +55,10 @@ class DetailsDescription extends \backend\components\base\BaseActiveRecord
55 55 {
56 56 return [
57 57 'id' => Yii::t('app', 'ID'),
58   - 'name' => Yii::t('app', 'Name'),
59   - 'brand' => Yii::t('app', 'Brand'),
  58 + 'name' => Yii::t('app', 'Артикул'),
  59 + 'brand' => Yii::t('app', 'Бренд'),
60 60 'tecdoc_id' => Yii::t('app', 'Tecdoc ID'),
61   - 'tecdoc_article' => Yii::t('app', 'Tecdoc Article'),
  61 + 'tecdoc_article' => Yii::t('app', 'Артикул Текдока'),
62 62 'description' => Yii::t('app', 'Description'),
63 63 'tecdoc_description' => Yii::t('app', 'Tecdoc Description'),
64 64 'supplier_description' => Yii::t('app', 'Supplier Description'),
... ...
composer.lock 0 → 100644
  1 +{
  2 + "_readme": [
  3 + "This file locks the dependencies of your project to a known state",
  4 + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
  5 + "This file is @generated automatically"
  6 + ],
  7 + "hash": "ee02abda5c7b7eca736817c3c0fc97c9",
  8 + "content-hash": "859f6a13927c8412991c47d4b2b7db86",
  9 + "packages": [
  10 + {
  11 + "name": "2amigos/yii2-ckeditor-widget",
  12 + "version": "1.0.4",
  13 + "source": {
  14 + "type": "git",
  15 + "url": "https://github.com/2amigos/yii2-ckeditor-widget.git",
  16 + "reference": "023eb29fedfc3c3121c17688ed237e8688f5eb50"
  17 + },
  18 + "dist": {
  19 + "type": "zip",
  20 + "url": "https://api.github.com/repos/2amigos/yii2-ckeditor-widget/zipball/023eb29fedfc3c3121c17688ed237e8688f5eb50",
  21 + "reference": "023eb29fedfc3c3121c17688ed237e8688f5eb50",
  22 + "shasum": ""
  23 + },
  24 + "require": {
  25 + "yiisoft/yii2": "~2.0.0"
  26 + },
  27 + "require-dev": {
  28 + "phpunit/phpunit": "4.*"
  29 + },
  30 + "type": "yii2-extension",
  31 + "extra": {
  32 + "branch-alias": {
  33 + "dev-master": "1.0-dev"
  34 + },
  35 + "asset-installer-paths": {
  36 + "bower-asset-library": "vendor/bower"
  37 + }
  38 + },
  39 + "autoload": {
  40 + "psr-4": {
  41 + "dosamigos\\ckeditor\\": "src"
  42 + }
  43 + },
  44 + "notification-url": "https://packagist.org/downloads/",
  45 + "license": [
  46 + "BSD-3-Clause"
  47 + ],
  48 + "authors": [
  49 + {
  50 + "name": "2amigOS! Consulting Group",
  51 + "email": "hola@2amigos.us",
  52 + "homepage": "http://2amigos.us",
  53 + "role": "Developer"
  54 + }
  55 + ],
  56 + "description": "CKEditor widget for Yii2.",
  57 + "homepage": "http://yiiwheels.com/extension/ckeditor-widget",
  58 + "keywords": [
  59 + "2amigos",
  60 + "CKEditor",
  61 + "extension",
  62 + "widget",
  63 + "yii",
  64 + "yii 2",
  65 + "yii2"
  66 + ],
  67 + "time": "2015-04-30 12:22:25"
  68 + },
  69 + {
  70 + "name": "artweb/yii2-multiparser",
  71 + "version": "dev-master",
  72 + "source": {
  73 + "type": "git",
  74 + "url": "https://github.com/tsurkanovm/yii-multiparser.git",
  75 + "reference": "735c416d56e4714656cd8ca37070af692439e770"
  76 + },
  77 + "dist": {
  78 + "type": "zip",
  79 + "url": "https://api.github.com/repos/tsurkanovm/yii-multiparser/zipball/735c416d56e4714656cd8ca37070af692439e770",
  80 + "reference": "735c416d56e4714656cd8ca37070af692439e770",
  81 + "shasum": ""
  82 + },
  83 + "require": {
  84 + "yiisoft/yii2": "*"
  85 + },
  86 + "type": "library",
  87 + "autoload": {
  88 + "psr-4": {
  89 + "yii\\multiparser\\": "lib\\"
  90 + }
  91 + },
  92 + "notification-url": "https://packagist.org/downloads/",
  93 + "license": [
  94 + "MIT"
  95 + ],
  96 + "authors": [
  97 + {
  98 + "name": "Mihail Tsurkanov",
  99 + "email": "tsurkanovm@gmail.com",
  100 + "role": "Developer"
  101 + }
  102 + ],
  103 + "description": "This extension provides a Multiparser solution for Yii framework 2.0.",
  104 + "homepage": "https://github.com/tsurkanovm/yii-multiparser.git",
  105 + "keywords": [
  106 + "csv",
  107 + "parser",
  108 + "xlsx",
  109 + "xml",
  110 + "yii2"
  111 + ],
  112 + "time": "2015-11-10 15:55:00"
  113 + },
  114 + {
  115 + "name": "bower-asset/bootstrap",
  116 + "version": "v3.3.5",
  117 + "source": {
  118 + "type": "git",
  119 + "url": "https://github.com/twbs/bootstrap.git",
  120 + "reference": "16b48259a62f576e52c903c476bd42b90ab22482"
  121 + },
  122 + "dist": {
  123 + "type": "zip",
  124 + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/16b48259a62f576e52c903c476bd42b90ab22482",
  125 + "reference": "16b48259a62f576e52c903c476bd42b90ab22482",
  126 + "shasum": ""
  127 + },
  128 + "require": {
  129 + "bower-asset/jquery": ">=1.9.1"
  130 + },
  131 + "type": "bower-asset-library",
  132 + "extra": {
  133 + "bower-asset-main": [
  134 + "less/bootstrap.less",
  135 + "dist/js/bootstrap.js"
  136 + ],
  137 + "bower-asset-ignore": [
  138 + "/.*",
  139 + "_config.yml",
  140 + "CNAME",
  141 + "composer.json",
  142 + "CONTRIBUTING.md",
  143 + "docs",
  144 + "js/tests",
  145 + "test-infra"
  146 + ]
  147 + },
  148 + "license": [
  149 + "MIT"
  150 + ],
  151 + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
  152 + "keywords": [
  153 + "css",
  154 + "framework",
  155 + "front-end",
  156 + "js",
  157 + "less",
  158 + "mobile-first",
  159 + "responsive",
  160 + "web"
  161 + ]
  162 + },
  163 + {
  164 + "name": "bower-asset/jquery",
  165 + "version": "2.1.4",
  166 + "source": {
  167 + "type": "git",
  168 + "url": "https://github.com/jquery/jquery.git",
  169 + "reference": "7751e69b615c6eca6f783a81e292a55725af6b85"
  170 + },
  171 + "dist": {
  172 + "type": "zip",
  173 + "url": "https://api.github.com/repos/jquery/jquery/zipball/7751e69b615c6eca6f783a81e292a55725af6b85",
  174 + "reference": "7751e69b615c6eca6f783a81e292a55725af6b85",
  175 + "shasum": ""
  176 + },
  177 + "require-dev": {
  178 + "bower-asset/qunit": "1.14.0",
  179 + "bower-asset/requirejs": "2.1.10",
  180 + "bower-asset/sinon": "1.8.1",
  181 + "bower-asset/sizzle": "2.1.1-patch2"
  182 + },
  183 + "type": "bower-asset-library",
  184 + "extra": {
  185 + "bower-asset-main": "dist/jquery.js",
  186 + "bower-asset-ignore": [
  187 + "**/.*",
  188 + "build",
  189 + "dist/cdn",
  190 + "speed",
  191 + "test",
  192 + "*.md",
  193 + "AUTHORS.txt",
  194 + "Gruntfile.js",
  195 + "package.json"
  196 + ]
  197 + },
  198 + "license": [
  199 + "MIT"
  200 + ],
  201 + "keywords": [
  202 + "javascript",
  203 + "jquery",
  204 + "library"
  205 + ]
  206 + },
  207 + {
  208 + "name": "bower-asset/jquery.inputmask",
  209 + "version": "3.1.63",
  210 + "source": {
  211 + "type": "git",
  212 + "url": "https://github.com/RobinHerbots/jquery.inputmask.git",
  213 + "reference": "c40c7287eadc31e341ebbf0c02352eb55b9cbc48"
  214 + },
  215 + "dist": {
  216 + "type": "zip",
  217 + "url": "https://api.github.com/repos/RobinHerbots/jquery.inputmask/zipball/c40c7287eadc31e341ebbf0c02352eb55b9cbc48",
  218 + "reference": "c40c7287eadc31e341ebbf0c02352eb55b9cbc48",
  219 + "shasum": ""
  220 + },
  221 + "require": {
  222 + "bower-asset/jquery": ">=1.7"
  223 + },
  224 + "type": "bower-asset-library",
  225 + "extra": {
  226 + "bower-asset-main": [
  227 + "./dist/inputmask/jquery.inputmask.js",
  228 + "./dist/inputmask/jquery.inputmask.extensions.js",
  229 + "./dist/inputmask/jquery.inputmask.date.extensions.js",
  230 + "./dist/inputmask/jquery.inputmask.numeric.extensions.js",
  231 + "./dist/inputmask/jquery.inputmask.phone.extensions.js",
  232 + "./dist/inputmask/jquery.inputmask.regex.extensions.js"
  233 + ],
  234 + "bower-asset-ignore": [
  235 + "**/.*",
  236 + "qunit/",
  237 + "nuget/",
  238 + "tools/",
  239 + "js/",
  240 + "*.md",
  241 + "build.properties",
  242 + "build.xml",
  243 + "jquery.inputmask.jquery.json"
  244 + ]
  245 + },
  246 + "license": [
  247 + "http://opensource.org/licenses/mit-license.php"
  248 + ],
  249 + "description": "jquery.inputmask is a jquery plugin which create an input mask.",
  250 + "keywords": [
  251 + "form",
  252 + "input",
  253 + "inputmask",
  254 + "jquery",
  255 + "mask",
  256 + "plugins"
  257 + ]
  258 + },
  259 + {
  260 + "name": "bower-asset/punycode",
  261 + "version": "v1.3.2",
  262 + "source": {
  263 + "type": "git",
  264 + "url": "https://github.com/bestiejs/punycode.js.git",
  265 + "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3"
  266 + },
  267 + "dist": {
  268 + "type": "zip",
  269 + "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3",
  270 + "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3",
  271 + "shasum": ""
  272 + },
  273 + "type": "bower-asset-library",
  274 + "extra": {
  275 + "bower-asset-main": "punycode.js",
  276 + "bower-asset-ignore": [
  277 + "coverage",
  278 + "tests",
  279 + ".*",
  280 + "component.json",
  281 + "Gruntfile.js",
  282 + "node_modules",
  283 + "package.json"
  284 + ]
  285 + }
  286 + },
  287 + {
  288 + "name": "bower-asset/yii2-pjax",
  289 + "version": "v2.0.5",
  290 + "source": {
  291 + "type": "git",
  292 + "url": "https://github.com/yiisoft/jquery-pjax.git",
  293 + "reference": "6818718408086db6bdcf33649cecb86b6b4f9b67"
  294 + },
  295 + "dist": {
  296 + "type": "zip",
  297 + "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/6818718408086db6bdcf33649cecb86b6b4f9b67",
  298 + "reference": "6818718408086db6bdcf33649cecb86b6b4f9b67",
  299 + "shasum": ""
  300 + },
  301 + "require": {
  302 + "bower-asset/jquery": ">=1.8"
  303 + },
  304 + "type": "bower-asset-library",
  305 + "extra": {
  306 + "bower-asset-main": "./jquery.pjax.js",
  307 + "bower-asset-ignore": [
  308 + ".travis.yml",
  309 + "Gemfile",
  310 + "Gemfile.lock",
  311 + "vendor/",
  312 + "script/",
  313 + "test/"
  314 + ]
  315 + },
  316 + "license": [
  317 + "MIT"
  318 + ]
  319 + },
  320 + {
  321 + "name": "cebe/markdown",
  322 + "version": "1.1.0",
  323 + "source": {
  324 + "type": "git",
  325 + "url": "https://github.com/cebe/markdown.git",
  326 + "reference": "54a2c49de31cc44e864ebf0500a35ef21d0010b2"
  327 + },
  328 + "dist": {
  329 + "type": "zip",
  330 + "url": "https://api.github.com/repos/cebe/markdown/zipball/54a2c49de31cc44e864ebf0500a35ef21d0010b2",
  331 + "reference": "54a2c49de31cc44e864ebf0500a35ef21d0010b2",
  332 + "shasum": ""
  333 + },
  334 + "require": {
  335 + "lib-pcre": "*",
  336 + "php": ">=5.4.0"
  337 + },
  338 + "require-dev": {
  339 + "cebe/indent": "*",
  340 + "facebook/xhprof": "*@dev",
  341 + "phpunit/phpunit": "4.1.*"
  342 + },
  343 + "bin": [
  344 + "bin/markdown"
  345 + ],
  346 + "type": "library",
  347 + "extra": {
  348 + "branch-alias": {
  349 + "dev-master": "1.1.x-dev"
  350 + }
  351 + },
  352 + "autoload": {
  353 + "psr-4": {
  354 + "cebe\\markdown\\": ""
  355 + }
  356 + },
  357 + "notification-url": "https://packagist.org/downloads/",
  358 + "license": [
  359 + "MIT"
  360 + ],
  361 + "authors": [
  362 + {
  363 + "name": "Carsten Brandt",
  364 + "email": "mail@cebe.cc",
  365 + "homepage": "http://cebe.cc/",
  366 + "role": "Creator"
  367 + }
  368 + ],
  369 + "description": "A super fast, highly extensible markdown parser for PHP",
  370 + "homepage": "https://github.com/cebe/markdown#readme",
  371 + "keywords": [
  372 + "extensible",
  373 + "fast",
  374 + "gfm",
  375 + "markdown",
  376 + "markdown-extra"
  377 + ],
  378 + "time": "2015-03-06 05:28:07"
  379 + },
  380 + {
  381 + "name": "codeception/codeception",
  382 + "version": "2.1.4",
  383 + "source": {
  384 + "type": "git",
  385 + "url": "https://github.com/Codeception/Codeception.git",
  386 + "reference": "6a812e8a0d1b1db939a29b4dc14cb398b21b6112"
  387 + },
  388 + "dist": {
  389 + "type": "zip",
  390 + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/6a812e8a0d1b1db939a29b4dc14cb398b21b6112",
  391 + "reference": "6a812e8a0d1b1db939a29b4dc14cb398b21b6112",
  392 + "shasum": ""
  393 + },
  394 + "require": {
  395 + "ext-json": "*",
  396 + "ext-mbstring": "*",
  397 + "facebook/webdriver": ">=1.0.1",
  398 + "guzzlehttp/guzzle": ">=4.1.4 <7.0",
  399 + "guzzlehttp/psr7": "~1.0",
  400 + "php": ">=5.4.0",
  401 + "phpunit/phpunit": "~4.8.0",
  402 + "symfony/browser-kit": "~2.4",
  403 + "symfony/console": "~2.4",
  404 + "symfony/css-selector": "~2.4",
  405 + "symfony/dom-crawler": "~2.4,!=2.4.5",
  406 + "symfony/event-dispatcher": "~2.4",
  407 + "symfony/finder": "~2.4",
  408 + "symfony/yaml": "~2.4"
  409 + },
  410 + "require-dev": {
  411 + "codeception/specify": "~0.3",
  412 + "facebook/php-sdk-v4": "~4.0",
  413 + "flow/jsonpath": "~0.2",
  414 + "monolog/monolog": "~1.8",
  415 + "pda/pheanstalk": "~2.0",
  416 + "videlalvaro/php-amqplib": "~2.4"
  417 + },
  418 + "suggest": {
  419 + "codeception/phpbuiltinserver": "Extension to start and stop PHP built-in web server for your tests",
  420 + "codeception/specify": "BDD-style code blocks",
  421 + "codeception/verify": "BDD-style assertions",
  422 + "monolog/monolog": "Log test steps",
  423 + "phpseclib/phpseclib": "Extension required to use the SFTP option in the FTP Module."
  424 + },
  425 + "bin": [
  426 + "codecept"
  427 + ],
  428 + "type": "library",
  429 + "extra": {
  430 + "branch-alias": []
  431 + },
  432 + "autoload": {
  433 + "psr-4": {
  434 + "Codeception\\": "src\\Codeception",
  435 + "Codeception\\Extension\\": "ext"
  436 + }
  437 + },
  438 + "notification-url": "https://packagist.org/downloads/",
  439 + "license": [
  440 + "MIT"
  441 + ],
  442 + "authors": [
  443 + {
  444 + "name": "Michael Bodnarchuk",
  445 + "email": "davert@mail.ua",
  446 + "homepage": "http://codegyre.com"
  447 + }
  448 + ],
  449 + "description": "BDD-style testing framework",
  450 + "homepage": "http://codeception.com/",
  451 + "keywords": [
  452 + "BDD",
  453 + "TDD",
  454 + "acceptance testing",
  455 + "functional testing",
  456 + "unit testing"
  457 + ],
  458 + "time": "2015-11-12 03:57:06"
  459 + },
  460 + {
  461 + "name": "doctrine/instantiator",
  462 + "version": "1.0.5",
  463 + "source": {
  464 + "type": "git",
  465 + "url": "https://github.com/doctrine/instantiator.git",
  466 + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
  467 + },
  468 + "dist": {
  469 + "type": "zip",
  470 + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
  471 + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
  472 + "shasum": ""
  473 + },
  474 + "require": {
  475 + "php": ">=5.3,<8.0-DEV"
  476 + },
  477 + "require-dev": {
  478 + "athletic/athletic": "~0.1.8",
  479 + "ext-pdo": "*",
  480 + "ext-phar": "*",
  481 + "phpunit/phpunit": "~4.0",
  482 + "squizlabs/php_codesniffer": "~2.0"
  483 + },
  484 + "type": "library",
  485 + "extra": {
  486 + "branch-alias": {
  487 + "dev-master": "1.0.x-dev"
  488 + }
  489 + },
  490 + "autoload": {
  491 + "psr-4": {
  492 + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
  493 + }
  494 + },
  495 + "notification-url": "https://packagist.org/downloads/",
  496 + "license": [
  497 + "MIT"
  498 + ],
  499 + "authors": [
  500 + {
  501 + "name": "Marco Pivetta",
  502 + "email": "ocramius@gmail.com",
  503 + "homepage": "http://ocramius.github.com/"
  504 + }
  505 + ],
  506 + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
  507 + "homepage": "https://github.com/doctrine/instantiator",
  508 + "keywords": [
  509 + "constructor",
  510 + "instantiate"
  511 + ],
  512 + "time": "2015-06-14 21:17:01"
  513 + },
  514 + {
  515 + "name": "ezyang/htmlpurifier",
  516 + "version": "v4.6.0",
  517 + "source": {
  518 + "type": "git",
  519 + "url": "https://github.com/ezyang/htmlpurifier.git",
  520 + "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd"
  521 + },
  522 + "dist": {
  523 + "type": "zip",
  524 + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/6f389f0f25b90d0b495308efcfa073981177f0fd",
  525 + "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd",
  526 + "shasum": ""
  527 + },
  528 + "require": {
  529 + "php": ">=5.2"
  530 + },
  531 + "type": "library",
  532 + "autoload": {
  533 + "psr-0": {
  534 + "HTMLPurifier": "library/"
  535 + },
  536 + "files": [
  537 + "library/HTMLPurifier.composer.php"
  538 + ]
  539 + },
  540 + "notification-url": "https://packagist.org/downloads/",
  541 + "license": [
  542 + "LGPL"
  543 + ],
  544 + "authors": [
  545 + {
  546 + "name": "Edward Z. Yang",
  547 + "email": "admin@htmlpurifier.org",
  548 + "homepage": "http://ezyang.com"
  549 + }
  550 + ],
  551 + "description": "Standards compliant HTML filter written in PHP",
  552 + "homepage": "http://htmlpurifier.org/",
  553 + "keywords": [
  554 + "html"
  555 + ],
  556 + "time": "2013-11-30 08:25:19"
  557 + },
  558 + {
  559 + "name": "facebook/webdriver",
  560 + "version": "1.0.4",
  561 + "source": {
  562 + "type": "git",
  563 + "url": "https://github.com/facebook/php-webdriver.git",
  564 + "reference": "a6e209a309bf7cd71acf15476f40b11a25d5a79d"
  565 + },
  566 + "dist": {
  567 + "type": "zip",
  568 + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/a6e209a309bf7cd71acf15476f40b11a25d5a79d",
  569 + "reference": "a6e209a309bf7cd71acf15476f40b11a25d5a79d",
  570 + "shasum": ""
  571 + },
  572 + "require": {
  573 + "php": ">=5.3.19"
  574 + },
  575 + "require-dev": {
  576 + "phpunit/phpunit": "4.6.*"
  577 + },
  578 + "suggest": {
  579 + "phpdocumentor/phpdocumentor": "2.*"
  580 + },
  581 + "type": "library",
  582 + "autoload": {
  583 + "psr-4": {
  584 + "Facebook\\WebDriver\\": "lib/"
  585 + }
  586 + },
  587 + "notification-url": "https://packagist.org/downloads/",
  588 + "license": [
  589 + "Apache-2.0"
  590 + ],
  591 + "description": "A PHP client for WebDriver",
  592 + "homepage": "https://github.com/facebook/php-webdriver",
  593 + "keywords": [
  594 + "facebook",
  595 + "php",
  596 + "selenium",
  597 + "webdriver"
  598 + ],
  599 + "time": "2015-11-03 22:17:22"
  600 + },
  601 + {
  602 + "name": "guzzlehttp/guzzle",
  603 + "version": "6.1.0",
  604 + "source": {
  605 + "type": "git",
  606 + "url": "https://github.com/guzzle/guzzle.git",
  607 + "reference": "66fd14b4d0b8f2389eaf37c5458608c7cb793a81"
  608 + },
  609 + "dist": {
  610 + "type": "zip",
  611 + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/66fd14b4d0b8f2389eaf37c5458608c7cb793a81",
  612 + "reference": "66fd14b4d0b8f2389eaf37c5458608c7cb793a81",
  613 + "shasum": ""
  614 + },
  615 + "require": {
  616 + "guzzlehttp/promises": "~1.0",
  617 + "guzzlehttp/psr7": "~1.1",
  618 + "php": ">=5.5.0"
  619 + },
  620 + "require-dev": {
  621 + "ext-curl": "*",
  622 + "phpunit/phpunit": "~4.0",
  623 + "psr/log": "~1.0"
  624 + },
  625 + "type": "library",
  626 + "extra": {
  627 + "branch-alias": {
  628 + "dev-master": "6.1-dev"
  629 + }
  630 + },
  631 + "autoload": {
  632 + "files": [
  633 + "src/functions_include.php"
  634 + ],
  635 + "psr-4": {
  636 + "GuzzleHttp\\": "src/"
  637 + }
  638 + },
  639 + "notification-url": "https://packagist.org/downloads/",
  640 + "license": [
  641 + "MIT"
  642 + ],
  643 + "authors": [
  644 + {
  645 + "name": "Michael Dowling",
  646 + "email": "mtdowling@gmail.com",
  647 + "homepage": "https://github.com/mtdowling"
  648 + }
  649 + ],
  650 + "description": "Guzzle is a PHP HTTP client library",
  651 + "homepage": "http://guzzlephp.org/",
  652 + "keywords": [
  653 + "client",
  654 + "curl",
  655 + "framework",
  656 + "http",
  657 + "http client",
  658 + "rest",
  659 + "web service"
  660 + ],
  661 + "time": "2015-09-08 17:36:26"
  662 + },
  663 + {
  664 + "name": "guzzlehttp/promises",
  665 + "version": "1.0.3",
  666 + "source": {
  667 + "type": "git",
  668 + "url": "https://github.com/guzzle/promises.git",
  669 + "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea"
  670 + },
  671 + "dist": {
  672 + "type": "zip",
  673 + "url": "https://api.github.com/repos/guzzle/promises/zipball/b1e1c0d55f8083c71eda2c28c12a228d708294ea",
  674 + "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea",
  675 + "shasum": ""
  676 + },
  677 + "require": {
  678 + "php": ">=5.5.0"
  679 + },
  680 + "require-dev": {
  681 + "phpunit/phpunit": "~4.0"
  682 + },
  683 + "type": "library",
  684 + "extra": {
  685 + "branch-alias": {
  686 + "dev-master": "1.0-dev"
  687 + }
  688 + },
  689 + "autoload": {
  690 + "psr-4": {
  691 + "GuzzleHttp\\Promise\\": "src/"
  692 + },
  693 + "files": [
  694 + "src/functions_include.php"
  695 + ]
  696 + },
  697 + "notification-url": "https://packagist.org/downloads/",
  698 + "license": [
  699 + "MIT"
  700 + ],
  701 + "authors": [
  702 + {
  703 + "name": "Michael Dowling",
  704 + "email": "mtdowling@gmail.com",
  705 + "homepage": "https://github.com/mtdowling"
  706 + }
  707 + ],
  708 + "description": "Guzzle promises library",
  709 + "keywords": [
  710 + "promise"
  711 + ],
  712 + "time": "2015-10-15 22:28:00"
  713 + },
  714 + {
  715 + "name": "guzzlehttp/psr7",
  716 + "version": "1.2.1",
  717 + "source": {
  718 + "type": "git",
  719 + "url": "https://github.com/guzzle/psr7.git",
  720 + "reference": "4d0bdbe1206df7440219ce14c972aa57cc5e4982"
  721 + },
  722 + "dist": {
  723 + "type": "zip",
  724 + "url": "https://api.github.com/repos/guzzle/psr7/zipball/4d0bdbe1206df7440219ce14c972aa57cc5e4982",
  725 + "reference": "4d0bdbe1206df7440219ce14c972aa57cc5e4982",
  726 + "shasum": ""
  727 + },
  728 + "require": {
  729 + "php": ">=5.4.0",
  730 + "psr/http-message": "~1.0"
  731 + },
  732 + "provide": {
  733 + "psr/http-message-implementation": "1.0"
  734 + },
  735 + "require-dev": {
  736 + "phpunit/phpunit": "~4.0"
  737 + },
  738 + "type": "library",
  739 + "extra": {
  740 + "branch-alias": {
  741 + "dev-master": "1.0-dev"
  742 + }
  743 + },
  744 + "autoload": {
  745 + "psr-4": {
  746 + "GuzzleHttp\\Psr7\\": "src/"
  747 + },
  748 + "files": [
  749 + "src/functions_include.php"
  750 + ]
  751 + },
  752 + "notification-url": "https://packagist.org/downloads/",
  753 + "license": [
  754 + "MIT"
  755 + ],
  756 + "authors": [
  757 + {
  758 + "name": "Michael Dowling",
  759 + "email": "mtdowling@gmail.com",
  760 + "homepage": "https://github.com/mtdowling"
  761 + }
  762 + ],
  763 + "description": "PSR-7 message implementation",
  764 + "keywords": [
  765 + "http",
  766 + "message",
  767 + "stream",
  768 + "uri"
  769 + ],
  770 + "time": "2015-11-03 01:34:55"
  771 + },
  772 + {
  773 + "name": "imagine/imagine",
  774 + "version": "v0.5.0",
  775 + "source": {
  776 + "type": "git",
  777 + "url": "https://github.com/avalanche123/Imagine.git",
  778 + "reference": "f64ec666baaa800edcbf237db41121a569230709"
  779 + },
  780 + "dist": {
  781 + "type": "zip",
  782 + "url": "https://api.github.com/repos/avalanche123/Imagine/zipball/f64ec666baaa800edcbf237db41121a569230709",
  783 + "reference": "f64ec666baaa800edcbf237db41121a569230709",
  784 + "shasum": ""
  785 + },
  786 + "require": {
  787 + "php": ">=5.3.2"
  788 + },
  789 + "require-dev": {
  790 + "sami/sami": "dev-master"
  791 + },
  792 + "suggest": {
  793 + "ext-gd": "to use the GD implementation",
  794 + "ext-gmagick": "to use the Gmagick implementation",
  795 + "ext-imagick": "to use the Imagick implementation"
  796 + },
  797 + "type": "library",
  798 + "autoload": {
  799 + "psr-0": {
  800 + "Imagine": "lib/"
  801 + }
  802 + },
  803 + "notification-url": "https://packagist.org/downloads/",
  804 + "license": [
  805 + "MIT"
  806 + ],
  807 + "authors": [
  808 + {
  809 + "name": "Bulat Shakirzyanov",
  810 + "email": "mallluhuct@gmail.com",
  811 + "homepage": "http://avalanche123.com"
  812 + }
  813 + ],
  814 + "description": "Image processing for PHP 5.3",
  815 + "homepage": "http://imagine.readthedocs.org/",
  816 + "keywords": [
  817 + "drawing",
  818 + "graphics",
  819 + "image manipulation",
  820 + "image processing"
  821 + ],
  822 + "time": "2013-07-10 17:25:36"
  823 + },
  824 + {
  825 + "name": "kartik-v/php-date-formatter",
  826 + "version": "v1.3.1",
  827 + "source": {
  828 + "type": "git",
  829 + "url": "https://github.com/kartik-v/php-date-formatter.git",
  830 + "reference": "7d3dc3495dd10bd1909c0dfdecd673967019cc21"
  831 + },
  832 + "dist": {
  833 + "type": "zip",
  834 + "url": "https://api.github.com/repos/kartik-v/php-date-formatter/zipball/7d3dc3495dd10bd1909c0dfdecd673967019cc21",
  835 + "reference": "7d3dc3495dd10bd1909c0dfdecd673967019cc21",
  836 + "shasum": ""
  837 + },
  838 + "type": "library",
  839 + "autoload": {
  840 + "psr-4": {
  841 + "kartik\\plugins\\dateformatter\\": ""
  842 + }
  843 + },
  844 + "notification-url": "https://packagist.org/downloads/",
  845 + "license": [
  846 + "BSD-3-Clause"
  847 + ],
  848 + "authors": [
  849 + {
  850 + "name": "Kartik Visweswaran",
  851 + "email": "kartikv2@gmail.com",
  852 + "homepage": "http://www.krajee.com/"
  853 + }
  854 + ],
  855 + "description": "A JQuery datetime formatting and manipulation library using PHP date-time formats in javascript.",
  856 + "homepage": "https://github.com/kartik-v/php-date-formatter",
  857 + "keywords": [
  858 + "date",
  859 + "datetime",
  860 + "formatter",
  861 + "javascript",
  862 + "jquery",
  863 + "php",
  864 + "php-date-formatter.js",
  865 + "time"
  866 + ],
  867 + "time": "2015-06-18 15:14:51"
  868 + },
  869 + {
  870 + "name": "kartik-v/yii2-datecontrol",
  871 + "version": "dev-master",
  872 + "source": {
  873 + "type": "git",
  874 + "url": "https://github.com/kartik-v/yii2-datecontrol.git",
  875 + "reference": "4e858b5cd38130c37739b2f582b66a044f77c95c"
  876 + },
  877 + "dist": {
  878 + "type": "zip",
  879 + "url": "https://api.github.com/repos/kartik-v/yii2-datecontrol/zipball/4e858b5cd38130c37739b2f582b66a044f77c95c",
  880 + "reference": "4e858b5cd38130c37739b2f582b66a044f77c95c",
  881 + "shasum": ""
  882 + },
  883 + "require": {
  884 + "kartik-v/php-date-formatter": ">1.3",
  885 + "kartik-v/yii2-krajee-base": "~1.7"
  886 + },
  887 + "type": "yii2-extension",
  888 + "autoload": {
  889 + "psr-4": {
  890 + "kartik\\datecontrol\\": ""
  891 + }
  892 + },
  893 + "notification-url": "https://packagist.org/downloads/",
  894 + "license": [
  895 + "BSD-3-Clause"
  896 + ],
  897 + "authors": [
  898 + {
  899 + "name": "Kartik Visweswaran",
  900 + "email": "kartikv2@gmail.com",
  901 + "homepage": "http://www.krajee.com/"
  902 + }
  903 + ],
  904 + "description": "Date control module allowing separation of formats for View and Model for Yii Framework 2.0",
  905 + "homepage": "https://github.com/kartik-v/yii2-datecontrol",
  906 + "keywords": [
  907 + "control",
  908 + "date",
  909 + "extension",
  910 + "format",
  911 + "yii",
  912 + "yii2"
  913 + ],
  914 + "time": "2015-07-30 18:30:18"
  915 + },
  916 + {
  917 + "name": "kartik-v/yii2-field-range",
  918 + "version": "v1.3.0",
  919 + "source": {
  920 + "type": "git",
  921 + "url": "https://github.com/kartik-v/yii2-field-range.git",
  922 + "reference": "095d260eecb86ff2e78a70775011cec00a75df98"
  923 + },
  924 + "dist": {
  925 + "type": "zip",
  926 + "url": "https://api.github.com/repos/kartik-v/yii2-field-range/zipball/095d260eecb86ff2e78a70775011cec00a75df98",
  927 + "reference": "095d260eecb86ff2e78a70775011cec00a75df98",
  928 + "shasum": ""
  929 + },
  930 + "require": {
  931 + "kartik-v/yii2-krajee-base": "*"
  932 + },
  933 + "type": "yii2-extension",
  934 + "autoload": {
  935 + "psr-4": {
  936 + "kartik\\field\\": ""
  937 + }
  938 + },
  939 + "notification-url": "https://packagist.org/downloads/",
  940 + "license": [
  941 + "BSD 3-Clause"
  942 + ],
  943 + "authors": [
  944 + {
  945 + "name": "Kartik Visweswaran",
  946 + "email": "kartikv2@gmail.com",
  947 + "homepage": "http://www.krajee.com/"
  948 + }
  949 + ],
  950 + "description": "Easily manage Yii 2 ActiveField ranges (from/to) with Bootstrap 3 addons markup and more",
  951 + "homepage": "https://github.com/kartik-v/yii2-field-range",
  952 + "keywords": [
  953 + "addon",
  954 + "bootstrap",
  955 + "bootstrap 3",
  956 + "date",
  957 + "extension",
  958 + "field-range",
  959 + "from",
  960 + "range",
  961 + "to",
  962 + "widget",
  963 + "yii2"
  964 + ],
  965 + "time": "2014-11-25 08:52:00"
  966 + },
  967 + {
  968 + "name": "kartik-v/yii2-krajee-base",
  969 + "version": "v1.7.7",
  970 + "source": {
  971 + "type": "git",
  972 + "url": "https://github.com/kartik-v/yii2-krajee-base.git",
  973 + "reference": "c0adff9d9762f4fd3bf0e7cd0000fcab0bf00f19"
  974 + },
  975 + "dist": {
  976 + "type": "zip",
  977 + "url": "https://api.github.com/repos/kartik-v/yii2-krajee-base/zipball/c0adff9d9762f4fd3bf0e7cd0000fcab0bf00f19",
  978 + "reference": "c0adff9d9762f4fd3bf0e7cd0000fcab0bf00f19",
  979 + "shasum": ""
  980 + },
  981 + "require": {
  982 + "yiisoft/yii2-bootstrap": "@dev"
  983 + },
  984 + "type": "yii2-extension",
  985 + "autoload": {
  986 + "psr-4": {
  987 + "kartik\\base\\": ""
  988 + }
  989 + },
  990 + "notification-url": "https://packagist.org/downloads/",
  991 + "license": [
  992 + "BSD-3-Clause"
  993 + ],
  994 + "authors": [
  995 + {
  996 + "name": "Kartik Visweswaran",
  997 + "email": "kartikv2@gmail.com",
  998 + "homepage": "http://www.krajee.com/"
  999 + }
  1000 + ],
  1001 + "description": "Base library and foundation components for all Yii2 Krajee extensions.",
  1002 + "homepage": "https://github.com/kartik-v/yii2-krajee-base",
  1003 + "keywords": [
  1004 + "base",
  1005 + "extension",
  1006 + "foundation",
  1007 + "krajee",
  1008 + "widget",
  1009 + "yii2"
  1010 + ],
  1011 + "time": "2015-06-16 05:19:57"
  1012 + },
  1013 + {
  1014 + "name": "kartik-v/yii2-widget-datepicker",
  1015 + "version": "v1.3.3",
  1016 + "source": {
  1017 + "type": "git",
  1018 + "url": "https://github.com/kartik-v/yii2-widget-datepicker.git",
  1019 + "reference": "368b181ef658c05707fe41dd16eee4d9ffd9da38"
  1020 + },
  1021 + "dist": {
  1022 + "type": "zip",
  1023 + "url": "https://api.github.com/repos/kartik-v/yii2-widget-datepicker/zipball/368b181ef658c05707fe41dd16eee4d9ffd9da38",
  1024 + "reference": "368b181ef658c05707fe41dd16eee4d9ffd9da38",
  1025 + "shasum": ""
  1026 + },
  1027 + "require": {
  1028 + "kartik-v/yii2-krajee-base": "~1.7"
  1029 + },
  1030 + "type": "yii2-extension",
  1031 + "autoload": {
  1032 + "psr-4": {
  1033 + "kartik\\date\\": ""
  1034 + }
  1035 + },
  1036 + "notification-url": "https://packagist.org/downloads/",
  1037 + "license": [
  1038 + "BSD-3-Clause"
  1039 + ],
  1040 + "authors": [
  1041 + {
  1042 + "name": "Kartik Visweswaran",
  1043 + "email": "kartikv2@gmail.com",
  1044 + "homepage": "http://www.krajee.com/"
  1045 + }
  1046 + ],
  1047 + "description": "Enhanced Yii2 wrapper for the bootstrap datepicker plugin (sub repo split from yii2-widgets).",
  1048 + "homepage": "https://github.com/kartik-v/yii2-widget-datepicker",
  1049 + "keywords": [
  1050 + "date",
  1051 + "extension",
  1052 + "form",
  1053 + "jquery",
  1054 + "picker",
  1055 + "plugin",
  1056 + "select2",
  1057 + "widget",
  1058 + "yii2"
  1059 + ],
  1060 + "time": "2015-07-19 04:49:03"
  1061 + },
  1062 + {
  1063 + "name": "mihaildev/yii2-ckeditor",
  1064 + "version": "1.0.1",
  1065 + "source": {
  1066 + "type": "git",
  1067 + "url": "https://github.com/MihailDev/yii2-ckeditor.git",
  1068 + "reference": "d20aa7f6bcf610fee226d6eb15212a279875bf87"
  1069 + },
  1070 + "dist": {
  1071 + "type": "zip",
  1072 + "url": "https://api.github.com/repos/MihailDev/yii2-ckeditor/zipball/d20aa7f6bcf610fee226d6eb15212a279875bf87",
  1073 + "reference": "d20aa7f6bcf610fee226d6eb15212a279875bf87",
  1074 + "shasum": ""
  1075 + },
  1076 + "require": {
  1077 + "yiisoft/yii2": "*"
  1078 + },
  1079 + "type": "yii2-extension",
  1080 + "extra": {
  1081 + "asset-installer-paths": {
  1082 + "npm-asset-library": "vendor/npm",
  1083 + "bower-asset-library": "vendor/bower"
  1084 + }
  1085 + },
  1086 + "autoload": {
  1087 + "psr-4": {
  1088 + "mihaildev\\ckeditor\\": ""
  1089 + }
  1090 + },
  1091 + "notification-url": "https://packagist.org/downloads/",
  1092 + "license": [
  1093 + "BSD-3-Clause"
  1094 + ],
  1095 + "authors": [
  1096 + {
  1097 + "name": "Mihail",
  1098 + "email": "mihail.kucher@gmail.com",
  1099 + "homepage": "https://github.com/MihailDev",
  1100 + "role": "Developer"
  1101 + }
  1102 + ],
  1103 + "description": "Yii2 CKEditor",
  1104 + "homepage": "https://github.com/MihailDev/yii2-ckeditor",
  1105 + "keywords": [
  1106 + "CKEditor",
  1107 + "editor",
  1108 + "wysiwyg",
  1109 + "yii"
  1110 + ],
  1111 + "time": "2014-11-19 22:04:08"
  1112 + },
  1113 + {
  1114 + "name": "phpdocumentor/reflection-docblock",
  1115 + "version": "2.0.4",
  1116 + "source": {
  1117 + "type": "git",
  1118 + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
  1119 + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
  1120 + },
  1121 + "dist": {
  1122 + "type": "zip",
  1123 + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
  1124 + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
  1125 + "shasum": ""
  1126 + },
  1127 + "require": {
  1128 + "php": ">=5.3.3"
  1129 + },
  1130 + "require-dev": {
  1131 + "phpunit/phpunit": "~4.0"
  1132 + },
  1133 + "suggest": {
  1134 + "dflydev/markdown": "~1.0",
  1135 + "erusev/parsedown": "~1.0"
  1136 + },
  1137 + "type": "library",
  1138 + "extra": {
  1139 + "branch-alias": {
  1140 + "dev-master": "2.0.x-dev"
  1141 + }
  1142 + },
  1143 + "autoload": {
  1144 + "psr-0": {
  1145 + "phpDocumentor": [
  1146 + "src/"
  1147 + ]
  1148 + }
  1149 + },
  1150 + "notification-url": "https://packagist.org/downloads/",
  1151 + "license": [
  1152 + "MIT"
  1153 + ],
  1154 + "authors": [
  1155 + {
  1156 + "name": "Mike van Riel",
  1157 + "email": "mike.vanriel@naenius.com"
  1158 + }
  1159 + ],
  1160 + "time": "2015-02-03 12:10:50"
  1161 + },
  1162 + {
  1163 + "name": "phpspec/prophecy",
  1164 + "version": "v1.5.0",
  1165 + "source": {
  1166 + "type": "git",
  1167 + "url": "https://github.com/phpspec/prophecy.git",
  1168 + "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7"
  1169 + },
  1170 + "dist": {
  1171 + "type": "zip",
  1172 + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7",
  1173 + "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7",
  1174 + "shasum": ""
  1175 + },
  1176 + "require": {
  1177 + "doctrine/instantiator": "^1.0.2",
  1178 + "phpdocumentor/reflection-docblock": "~2.0",
  1179 + "sebastian/comparator": "~1.1"
  1180 + },
  1181 + "require-dev": {
  1182 + "phpspec/phpspec": "~2.0"
  1183 + },
  1184 + "type": "library",
  1185 + "extra": {
  1186 + "branch-alias": {
  1187 + "dev-master": "1.4.x-dev"
  1188 + }
  1189 + },
  1190 + "autoload": {
  1191 + "psr-0": {
  1192 + "Prophecy\\": "src/"
  1193 + }
  1194 + },
  1195 + "notification-url": "https://packagist.org/downloads/",
  1196 + "license": [
  1197 + "MIT"
  1198 + ],
  1199 + "authors": [
  1200 + {
  1201 + "name": "Konstantin Kudryashov",
  1202 + "email": "ever.zet@gmail.com",
  1203 + "homepage": "http://everzet.com"
  1204 + },
  1205 + {
  1206 + "name": "Marcello Duarte",
  1207 + "email": "marcello.duarte@gmail.com"
  1208 + }
  1209 + ],
  1210 + "description": "Highly opinionated mocking framework for PHP 5.3+",
  1211 + "homepage": "https://github.com/phpspec/prophecy",
  1212 + "keywords": [
  1213 + "Double",
  1214 + "Dummy",
  1215 + "fake",
  1216 + "mock",
  1217 + "spy",
  1218 + "stub"
  1219 + ],
  1220 + "time": "2015-08-13 10:07:40"
  1221 + },
  1222 + {
  1223 + "name": "phpunit/php-code-coverage",
  1224 + "version": "2.2.4",
  1225 + "source": {
  1226 + "type": "git",
  1227 + "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
  1228 + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
  1229 + },
  1230 + "dist": {
  1231 + "type": "zip",
  1232 + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
  1233 + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
  1234 + "shasum": ""
  1235 + },
  1236 + "require": {
  1237 + "php": ">=5.3.3",
  1238 + "phpunit/php-file-iterator": "~1.3",
  1239 + "phpunit/php-text-template": "~1.2",
  1240 + "phpunit/php-token-stream": "~1.3",
  1241 + "sebastian/environment": "^1.3.2",
  1242 + "sebastian/version": "~1.0"
  1243 + },
  1244 + "require-dev": {
  1245 + "ext-xdebug": ">=2.1.4",
  1246 + "phpunit/phpunit": "~4"
  1247 + },
  1248 + "suggest": {
  1249 + "ext-dom": "*",
  1250 + "ext-xdebug": ">=2.2.1",
  1251 + "ext-xmlwriter": "*"
  1252 + },
  1253 + "type": "library",
  1254 + "extra": {
  1255 + "branch-alias": {
  1256 + "dev-master": "2.2.x-dev"
  1257 + }
  1258 + },
  1259 + "autoload": {
  1260 + "classmap": [
  1261 + "src/"
  1262 + ]
  1263 + },
  1264 + "notification-url": "https://packagist.org/downloads/",
  1265 + "license": [
  1266 + "BSD-3-Clause"
  1267 + ],
  1268 + "authors": [
  1269 + {
  1270 + "name": "Sebastian Bergmann",
  1271 + "email": "sb@sebastian-bergmann.de",
  1272 + "role": "lead"
  1273 + }
  1274 + ],
  1275 + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
  1276 + "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
  1277 + "keywords": [
  1278 + "coverage",
  1279 + "testing",
  1280 + "xunit"
  1281 + ],
  1282 + "time": "2015-10-06 15:47:00"
  1283 + },
  1284 + {
  1285 + "name": "phpunit/php-file-iterator",
  1286 + "version": "1.4.1",
  1287 + "source": {
  1288 + "type": "git",
  1289 + "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
  1290 + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
  1291 + },
  1292 + "dist": {
  1293 + "type": "zip",
  1294 + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
  1295 + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
  1296 + "shasum": ""
  1297 + },
  1298 + "require": {
  1299 + "php": ">=5.3.3"
  1300 + },
  1301 + "type": "library",
  1302 + "extra": {
  1303 + "branch-alias": {
  1304 + "dev-master": "1.4.x-dev"
  1305 + }
  1306 + },
  1307 + "autoload": {
  1308 + "classmap": [
  1309 + "src/"
  1310 + ]
  1311 + },
  1312 + "notification-url": "https://packagist.org/downloads/",
  1313 + "license": [
  1314 + "BSD-3-Clause"
  1315 + ],
  1316 + "authors": [
  1317 + {
  1318 + "name": "Sebastian Bergmann",
  1319 + "email": "sb@sebastian-bergmann.de",
  1320 + "role": "lead"
  1321 + }
  1322 + ],
  1323 + "description": "FilterIterator implementation that filters files based on a list of suffixes.",
  1324 + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
  1325 + "keywords": [
  1326 + "filesystem",
  1327 + "iterator"
  1328 + ],
  1329 + "time": "2015-06-21 13:08:43"
  1330 + },
  1331 + {
  1332 + "name": "phpunit/php-text-template",
  1333 + "version": "1.2.1",
  1334 + "source": {
  1335 + "type": "git",
  1336 + "url": "https://github.com/sebastianbergmann/php-text-template.git",
  1337 + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
  1338 + },
  1339 + "dist": {
  1340 + "type": "zip",
  1341 + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
  1342 + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
  1343 + "shasum": ""
  1344 + },
  1345 + "require": {
  1346 + "php": ">=5.3.3"
  1347 + },
  1348 + "type": "library",
  1349 + "autoload": {
  1350 + "classmap": [
  1351 + "src/"
  1352 + ]
  1353 + },
  1354 + "notification-url": "https://packagist.org/downloads/",
  1355 + "license": [
  1356 + "BSD-3-Clause"
  1357 + ],
  1358 + "authors": [
  1359 + {
  1360 + "name": "Sebastian Bergmann",
  1361 + "email": "sebastian@phpunit.de",
  1362 + "role": "lead"
  1363 + }
  1364 + ],
  1365 + "description": "Simple template engine.",
  1366 + "homepage": "https://github.com/sebastianbergmann/php-text-template/",
  1367 + "keywords": [
  1368 + "template"
  1369 + ],
  1370 + "time": "2015-06-21 13:50:34"
  1371 + },
  1372 + {
  1373 + "name": "phpunit/php-timer",
  1374 + "version": "1.0.7",
  1375 + "source": {
  1376 + "type": "git",
  1377 + "url": "https://github.com/sebastianbergmann/php-timer.git",
  1378 + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
  1379 + },
  1380 + "dist": {
  1381 + "type": "zip",
  1382 + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
  1383 + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
  1384 + "shasum": ""
  1385 + },
  1386 + "require": {
  1387 + "php": ">=5.3.3"
  1388 + },
  1389 + "type": "library",
  1390 + "autoload": {
  1391 + "classmap": [
  1392 + "src/"
  1393 + ]
  1394 + },
  1395 + "notification-url": "https://packagist.org/downloads/",
  1396 + "license": [
  1397 + "BSD-3-Clause"
  1398 + ],
  1399 + "authors": [
  1400 + {
  1401 + "name": "Sebastian Bergmann",
  1402 + "email": "sb@sebastian-bergmann.de",
  1403 + "role": "lead"
  1404 + }
  1405 + ],
  1406 + "description": "Utility class for timing",
  1407 + "homepage": "https://github.com/sebastianbergmann/php-timer/",
  1408 + "keywords": [
  1409 + "timer"
  1410 + ],
  1411 + "time": "2015-06-21 08:01:12"
  1412 + },
  1413 + {
  1414 + "name": "phpunit/php-token-stream",
  1415 + "version": "1.4.8",
  1416 + "source": {
  1417 + "type": "git",
  1418 + "url": "https://github.com/sebastianbergmann/php-token-stream.git",
  1419 + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da"
  1420 + },
  1421 + "dist": {
  1422 + "type": "zip",
  1423 + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
  1424 + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
  1425 + "shasum": ""
  1426 + },
  1427 + "require": {
  1428 + "ext-tokenizer": "*",
  1429 + "php": ">=5.3.3"
  1430 + },
  1431 + "require-dev": {
  1432 + "phpunit/phpunit": "~4.2"
  1433 + },
  1434 + "type": "library",
  1435 + "extra": {
  1436 + "branch-alias": {
  1437 + "dev-master": "1.4-dev"
  1438 + }
  1439 + },
  1440 + "autoload": {
  1441 + "classmap": [
  1442 + "src/"
  1443 + ]
  1444 + },
  1445 + "notification-url": "https://packagist.org/downloads/",
  1446 + "license": [
  1447 + "BSD-3-Clause"
  1448 + ],
  1449 + "authors": [
  1450 + {
  1451 + "name": "Sebastian Bergmann",
  1452 + "email": "sebastian@phpunit.de"
  1453 + }
  1454 + ],
  1455 + "description": "Wrapper around PHP's tokenizer extension.",
  1456 + "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
  1457 + "keywords": [
  1458 + "tokenizer"
  1459 + ],
  1460 + "time": "2015-09-15 10:49:45"
  1461 + },
  1462 + {
  1463 + "name": "phpunit/phpunit",
  1464 + "version": "4.8.18",
  1465 + "source": {
  1466 + "type": "git",
  1467 + "url": "https://github.com/sebastianbergmann/phpunit.git",
  1468 + "reference": "fa33d4ad96481b91df343d83e8c8aabed6b1dfd3"
  1469 + },
  1470 + "dist": {
  1471 + "type": "zip",
  1472 + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fa33d4ad96481b91df343d83e8c8aabed6b1dfd3",
  1473 + "reference": "fa33d4ad96481b91df343d83e8c8aabed6b1dfd3",
  1474 + "shasum": ""
  1475 + },
  1476 + "require": {
  1477 + "ext-dom": "*",
  1478 + "ext-json": "*",
  1479 + "ext-pcre": "*",
  1480 + "ext-reflection": "*",
  1481 + "ext-spl": "*",
  1482 + "php": ">=5.3.3",
  1483 + "phpspec/prophecy": "^1.3.1",
  1484 + "phpunit/php-code-coverage": "~2.1",
  1485 + "phpunit/php-file-iterator": "~1.4",
  1486 + "phpunit/php-text-template": "~1.2",
  1487 + "phpunit/php-timer": ">=1.0.6",
  1488 + "phpunit/phpunit-mock-objects": "~2.3",
  1489 + "sebastian/comparator": "~1.1",
  1490 + "sebastian/diff": "~1.2",
  1491 + "sebastian/environment": "~1.3",
  1492 + "sebastian/exporter": "~1.2",
  1493 + "sebastian/global-state": "~1.0",
  1494 + "sebastian/version": "~1.0",
  1495 + "symfony/yaml": "~2.1|~3.0"
  1496 + },
  1497 + "suggest": {
  1498 + "phpunit/php-invoker": "~1.1"
  1499 + },
  1500 + "bin": [
  1501 + "phpunit"
  1502 + ],
  1503 + "type": "library",
  1504 + "extra": {
  1505 + "branch-alias": {
  1506 + "dev-master": "4.8.x-dev"
  1507 + }
  1508 + },
  1509 + "autoload": {
  1510 + "classmap": [
  1511 + "src/"
  1512 + ]
  1513 + },
  1514 + "notification-url": "https://packagist.org/downloads/",
  1515 + "license": [
  1516 + "BSD-3-Clause"
  1517 + ],
  1518 + "authors": [
  1519 + {
  1520 + "name": "Sebastian Bergmann",
  1521 + "email": "sebastian@phpunit.de",
  1522 + "role": "lead"
  1523 + }
  1524 + ],
  1525 + "description": "The PHP Unit Testing framework.",
  1526 + "homepage": "https://phpunit.de/",
  1527 + "keywords": [
  1528 + "phpunit",
  1529 + "testing",
  1530 + "xunit"
  1531 + ],
  1532 + "time": "2015-11-11 11:32:49"
  1533 + },
  1534 + {
  1535 + "name": "phpunit/phpunit-mock-objects",
  1536 + "version": "2.3.8",
  1537 + "source": {
  1538 + "type": "git",
  1539 + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
  1540 + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
  1541 + },
  1542 + "dist": {
  1543 + "type": "zip",
  1544 + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
  1545 + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
  1546 + "shasum": ""
  1547 + },
  1548 + "require": {
  1549 + "doctrine/instantiator": "^1.0.2",
  1550 + "php": ">=5.3.3",
  1551 + "phpunit/php-text-template": "~1.2",
  1552 + "sebastian/exporter": "~1.2"
  1553 + },
  1554 + "require-dev": {
  1555 + "phpunit/phpunit": "~4.4"
  1556 + },
  1557 + "suggest": {
  1558 + "ext-soap": "*"
  1559 + },
  1560 + "type": "library",
  1561 + "extra": {
  1562 + "branch-alias": {
  1563 + "dev-master": "2.3.x-dev"
  1564 + }
  1565 + },
  1566 + "autoload": {
  1567 + "classmap": [
  1568 + "src/"
  1569 + ]
  1570 + },
  1571 + "notification-url": "https://packagist.org/downloads/",
  1572 + "license": [
  1573 + "BSD-3-Clause"
  1574 + ],
  1575 + "authors": [
  1576 + {
  1577 + "name": "Sebastian Bergmann",
  1578 + "email": "sb@sebastian-bergmann.de",
  1579 + "role": "lead"
  1580 + }
  1581 + ],
  1582 + "description": "Mock Object library for PHPUnit",
  1583 + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
  1584 + "keywords": [
  1585 + "mock",
  1586 + "xunit"
  1587 + ],
  1588 + "time": "2015-10-02 06:51:40"
  1589 + },
  1590 + {
  1591 + "name": "psr/http-message",
  1592 + "version": "1.0",
  1593 + "source": {
  1594 + "type": "git",
  1595 + "url": "https://github.com/php-fig/http-message.git",
  1596 + "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
  1597 + },
  1598 + "dist": {
  1599 + "type": "zip",
  1600 + "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
  1601 + "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
  1602 + "shasum": ""
  1603 + },
  1604 + "require": {
  1605 + "php": ">=5.3.0"
  1606 + },
  1607 + "type": "library",
  1608 + "extra": {
  1609 + "branch-alias": {
  1610 + "dev-master": "1.0.x-dev"
  1611 + }
  1612 + },
  1613 + "autoload": {
  1614 + "psr-4": {
  1615 + "Psr\\Http\\Message\\": "src/"
  1616 + }
  1617 + },
  1618 + "notification-url": "https://packagist.org/downloads/",
  1619 + "license": [
  1620 + "MIT"
  1621 + ],
  1622 + "authors": [
  1623 + {
  1624 + "name": "PHP-FIG",
  1625 + "homepage": "http://www.php-fig.org/"
  1626 + }
  1627 + ],
  1628 + "description": "Common interface for HTTP messages",
  1629 + "keywords": [
  1630 + "http",
  1631 + "http-message",
  1632 + "psr",
  1633 + "psr-7",
  1634 + "request",
  1635 + "response"
  1636 + ],
  1637 + "time": "2015-05-04 20:22:00"
  1638 + },
  1639 + {
  1640 + "name": "sebastian/comparator",
  1641 + "version": "1.2.0",
  1642 + "source": {
  1643 + "type": "git",
  1644 + "url": "https://github.com/sebastianbergmann/comparator.git",
  1645 + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
  1646 + },
  1647 + "dist": {
  1648 + "type": "zip",
  1649 + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
  1650 + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
  1651 + "shasum": ""
  1652 + },
  1653 + "require": {
  1654 + "php": ">=5.3.3",
  1655 + "sebastian/diff": "~1.2",
  1656 + "sebastian/exporter": "~1.2"
  1657 + },
  1658 + "require-dev": {
  1659 + "phpunit/phpunit": "~4.4"
  1660 + },
  1661 + "type": "library",
  1662 + "extra": {
  1663 + "branch-alias": {
  1664 + "dev-master": "1.2.x-dev"
  1665 + }
  1666 + },
  1667 + "autoload": {
  1668 + "classmap": [
  1669 + "src/"
  1670 + ]
  1671 + },
  1672 + "notification-url": "https://packagist.org/downloads/",
  1673 + "license": [
  1674 + "BSD-3-Clause"
  1675 + ],
  1676 + "authors": [
  1677 + {
  1678 + "name": "Jeff Welch",
  1679 + "email": "whatthejeff@gmail.com"
  1680 + },
  1681 + {
  1682 + "name": "Volker Dusch",
  1683 + "email": "github@wallbash.com"
  1684 + },
  1685 + {
  1686 + "name": "Bernhard Schussek",
  1687 + "email": "bschussek@2bepublished.at"
  1688 + },
  1689 + {
  1690 + "name": "Sebastian Bergmann",
  1691 + "email": "sebastian@phpunit.de"
  1692 + }
  1693 + ],
  1694 + "description": "Provides the functionality to compare PHP values for equality",
  1695 + "homepage": "http://www.github.com/sebastianbergmann/comparator",
  1696 + "keywords": [
  1697 + "comparator",
  1698 + "compare",
  1699 + "equality"
  1700 + ],
  1701 + "time": "2015-07-26 15:48:44"
  1702 + },
  1703 + {
  1704 + "name": "sebastian/diff",
  1705 + "version": "1.3.0",
  1706 + "source": {
  1707 + "type": "git",
  1708 + "url": "https://github.com/sebastianbergmann/diff.git",
  1709 + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3"
  1710 + },
  1711 + "dist": {
  1712 + "type": "zip",
  1713 + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3",
  1714 + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3",
  1715 + "shasum": ""
  1716 + },
  1717 + "require": {
  1718 + "php": ">=5.3.3"
  1719 + },
  1720 + "require-dev": {
  1721 + "phpunit/phpunit": "~4.2"
  1722 + },
  1723 + "type": "library",
  1724 + "extra": {
  1725 + "branch-alias": {
  1726 + "dev-master": "1.3-dev"
  1727 + }
  1728 + },
  1729 + "autoload": {
  1730 + "classmap": [
  1731 + "src/"
  1732 + ]
  1733 + },
  1734 + "notification-url": "https://packagist.org/downloads/",
  1735 + "license": [
  1736 + "BSD-3-Clause"
  1737 + ],
  1738 + "authors": [
  1739 + {
  1740 + "name": "Kore Nordmann",
  1741 + "email": "mail@kore-nordmann.de"
  1742 + },
  1743 + {
  1744 + "name": "Sebastian Bergmann",
  1745 + "email": "sebastian@phpunit.de"
  1746 + }
  1747 + ],
  1748 + "description": "Diff implementation",
  1749 + "homepage": "http://www.github.com/sebastianbergmann/diff",
  1750 + "keywords": [
  1751 + "diff"
  1752 + ],
  1753 + "time": "2015-02-22 15:13:53"
  1754 + },
  1755 + {
  1756 + "name": "sebastian/environment",
  1757 + "version": "1.3.2",
  1758 + "source": {
  1759 + "type": "git",
  1760 + "url": "https://github.com/sebastianbergmann/environment.git",
  1761 + "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44"
  1762 + },
  1763 + "dist": {
  1764 + "type": "zip",
  1765 + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44",
  1766 + "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44",
  1767 + "shasum": ""
  1768 + },
  1769 + "require": {
  1770 + "php": ">=5.3.3"
  1771 + },
  1772 + "require-dev": {
  1773 + "phpunit/phpunit": "~4.4"
  1774 + },
  1775 + "type": "library",
  1776 + "extra": {
  1777 + "branch-alias": {
  1778 + "dev-master": "1.3.x-dev"
  1779 + }
  1780 + },
  1781 + "autoload": {
  1782 + "classmap": [
  1783 + "src/"
  1784 + ]
  1785 + },
  1786 + "notification-url": "https://packagist.org/downloads/",
  1787 + "license": [
  1788 + "BSD-3-Clause"
  1789 + ],
  1790 + "authors": [
  1791 + {
  1792 + "name": "Sebastian Bergmann",
  1793 + "email": "sebastian@phpunit.de"
  1794 + }
  1795 + ],
  1796 + "description": "Provides functionality to handle HHVM/PHP environments",
  1797 + "homepage": "http://www.github.com/sebastianbergmann/environment",
  1798 + "keywords": [
  1799 + "Xdebug",
  1800 + "environment",
  1801 + "hhvm"
  1802 + ],
  1803 + "time": "2015-08-03 06:14:51"
  1804 + },
  1805 + {
  1806 + "name": "sebastian/exporter",
  1807 + "version": "1.2.1",
  1808 + "source": {
  1809 + "type": "git",
  1810 + "url": "https://github.com/sebastianbergmann/exporter.git",
  1811 + "reference": "7ae5513327cb536431847bcc0c10edba2701064e"
  1812 + },
  1813 + "dist": {
  1814 + "type": "zip",
  1815 + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e",
  1816 + "reference": "7ae5513327cb536431847bcc0c10edba2701064e",
  1817 + "shasum": ""
  1818 + },
  1819 + "require": {
  1820 + "php": ">=5.3.3",
  1821 + "sebastian/recursion-context": "~1.0"
  1822 + },
  1823 + "require-dev": {
  1824 + "phpunit/phpunit": "~4.4"
  1825 + },
  1826 + "type": "library",
  1827 + "extra": {
  1828 + "branch-alias": {
  1829 + "dev-master": "1.2.x-dev"
  1830 + }
  1831 + },
  1832 + "autoload": {
  1833 + "classmap": [
  1834 + "src/"
  1835 + ]
  1836 + },
  1837 + "notification-url": "https://packagist.org/downloads/",
  1838 + "license": [
  1839 + "BSD-3-Clause"
  1840 + ],
  1841 + "authors": [
  1842 + {
  1843 + "name": "Jeff Welch",
  1844 + "email": "whatthejeff@gmail.com"
  1845 + },
  1846 + {
  1847 + "name": "Volker Dusch",
  1848 + "email": "github@wallbash.com"
  1849 + },
  1850 + {
  1851 + "name": "Bernhard Schussek",
  1852 + "email": "bschussek@2bepublished.at"
  1853 + },
  1854 + {
  1855 + "name": "Sebastian Bergmann",
  1856 + "email": "sebastian@phpunit.de"
  1857 + },
  1858 + {
  1859 + "name": "Adam Harvey",
  1860 + "email": "aharvey@php.net"
  1861 + }
  1862 + ],
  1863 + "description": "Provides the functionality to export PHP variables for visualization",
  1864 + "homepage": "http://www.github.com/sebastianbergmann/exporter",
  1865 + "keywords": [
  1866 + "export",
  1867 + "exporter"
  1868 + ],
  1869 + "time": "2015-06-21 07:55:53"
  1870 + },
  1871 + {
  1872 + "name": "sebastian/global-state",
  1873 + "version": "1.1.1",
  1874 + "source": {
  1875 + "type": "git",
  1876 + "url": "https://github.com/sebastianbergmann/global-state.git",
  1877 + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
  1878 + },
  1879 + "dist": {
  1880 + "type": "zip",
  1881 + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
  1882 + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
  1883 + "shasum": ""
  1884 + },
  1885 + "require": {
  1886 + "php": ">=5.3.3"
  1887 + },
  1888 + "require-dev": {
  1889 + "phpunit/phpunit": "~4.2"
  1890 + },
  1891 + "suggest": {
  1892 + "ext-uopz": "*"
  1893 + },
  1894 + "type": "library",
  1895 + "extra": {
  1896 + "branch-alias": {
  1897 + "dev-master": "1.0-dev"
  1898 + }
  1899 + },
  1900 + "autoload": {
  1901 + "classmap": [
  1902 + "src/"
  1903 + ]
  1904 + },
  1905 + "notification-url": "https://packagist.org/downloads/",
  1906 + "license": [
  1907 + "BSD-3-Clause"
  1908 + ],
  1909 + "authors": [
  1910 + {
  1911 + "name": "Sebastian Bergmann",
  1912 + "email": "sebastian@phpunit.de"
  1913 + }
  1914 + ],
  1915 + "description": "Snapshotting of global state",
  1916 + "homepage": "http://www.github.com/sebastianbergmann/global-state",
  1917 + "keywords": [
  1918 + "global state"
  1919 + ],
  1920 + "time": "2015-10-12 03:26:01"
  1921 + },
  1922 + {
  1923 + "name": "sebastian/recursion-context",
  1924 + "version": "1.0.1",
  1925 + "source": {
  1926 + "type": "git",
  1927 + "url": "https://github.com/sebastianbergmann/recursion-context.git",
  1928 + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba"
  1929 + },
  1930 + "dist": {
  1931 + "type": "zip",
  1932 + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba",
  1933 + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba",
  1934 + "shasum": ""
  1935 + },
  1936 + "require": {
  1937 + "php": ">=5.3.3"
  1938 + },
  1939 + "require-dev": {
  1940 + "phpunit/phpunit": "~4.4"
  1941 + },
  1942 + "type": "library",
  1943 + "extra": {
  1944 + "branch-alias": {
  1945 + "dev-master": "1.0.x-dev"
  1946 + }
  1947 + },
  1948 + "autoload": {
  1949 + "classmap": [
  1950 + "src/"
  1951 + ]
  1952 + },
  1953 + "notification-url": "https://packagist.org/downloads/",
  1954 + "license": [
  1955 + "BSD-3-Clause"
  1956 + ],
  1957 + "authors": [
  1958 + {
  1959 + "name": "Jeff Welch",
  1960 + "email": "whatthejeff@gmail.com"
  1961 + },
  1962 + {
  1963 + "name": "Sebastian Bergmann",
  1964 + "email": "sebastian@phpunit.de"
  1965 + },
  1966 + {
  1967 + "name": "Adam Harvey",
  1968 + "email": "aharvey@php.net"
  1969 + }
  1970 + ],
  1971 + "description": "Provides functionality to recursively process PHP variables",
  1972 + "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
  1973 + "time": "2015-06-21 08:04:50"
  1974 + },
  1975 + {
  1976 + "name": "sebastian/version",
  1977 + "version": "1.0.6",
  1978 + "source": {
  1979 + "type": "git",
  1980 + "url": "https://github.com/sebastianbergmann/version.git",
  1981 + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
  1982 + },
  1983 + "dist": {
  1984 + "type": "zip",
  1985 + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
  1986 + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
  1987 + "shasum": ""
  1988 + },
  1989 + "type": "library",
  1990 + "autoload": {
  1991 + "classmap": [
  1992 + "src/"
  1993 + ]
  1994 + },
  1995 + "notification-url": "https://packagist.org/downloads/",
  1996 + "license": [
  1997 + "BSD-3-Clause"
  1998 + ],
  1999 + "authors": [
  2000 + {
  2001 + "name": "Sebastian Bergmann",
  2002 + "email": "sebastian@phpunit.de",
  2003 + "role": "lead"
  2004 + }
  2005 + ],
  2006 + "description": "Library that helps with managing the version number of Git-hosted PHP projects",
  2007 + "homepage": "https://github.com/sebastianbergmann/version",
  2008 + "time": "2015-06-21 13:59:46"
  2009 + },
  2010 + {
  2011 + "name": "swiftmailer/swiftmailer",
  2012 + "version": "v5.4.1",
  2013 + "source": {
  2014 + "type": "git",
  2015 + "url": "https://github.com/swiftmailer/swiftmailer.git",
  2016 + "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421"
  2017 + },
  2018 + "dist": {
  2019 + "type": "zip",
  2020 + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421",
  2021 + "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421",
  2022 + "shasum": ""
  2023 + },
  2024 + "require": {
  2025 + "php": ">=5.3.3"
  2026 + },
  2027 + "require-dev": {
  2028 + "mockery/mockery": "~0.9.1,<0.9.4"
  2029 + },
  2030 + "type": "library",
  2031 + "extra": {
  2032 + "branch-alias": {
  2033 + "dev-master": "5.4-dev"
  2034 + }
  2035 + },
  2036 + "autoload": {
  2037 + "files": [
  2038 + "lib/swift_required.php"
  2039 + ]
  2040 + },
  2041 + "notification-url": "https://packagist.org/downloads/",
  2042 + "license": [
  2043 + "MIT"
  2044 + ],
  2045 + "authors": [
  2046 + {
  2047 + "name": "Chris Corbyn"
  2048 + },
  2049 + {
  2050 + "name": "Fabien Potencier",
  2051 + "email": "fabien@symfony.com"
  2052 + }
  2053 + ],
  2054 + "description": "Swiftmailer, free feature-rich PHP mailer",
  2055 + "homepage": "http://swiftmailer.org",
  2056 + "keywords": [
  2057 + "email",
  2058 + "mail",
  2059 + "mailer"
  2060 + ],
  2061 + "time": "2015-06-06 14:19:39"
  2062 + },
  2063 + {
  2064 + "name": "symfony/browser-kit",
  2065 + "version": "v2.7.6",
  2066 + "source": {
  2067 + "type": "git",
  2068 + "url": "https://github.com/symfony/browser-kit.git",
  2069 + "reference": "07d664a052572ccc28eb2ab7dbbe82155b1ad367"
  2070 + },
  2071 + "dist": {
  2072 + "type": "zip",
  2073 + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/07d664a052572ccc28eb2ab7dbbe82155b1ad367",
  2074 + "reference": "07d664a052572ccc28eb2ab7dbbe82155b1ad367",
  2075 + "shasum": ""
  2076 + },
  2077 + "require": {
  2078 + "php": ">=5.3.9",
  2079 + "symfony/dom-crawler": "~2.0,>=2.0.5"
  2080 + },
  2081 + "require-dev": {
  2082 + "symfony/css-selector": "~2.0,>=2.0.5",
  2083 + "symfony/process": "~2.3.34|~2.7,>=2.7.6"
  2084 + },
  2085 + "suggest": {
  2086 + "symfony/process": ""
  2087 + },
  2088 + "type": "library",
  2089 + "extra": {
  2090 + "branch-alias": {
  2091 + "dev-master": "2.7-dev"
  2092 + }
  2093 + },
  2094 + "autoload": {
  2095 + "psr-4": {
  2096 + "Symfony\\Component\\BrowserKit\\": ""
  2097 + }
  2098 + },
  2099 + "notification-url": "https://packagist.org/downloads/",
  2100 + "license": [
  2101 + "MIT"
  2102 + ],
  2103 + "authors": [
  2104 + {
  2105 + "name": "Fabien Potencier",
  2106 + "email": "fabien@symfony.com"
  2107 + },
  2108 + {
  2109 + "name": "Symfony Community",
  2110 + "homepage": "https://symfony.com/contributors"
  2111 + }
  2112 + ],
  2113 + "description": "Symfony BrowserKit Component",
  2114 + "homepage": "https://symfony.com",
  2115 + "time": "2015-10-23 14:47:27"
  2116 + },
  2117 + {
  2118 + "name": "symfony/console",
  2119 + "version": "v2.7.6",
  2120 + "source": {
  2121 + "type": "git",
  2122 + "url": "https://github.com/symfony/console.git",
  2123 + "reference": "5efd632294c8320ea52492db22292ff853a43766"
  2124 + },
  2125 + "dist": {
  2126 + "type": "zip",
  2127 + "url": "https://api.github.com/repos/symfony/console/zipball/5efd632294c8320ea52492db22292ff853a43766",
  2128 + "reference": "5efd632294c8320ea52492db22292ff853a43766",
  2129 + "shasum": ""
  2130 + },
  2131 + "require": {
  2132 + "php": ">=5.3.9"
  2133 + },
  2134 + "require-dev": {
  2135 + "psr/log": "~1.0",
  2136 + "symfony/event-dispatcher": "~2.1",
  2137 + "symfony/process": "~2.1"
  2138 + },
  2139 + "suggest": {
  2140 + "psr/log": "For using the console logger",
  2141 + "symfony/event-dispatcher": "",
  2142 + "symfony/process": ""
  2143 + },
  2144 + "type": "library",
  2145 + "extra": {
  2146 + "branch-alias": {
  2147 + "dev-master": "2.7-dev"
  2148 + }
  2149 + },
  2150 + "autoload": {
  2151 + "psr-4": {
  2152 + "Symfony\\Component\\Console\\": ""
  2153 + }
  2154 + },
  2155 + "notification-url": "https://packagist.org/downloads/",
  2156 + "license": [
  2157 + "MIT"
  2158 + ],
  2159 + "authors": [
  2160 + {
  2161 + "name": "Fabien Potencier",
  2162 + "email": "fabien@symfony.com"
  2163 + },
  2164 + {
  2165 + "name": "Symfony Community",
  2166 + "homepage": "https://symfony.com/contributors"
  2167 + }
  2168 + ],
  2169 + "description": "Symfony Console Component",
  2170 + "homepage": "https://symfony.com",
  2171 + "time": "2015-10-20 14:38:46"
  2172 + },
  2173 + {
  2174 + "name": "symfony/css-selector",
  2175 + "version": "v2.7.6",
  2176 + "source": {
  2177 + "type": "git",
  2178 + "url": "https://github.com/symfony/css-selector.git",
  2179 + "reference": "e1b865b26be4a56d22a8dee398375044a80c865b"
  2180 + },
  2181 + "dist": {
  2182 + "type": "zip",
  2183 + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e1b865b26be4a56d22a8dee398375044a80c865b",
  2184 + "reference": "e1b865b26be4a56d22a8dee398375044a80c865b",
  2185 + "shasum": ""
  2186 + },
  2187 + "require": {
  2188 + "php": ">=5.3.9"
  2189 + },
  2190 + "type": "library",
  2191 + "extra": {
  2192 + "branch-alias": {
  2193 + "dev-master": "2.7-dev"
  2194 + }
  2195 + },
  2196 + "autoload": {
  2197 + "psr-4": {
  2198 + "Symfony\\Component\\CssSelector\\": ""
  2199 + }
  2200 + },
  2201 + "notification-url": "https://packagist.org/downloads/",
  2202 + "license": [
  2203 + "MIT"
  2204 + ],
  2205 + "authors": [
  2206 + {
  2207 + "name": "Jean-François Simon",
  2208 + "email": "jeanfrancois.simon@sensiolabs.com"
  2209 + },
  2210 + {
  2211 + "name": "Fabien Potencier",
  2212 + "email": "fabien@symfony.com"
  2213 + },
  2214 + {
  2215 + "name": "Symfony Community",
  2216 + "homepage": "https://symfony.com/contributors"
  2217 + }
  2218 + ],
  2219 + "description": "Symfony CssSelector Component",
  2220 + "homepage": "https://symfony.com",
  2221 + "time": "2015-10-11 09:39:48"
  2222 + },
  2223 + {
  2224 + "name": "symfony/dom-crawler",
  2225 + "version": "v2.7.6",
  2226 + "source": {
  2227 + "type": "git",
  2228 + "url": "https://github.com/symfony/dom-crawler.git",
  2229 + "reference": "5fef7d8b80d8f9992df99d8ee283f420484c9612"
  2230 + },
  2231 + "dist": {
  2232 + "type": "zip",
  2233 + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/5fef7d8b80d8f9992df99d8ee283f420484c9612",
  2234 + "reference": "5fef7d8b80d8f9992df99d8ee283f420484c9612",
  2235 + "shasum": ""
  2236 + },
  2237 + "require": {
  2238 + "php": ">=5.3.9"
  2239 + },
  2240 + "require-dev": {
  2241 + "symfony/css-selector": "~2.3"
  2242 + },
  2243 + "suggest": {
  2244 + "symfony/css-selector": ""
  2245 + },
  2246 + "type": "library",
  2247 + "extra": {
  2248 + "branch-alias": {
  2249 + "dev-master": "2.7-dev"
  2250 + }
  2251 + },
  2252 + "autoload": {
  2253 + "psr-4": {
  2254 + "Symfony\\Component\\DomCrawler\\": ""
  2255 + }
  2256 + },
  2257 + "notification-url": "https://packagist.org/downloads/",
  2258 + "license": [
  2259 + "MIT"
  2260 + ],
  2261 + "authors": [
  2262 + {
  2263 + "name": "Fabien Potencier",
  2264 + "email": "fabien@symfony.com"
  2265 + },
  2266 + {
  2267 + "name": "Symfony Community",
  2268 + "homepage": "https://symfony.com/contributors"
  2269 + }
  2270 + ],
  2271 + "description": "Symfony DomCrawler Component",
  2272 + "homepage": "https://symfony.com",
  2273 + "time": "2015-10-11 09:39:48"
  2274 + },
  2275 + {
  2276 + "name": "symfony/event-dispatcher",
  2277 + "version": "v2.7.6",
  2278 + "source": {
  2279 + "type": "git",
  2280 + "url": "https://github.com/symfony/event-dispatcher.git",
  2281 + "reference": "87a5db5ea887763fa3a31a5471b512ff1596d9b8"
  2282 + },
  2283 + "dist": {
  2284 + "type": "zip",
  2285 + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87a5db5ea887763fa3a31a5471b512ff1596d9b8",
  2286 + "reference": "87a5db5ea887763fa3a31a5471b512ff1596d9b8",
  2287 + "shasum": ""
  2288 + },
  2289 + "require": {
  2290 + "php": ">=5.3.9"
  2291 + },
  2292 + "require-dev": {
  2293 + "psr/log": "~1.0",
  2294 + "symfony/config": "~2.0,>=2.0.5",
  2295 + "symfony/dependency-injection": "~2.6",
  2296 + "symfony/expression-language": "~2.6",
  2297 + "symfony/stopwatch": "~2.3"
  2298 + },
  2299 + "suggest": {
  2300 + "symfony/dependency-injection": "",
  2301 + "symfony/http-kernel": ""
  2302 + },
  2303 + "type": "library",
  2304 + "extra": {
  2305 + "branch-alias": {
  2306 + "dev-master": "2.7-dev"
  2307 + }
  2308 + },
  2309 + "autoload": {
  2310 + "psr-4": {
  2311 + "Symfony\\Component\\EventDispatcher\\": ""
  2312 + }
  2313 + },
  2314 + "notification-url": "https://packagist.org/downloads/",
  2315 + "license": [
  2316 + "MIT"
  2317 + ],
  2318 + "authors": [
  2319 + {
  2320 + "name": "Fabien Potencier",
  2321 + "email": "fabien@symfony.com"
  2322 + },
  2323 + {
  2324 + "name": "Symfony Community",
  2325 + "homepage": "https://symfony.com/contributors"
  2326 + }
  2327 + ],
  2328 + "description": "Symfony EventDispatcher Component",
  2329 + "homepage": "https://symfony.com",
  2330 + "time": "2015-10-11 09:39:48"
  2331 + },
  2332 + {
  2333 + "name": "symfony/finder",
  2334 + "version": "v2.7.6",
  2335 + "source": {
  2336 + "type": "git",
  2337 + "url": "https://github.com/symfony/finder.git",
  2338 + "reference": "2ffb4e9598db3c48eb6d0ae73b04bbf09280c59d"
  2339 + },
  2340 + "dist": {
  2341 + "type": "zip",
  2342 + "url": "https://api.github.com/repos/symfony/finder/zipball/2ffb4e9598db3c48eb6d0ae73b04bbf09280c59d",
  2343 + "reference": "2ffb4e9598db3c48eb6d0ae73b04bbf09280c59d",
  2344 + "shasum": ""
  2345 + },
  2346 + "require": {
  2347 + "php": ">=5.3.9"
  2348 + },
  2349 + "type": "library",
  2350 + "extra": {
  2351 + "branch-alias": {
  2352 + "dev-master": "2.7-dev"
  2353 + }
  2354 + },
  2355 + "autoload": {
  2356 + "psr-4": {
  2357 + "Symfony\\Component\\Finder\\": ""
  2358 + }
  2359 + },
  2360 + "notification-url": "https://packagist.org/downloads/",
  2361 + "license": [
  2362 + "MIT"
  2363 + ],
  2364 + "authors": [
  2365 + {
  2366 + "name": "Fabien Potencier",
  2367 + "email": "fabien@symfony.com"
  2368 + },
  2369 + {
  2370 + "name": "Symfony Community",
  2371 + "homepage": "https://symfony.com/contributors"
  2372 + }
  2373 + ],
  2374 + "description": "Symfony Finder Component",
  2375 + "homepage": "https://symfony.com",
  2376 + "time": "2015-10-11 09:39:48"
  2377 + },
  2378 + {
  2379 + "name": "symfony/yaml",
  2380 + "version": "v2.7.6",
  2381 + "source": {
  2382 + "type": "git",
  2383 + "url": "https://github.com/symfony/yaml.git",
  2384 + "reference": "eca9019c88fbe250164affd107bc8057771f3f4d"
  2385 + },
  2386 + "dist": {
  2387 + "type": "zip",
  2388 + "url": "https://api.github.com/repos/symfony/yaml/zipball/eca9019c88fbe250164affd107bc8057771f3f4d",
  2389 + "reference": "eca9019c88fbe250164affd107bc8057771f3f4d",
  2390 + "shasum": ""
  2391 + },
  2392 + "require": {
  2393 + "php": ">=5.3.9"
  2394 + },
  2395 + "type": "library",
  2396 + "extra": {
  2397 + "branch-alias": {
  2398 + "dev-master": "2.7-dev"
  2399 + }
  2400 + },
  2401 + "autoload": {
  2402 + "psr-4": {
  2403 + "Symfony\\Component\\Yaml\\": ""
  2404 + }
  2405 + },
  2406 + "notification-url": "https://packagist.org/downloads/",
  2407 + "license": [
  2408 + "MIT"
  2409 + ],
  2410 + "authors": [
  2411 + {
  2412 + "name": "Fabien Potencier",
  2413 + "email": "fabien@symfony.com"
  2414 + },
  2415 + {
  2416 + "name": "Symfony Community",
  2417 + "homepage": "https://symfony.com/contributors"
  2418 + }
  2419 + ],
  2420 + "description": "Symfony Yaml Component",
  2421 + "homepage": "https://symfony.com",
  2422 + "time": "2015-10-11 09:39:48"
  2423 + },
  2424 + {
  2425 + "name": "yiisoft/yii2",
  2426 + "version": "2.0.6",
  2427 + "source": {
  2428 + "type": "git",
  2429 + "url": "https://github.com/yiisoft/yii2-framework.git",
  2430 + "reference": "f42b2eb80f61992438661b01d0d74c6738e2ff38"
  2431 + },
  2432 + "dist": {
  2433 + "type": "zip",
  2434 + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/f42b2eb80f61992438661b01d0d74c6738e2ff38",
  2435 + "reference": "f42b2eb80f61992438661b01d0d74c6738e2ff38",
  2436 + "shasum": ""
  2437 + },
  2438 + "require": {
  2439 + "bower-asset/jquery": "2.1.*@stable | 1.11.*@stable",
  2440 + "bower-asset/jquery.inputmask": "3.1.*",
  2441 + "bower-asset/punycode": "1.3.*",
  2442 + "bower-asset/yii2-pjax": ">=2.0.1",
  2443 + "cebe/markdown": "~1.0.0 | ~1.1.0",
  2444 + "ext-mbstring": "*",
  2445 + "ezyang/htmlpurifier": "4.6.*",
  2446 + "lib-pcre": "*",
  2447 + "php": ">=5.4.0",
  2448 + "yiisoft/yii2-composer": "*"
  2449 + },
  2450 + "bin": [
  2451 + "yii"
  2452 + ],
  2453 + "type": "library",
  2454 + "extra": {
  2455 + "branch-alias": {
  2456 + "dev-master": "2.0.x-dev"
  2457 + }
  2458 + },
  2459 + "autoload": {
  2460 + "psr-4": {
  2461 + "yii\\": ""
  2462 + }
  2463 + },
  2464 + "notification-url": "https://packagist.org/downloads/",
  2465 + "license": [
  2466 + "BSD-3-Clause"
  2467 + ],
  2468 + "authors": [
  2469 + {
  2470 + "name": "Qiang Xue",
  2471 + "email": "qiang.xue@gmail.com",
  2472 + "homepage": "http://www.yiiframework.com/",
  2473 + "role": "Founder and project lead"
  2474 + },
  2475 + {
  2476 + "name": "Alexander Makarov",
  2477 + "email": "sam@rmcreative.ru",
  2478 + "homepage": "http://rmcreative.ru/",
  2479 + "role": "Core framework development"
  2480 + },
  2481 + {
  2482 + "name": "Maurizio Domba",
  2483 + "homepage": "http://mdomba.info/",
  2484 + "role": "Core framework development"
  2485 + },
  2486 + {
  2487 + "name": "Carsten Brandt",
  2488 + "email": "mail@cebe.cc",
  2489 + "homepage": "http://cebe.cc/",
  2490 + "role": "Core framework development"
  2491 + },
  2492 + {
  2493 + "name": "Timur Ruziev",
  2494 + "email": "resurtm@gmail.com",
  2495 + "homepage": "http://resurtm.com/",
  2496 + "role": "Core framework development"
  2497 + },
  2498 + {
  2499 + "name": "Paul Klimov",
  2500 + "email": "klimov.paul@gmail.com",
  2501 + "role": "Core framework development"
  2502 + }
  2503 + ],
  2504 + "description": "Yii PHP Framework Version 2",
  2505 + "homepage": "http://www.yiiframework.com/",
  2506 + "keywords": [
  2507 + "framework",
  2508 + "yii2"
  2509 + ],
  2510 + "time": "2015-08-05 22:00:30"
  2511 + },
  2512 + {
  2513 + "name": "yiisoft/yii2-bootstrap",
  2514 + "version": "2.0.5",
  2515 + "source": {
  2516 + "type": "git",
  2517 + "url": "https://github.com/yiisoft/yii2-bootstrap.git",
  2518 + "reference": "1464f93834b1d5edb1f5625f7ffd6c3723fa4923"
  2519 + },
  2520 + "dist": {
  2521 + "type": "zip",
  2522 + "url": "https://api.github.com/repos/yiisoft/yii2-bootstrap/zipball/1464f93834b1d5edb1f5625f7ffd6c3723fa4923",
  2523 + "reference": "1464f93834b1d5edb1f5625f7ffd6c3723fa4923",
  2524 + "shasum": ""
  2525 + },
  2526 + "require": {
  2527 + "bower-asset/bootstrap": "3.3.* | 3.2.* | 3.1.*",
  2528 + "yiisoft/yii2": ">=2.0.6"
  2529 + },
  2530 + "type": "yii2-extension",
  2531 + "extra": {
  2532 + "branch-alias": {
  2533 + "dev-master": "2.0.x-dev"
  2534 + },
  2535 + "asset-installer-paths": {
  2536 + "npm-asset-library": "vendor/npm",
  2537 + "bower-asset-library": "vendor/bower"
  2538 + }
  2539 + },
  2540 + "autoload": {
  2541 + "psr-4": {
  2542 + "yii\\bootstrap\\": ""
  2543 + }
  2544 + },
  2545 + "notification-url": "https://packagist.org/downloads/",
  2546 + "license": [
  2547 + "BSD-3-Clause"
  2548 + ],
  2549 + "authors": [
  2550 + {
  2551 + "name": "Qiang Xue",
  2552 + "email": "qiang.xue@gmail.com"
  2553 + }
  2554 + ],
  2555 + "description": "The Twitter Bootstrap extension for the Yii framework",
  2556 + "keywords": [
  2557 + "bootstrap",
  2558 + "yii2"
  2559 + ],
  2560 + "time": "2015-09-23 17:48:24"
  2561 + },
  2562 + {
  2563 + "name": "yiisoft/yii2-composer",
  2564 + "version": "2.0.3",
  2565 + "source": {
  2566 + "type": "git",
  2567 + "url": "https://github.com/yiisoft/yii2-composer.git",
  2568 + "reference": "ca8d23707ae47d20b0454e4b135c156f6da6d7be"
  2569 + },
  2570 + "dist": {
  2571 + "type": "zip",
  2572 + "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/ca8d23707ae47d20b0454e4b135c156f6da6d7be",
  2573 + "reference": "ca8d23707ae47d20b0454e4b135c156f6da6d7be",
  2574 + "shasum": ""
  2575 + },
  2576 + "require": {
  2577 + "composer-plugin-api": "1.0.0"
  2578 + },
  2579 + "type": "composer-plugin",
  2580 + "extra": {
  2581 + "class": "yii\\composer\\Plugin",
  2582 + "branch-alias": {
  2583 + "dev-master": "2.0.x-dev"
  2584 + }
  2585 + },
  2586 + "autoload": {
  2587 + "psr-4": {
  2588 + "yii\\composer\\": ""
  2589 + }
  2590 + },
  2591 + "notification-url": "https://packagist.org/downloads/",
  2592 + "license": [
  2593 + "BSD-3-Clause"
  2594 + ],
  2595 + "authors": [
  2596 + {
  2597 + "name": "Qiang Xue",
  2598 + "email": "qiang.xue@gmail.com"
  2599 + }
  2600 + ],
  2601 + "description": "The composer plugin for Yii extension installer",
  2602 + "keywords": [
  2603 + "composer",
  2604 + "extension installer",
  2605 + "yii2"
  2606 + ],
  2607 + "time": "2015-03-01 06:22:44"
  2608 + },
  2609 + {
  2610 + "name": "yiisoft/yii2-imagine",
  2611 + "version": "2.0.3",
  2612 + "source": {
  2613 + "type": "git",
  2614 + "url": "https://github.com/yiisoft/yii2-imagine.git",
  2615 + "reference": "0961343138b65bba447de84b2b300899617e6acc"
  2616 + },
  2617 + "dist": {
  2618 + "type": "zip",
  2619 + "url": "https://api.github.com/repos/yiisoft/yii2-imagine/zipball/0961343138b65bba447de84b2b300899617e6acc",
  2620 + "reference": "0961343138b65bba447de84b2b300899617e6acc",
  2621 + "shasum": ""
  2622 + },
  2623 + "require": {
  2624 + "imagine/imagine": "0.5.*",
  2625 + "yiisoft/yii2": "*"
  2626 + },
  2627 + "type": "yii2-extension",
  2628 + "extra": {
  2629 + "branch-alias": {
  2630 + "dev-master": "2.0.x-dev"
  2631 + }
  2632 + },
  2633 + "autoload": {
  2634 + "psr-4": {
  2635 + "yii\\imagine\\": ""
  2636 + }
  2637 + },
  2638 + "notification-url": "https://packagist.org/downloads/",
  2639 + "license": [
  2640 + "BSD-3-Clause"
  2641 + ],
  2642 + "authors": [
  2643 + {
  2644 + "name": "Antonio Ramirez",
  2645 + "email": "amigo.cobos@gmail.com"
  2646 + }
  2647 + ],
  2648 + "description": "The Imagine integration for the Yii framework",
  2649 + "keywords": [
  2650 + "helper",
  2651 + "image",
  2652 + "imagine",
  2653 + "yii2"
  2654 + ],
  2655 + "time": "2015-03-01 06:22:44"
  2656 + },
  2657 + {
  2658 + "name": "yiisoft/yii2-swiftmailer",
  2659 + "version": "2.0.4",
  2660 + "source": {
  2661 + "type": "git",
  2662 + "url": "https://github.com/yiisoft/yii2-swiftmailer.git",
  2663 + "reference": "4ec435a89e30b203cea99770910fb5499cb3627a"
  2664 + },
  2665 + "dist": {
  2666 + "type": "zip",
  2667 + "url": "https://api.github.com/repos/yiisoft/yii2-swiftmailer/zipball/4ec435a89e30b203cea99770910fb5499cb3627a",
  2668 + "reference": "4ec435a89e30b203cea99770910fb5499cb3627a",
  2669 + "shasum": ""
  2670 + },
  2671 + "require": {
  2672 + "swiftmailer/swiftmailer": "~5.0",
  2673 + "yiisoft/yii2": ">=2.0.4"
  2674 + },
  2675 + "type": "yii2-extension",
  2676 + "extra": {
  2677 + "branch-alias": {
  2678 + "dev-master": "2.0.x-dev"
  2679 + }
  2680 + },
  2681 + "autoload": {
  2682 + "psr-4": {
  2683 + "yii\\swiftmailer\\": ""
  2684 + }
  2685 + },
  2686 + "notification-url": "https://packagist.org/downloads/",
  2687 + "license": [
  2688 + "BSD-3-Clause"
  2689 + ],
  2690 + "authors": [
  2691 + {
  2692 + "name": "Paul Klimov",
  2693 + "email": "klimov.paul@gmail.com"
  2694 + }
  2695 + ],
  2696 + "description": "The SwiftMailer integration for the Yii framework",
  2697 + "keywords": [
  2698 + "email",
  2699 + "mail",
  2700 + "mailer",
  2701 + "swift",
  2702 + "swiftmailer",
  2703 + "yii2"
  2704 + ],
  2705 + "time": "2015-05-10 22:12:32"
  2706 + }
  2707 + ],
  2708 + "packages-dev": [
  2709 + {
  2710 + "name": "bower-asset/typeahead.js",
  2711 + "version": "v0.10.5",
  2712 + "source": {
  2713 + "type": "git",
  2714 + "url": "https://github.com/twitter/typeahead.js.git",
  2715 + "reference": "5f198b87d1af845da502ea9df93a5e84801ce742"
  2716 + },
  2717 + "dist": {
  2718 + "type": "zip",
  2719 + "url": "https://api.github.com/repos/twitter/typeahead.js/zipball/5f198b87d1af845da502ea9df93a5e84801ce742",
  2720 + "reference": "5f198b87d1af845da502ea9df93a5e84801ce742",
  2721 + "shasum": ""
  2722 + },
  2723 + "require": {
  2724 + "bower-asset/jquery": ">=1.7"
  2725 + },
  2726 + "require-dev": {
  2727 + "bower-asset/jasmine-ajax": "~1.3.1",
  2728 + "bower-asset/jasmine-jquery": "~1.5.2",
  2729 + "bower-asset/jquery": "~1.7"
  2730 + },
  2731 + "type": "bower-asset-library",
  2732 + "extra": {
  2733 + "bower-asset-main": "dist/typeahead.bundle.js"
  2734 + }
  2735 + },
  2736 + {
  2737 + "name": "fzaninotto/faker",
  2738 + "version": "v1.5.0",
  2739 + "source": {
  2740 + "type": "git",
  2741 + "url": "https://github.com/fzaninotto/Faker.git",
  2742 + "reference": "d0190b156bcca848d401fb80f31f504f37141c8d"
  2743 + },
  2744 + "dist": {
  2745 + "type": "zip",
  2746 + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d",
  2747 + "reference": "d0190b156bcca848d401fb80f31f504f37141c8d",
  2748 + "shasum": ""
  2749 + },
  2750 + "require": {
  2751 + "php": ">=5.3.3"
  2752 + },
  2753 + "require-dev": {
  2754 + "phpunit/phpunit": "~4.0",
  2755 + "squizlabs/php_codesniffer": "~1.5"
  2756 + },
  2757 + "suggest": {
  2758 + "ext-intl": "*"
  2759 + },
  2760 + "type": "library",
  2761 + "extra": {
  2762 + "branch-alias": {
  2763 + "dev-master": "1.5.x-dev"
  2764 + }
  2765 + },
  2766 + "autoload": {
  2767 + "psr-4": {
  2768 + "Faker\\": "src/Faker/"
  2769 + }
  2770 + },
  2771 + "notification-url": "https://packagist.org/downloads/",
  2772 + "license": [
  2773 + "MIT"
  2774 + ],
  2775 + "authors": [
  2776 + {
  2777 + "name": "François Zaninotto"
  2778 + }
  2779 + ],
  2780 + "description": "Faker is a PHP library that generates fake data for you.",
  2781 + "keywords": [
  2782 + "data",
  2783 + "faker",
  2784 + "fixtures"
  2785 + ],
  2786 + "time": "2015-05-29 06:29:14"
  2787 + },
  2788 + {
  2789 + "name": "phpspec/php-diff",
  2790 + "version": "v1.0.2",
  2791 + "source": {
  2792 + "type": "git",
  2793 + "url": "https://github.com/phpspec/php-diff.git",
  2794 + "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a"
  2795 + },
  2796 + "dist": {
  2797 + "type": "zip",
  2798 + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a",
  2799 + "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a",
  2800 + "shasum": ""
  2801 + },
  2802 + "type": "library",
  2803 + "autoload": {
  2804 + "psr-0": {
  2805 + "Diff": "lib/"
  2806 + }
  2807 + },
  2808 + "notification-url": "https://packagist.org/downloads/",
  2809 + "license": [
  2810 + "BSD-3-Clause"
  2811 + ],
  2812 + "authors": [
  2813 + {
  2814 + "name": "Chris Boulton",
  2815 + "homepage": "http://github.com/chrisboulton",
  2816 + "role": "Original developer"
  2817 + }
  2818 + ],
  2819 + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).",
  2820 + "time": "2013-11-01 13:02:21"
  2821 + },
  2822 + {
  2823 + "name": "yiisoft/yii2-codeception",
  2824 + "version": "2.0.4",
  2825 + "source": {
  2826 + "type": "git",
  2827 + "url": "https://github.com/yiisoft/yii2-codeception.git",
  2828 + "reference": "de5007e7a99359597abbfe1c88dca3ce620061c5"
  2829 + },
  2830 + "dist": {
  2831 + "type": "zip",
  2832 + "url": "https://api.github.com/repos/yiisoft/yii2-codeception/zipball/de5007e7a99359597abbfe1c88dca3ce620061c5",
  2833 + "reference": "de5007e7a99359597abbfe1c88dca3ce620061c5",
  2834 + "shasum": ""
  2835 + },
  2836 + "require": {
  2837 + "yiisoft/yii2": ">=2.0.4"
  2838 + },
  2839 + "type": "yii2-extension",
  2840 + "extra": {
  2841 + "branch-alias": {
  2842 + "dev-master": "2.0.x-dev"
  2843 + }
  2844 + },
  2845 + "autoload": {
  2846 + "psr-4": {
  2847 + "yii\\codeception\\": ""
  2848 + }
  2849 + },
  2850 + "notification-url": "https://packagist.org/downloads/",
  2851 + "license": [
  2852 + "BSD-3-Clause"
  2853 + ],
  2854 + "authors": [
  2855 + {
  2856 + "name": "Mark Jebri",
  2857 + "email": "mark.github@yandex.ru"
  2858 + }
  2859 + ],
  2860 + "description": "The Codeception integration for the Yii framework",
  2861 + "keywords": [
  2862 + "codeception",
  2863 + "yii2"
  2864 + ],
  2865 + "time": "2015-05-10 22:08:30"
  2866 + },
  2867 + {
  2868 + "name": "yiisoft/yii2-debug",
  2869 + "version": "2.0.5",
  2870 + "source": {
  2871 + "type": "git",
  2872 + "url": "https://github.com/yiisoft/yii2-debug.git",
  2873 + "reference": "1b302e67521d46feb2413d9d96ca94ed82b39b0e"
  2874 + },
  2875 + "dist": {
  2876 + "type": "zip",
  2877 + "url": "https://api.github.com/repos/yiisoft/yii2-debug/zipball/1b302e67521d46feb2413d9d96ca94ed82b39b0e",
  2878 + "reference": "1b302e67521d46feb2413d9d96ca94ed82b39b0e",
  2879 + "shasum": ""
  2880 + },
  2881 + "require": {
  2882 + "yiisoft/yii2": ">=2.0.4",
  2883 + "yiisoft/yii2-bootstrap": "*"
  2884 + },
  2885 + "type": "yii2-extension",
  2886 + "extra": {
  2887 + "branch-alias": {
  2888 + "dev-master": "2.0.x-dev"
  2889 + }
  2890 + },
  2891 + "autoload": {
  2892 + "psr-4": {
  2893 + "yii\\debug\\": ""
  2894 + }
  2895 + },
  2896 + "notification-url": "https://packagist.org/downloads/",
  2897 + "license": [
  2898 + "BSD-3-Clause"
  2899 + ],
  2900 + "authors": [
  2901 + {
  2902 + "name": "Qiang Xue",
  2903 + "email": "qiang.xue@gmail.com"
  2904 + }
  2905 + ],
  2906 + "description": "The debugger extension for the Yii framework",
  2907 + "keywords": [
  2908 + "debug",
  2909 + "debugger",
  2910 + "yii2"
  2911 + ],
  2912 + "time": "2015-08-06 16:14:06"
  2913 + },
  2914 + {
  2915 + "name": "yiisoft/yii2-faker",
  2916 + "version": "2.0.3",
  2917 + "source": {
  2918 + "type": "git",
  2919 + "url": "https://github.com/yiisoft/yii2-faker.git",
  2920 + "reference": "b88ca69ee226a3610b2c26c026c3203d7ac50f6c"
  2921 + },
  2922 + "dist": {
  2923 + "type": "zip",
  2924 + "url": "https://api.github.com/repos/yiisoft/yii2-faker/zipball/b88ca69ee226a3610b2c26c026c3203d7ac50f6c",
  2925 + "reference": "b88ca69ee226a3610b2c26c026c3203d7ac50f6c",
  2926 + "shasum": ""
  2927 + },
  2928 + "require": {
  2929 + "fzaninotto/faker": "*",
  2930 + "yiisoft/yii2": "*"
  2931 + },
  2932 + "type": "yii2-extension",
  2933 + "extra": {
  2934 + "branch-alias": {
  2935 + "dev-master": "2.0.x-dev"
  2936 + }
  2937 + },
  2938 + "autoload": {
  2939 + "psr-4": {
  2940 + "yii\\faker\\": ""
  2941 + }
  2942 + },
  2943 + "notification-url": "https://packagist.org/downloads/",
  2944 + "license": [
  2945 + "BSD-3-Clause"
  2946 + ],
  2947 + "authors": [
  2948 + {
  2949 + "name": "Mark Jebri",
  2950 + "email": "mark.github@yandex.ru"
  2951 + }
  2952 + ],
  2953 + "description": "Fixture generator. The Faker integration for the Yii framework.",
  2954 + "keywords": [
  2955 + "Fixture",
  2956 + "faker",
  2957 + "yii2"
  2958 + ],
  2959 + "time": "2015-03-01 06:22:44"
  2960 + },
  2961 + {
  2962 + "name": "yiisoft/yii2-gii",
  2963 + "version": "2.0.4",
  2964 + "source": {
  2965 + "type": "git",
  2966 + "url": "https://github.com/yiisoft/yii2-gii.git",
  2967 + "reference": "e5a023e8779bd774194842ec1b8fb4917cf04007"
  2968 + },
  2969 + "dist": {
  2970 + "type": "zip",
  2971 + "url": "https://api.github.com/repos/yiisoft/yii2-gii/zipball/e5a023e8779bd774194842ec1b8fb4917cf04007",
  2972 + "reference": "e5a023e8779bd774194842ec1b8fb4917cf04007",
  2973 + "shasum": ""
  2974 + },
  2975 + "require": {
  2976 + "bower-asset/typeahead.js": "0.10.*",
  2977 + "phpspec/php-diff": ">=1.0.2",
  2978 + "yiisoft/yii2": ">=2.0.4",
  2979 + "yiisoft/yii2-bootstrap": "~2.0"
  2980 + },
  2981 + "type": "yii2-extension",
  2982 + "extra": {
  2983 + "branch-alias": {
  2984 + "dev-master": "2.0.x-dev"
  2985 + },
  2986 + "asset-installer-paths": {
  2987 + "npm-asset-library": "vendor/npm",
  2988 + "bower-asset-library": "vendor/bower"
  2989 + }
  2990 + },
  2991 + "autoload": {
  2992 + "psr-4": {
  2993 + "yii\\gii\\": ""
  2994 + }
  2995 + },
  2996 + "notification-url": "https://packagist.org/downloads/",
  2997 + "license": [
  2998 + "BSD-3-Clause"
  2999 + ],
  3000 + "authors": [
  3001 + {
  3002 + "name": "Qiang Xue",
  3003 + "email": "qiang.xue@gmail.com"
  3004 + }
  3005 + ],
  3006 + "description": "The Gii extension for the Yii framework",
  3007 + "keywords": [
  3008 + "code generator",
  3009 + "gii",
  3010 + "yii2"
  3011 + ],
  3012 + "time": "2015-05-10 22:09:31"
  3013 + }
  3014 + ],
  3015 + "aliases": [],
  3016 + "minimum-stability": "stable",
  3017 + "stability-flags": {
  3018 + "artweb/yii2-multiparser": 20,
  3019 + "kartik-v/yii2-datecontrol": 20
  3020 + },
  3021 + "prefer-stable": false,
  3022 + "prefer-lowest": false,
  3023 + "platform": {
  3024 + "php": ">=5.4.0"
  3025 + },
  3026 + "platform-dev": []
  3027 +}
... ...
console/controllers/ParserController.php
... ... @@ -67,11 +67,11 @@ class ParserController extends Controller
67 67 }
68 68  
69 69 $writer = new PriceWriter();
70   - $writer->configuration = $configuration;
71   - $writer->data = $data;
72   - $writer->mode = 1; //console-режим
  70 + $writer->setConfiguration( $configuration );
  71 + $writer->setData( $data );
  72 + $writer->setMode( 1 ); //console-режим
73 73  
74   - if ( $writer->writeDataToDB() ){
  74 + if ( $writer->writePriceToDB() ){
75 75  
76 76 return true;
77 77 }
... ...