public function safeUp() { $this->addColumn('{{%object_cbs}}', 'id', Schema::TYPE_PK); $this->addColumn('{{%object_cbs}}', 'created_at', Schema::TYPE_INTEGER . ' NOT NULL'); $this->addColumn('{{%object_cbs}}', 'updated_at', Schema::TYPE_INTEGER . ' NOT NULL'); $query = \app\models\Objects::find(); $query->where(['not', ['cbs' => null]]); $dataProvider = new \yii\data\ActiveDataProvider(['query' => $query]); $objectsArray = $dataProvider->getModels(); foreach ($objectsArray as $objects) { $cbsNames = explode(',', $objects->cbs); foreach ($cbsNames as $cbsName) { // Find the CBS from APIs that matches the name that was saved as a text before $cbs = \app\models\Apis::findOne(['name' => $cbsName]); if ($cbs) { $objectsCBS = new \app\models\ObjectCBS(); $objectsCBS->object = $objects->id; $objectsCBS->cbs = $cbs->id; $objectsCBS->save(); } } } // Drop column cbs from Objects Table that is not needed anymore $this->dropColumn('{{%objects}}', 'cbs'); }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Objects::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andFilterWhere(['id' => $this->id]); $query->andFilterWhere(['like', 'name', $this->name]); return $dataProvider; }
function BuildObject($objectName, $objectDescription) { $model = Objects::find()->where(['name' => $objectName])->one(); if ($model === null) { $model = new Objects(); } else { Properties::deleteAll(['object' => $model->id]); } // If APIS_addressmodel keep only addressmodel and make it Addressmodel // If Checkin_openicheckin keep only checkin and make it Checkin $model->name = $objectName; $pos = strpos($model->name, '_'); if ($pos !== false) { $model->name = substr($model->name, $pos + 1); } $model->name = str_replace("openi", "", $model->name); $model->name = ucfirst($model->name); $model->description = $objectDescription; $model->api = $this->_apiID; $model->privacy = 'public'; $model->save(); $this->_objectID = $model->id; }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Objects::find(); $query->joinWith(['createdBy']); $query->where(['or', ['privacy' => 'public'], ['privacy' => 'protected'], ['privacy' => 'private', 'created_by' => Yii::$app->getUser()->id]]); $query->where(['not in', 'name', ['Addressmodel', 'Timemodel', 'Durationmodel', 'Frommodel', 'Locationmodel', 'Sizemodel', 'Tagsmodel', 'Applicationmodel', 'Basefilemodel', 'Organizationmodel', 'Personmodel', 'Placemodel', 'Productmodel', 'Servicemodel', 'Cartproductlist', 'Cartservicelist', 'Cart_target_id', 'Orderproductlist', 'Orderservicelist', 'Registeredapplication_user']]); $dataProvider = new ActiveDataProvider(['query' => $query]); $dataProvider->sort->attributes['createdBy.username'] = ['asc' => ['user.username' => SORT_ASC], 'desc' => ['user.username' => SORT_DESC]]; if (!($this->load($params) && $this->validate())) { return $dataProvider; } $query->andFilterWhere(['id' => $this->id, 'api' => $this->api, 'inherited' => $this->inherited, 'created_by' => $this->created_by, 'updated_by' => $this->updated_by, 'created_at' => $this->created_at, 'updated_at' => $this->updated_at, 'votes_up' => $this->votes_up, 'votes_down' => $this->votes_down, 'proposed' => $this->proposed]); $query->andFilterWhere(['like', 'name', $this->name])->andFilterWhere(['like', 'description', $this->description])->andFilterWhere(['like', 'privacy', $this->privacy])->andFilterWhere(['like', 'methods', $this->methods])->andFilterWhere(['like', 'schema_org', $this->schema_org]); return $dataProvider; }
/** * Updates an existing Devices model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id * @return mixed */ public function actionUpdate($id) { $model = $this->findModel($id); $listparent = Devices::find()->all(); $listobject = Objects::find()->all(); $listbrend = Brends::find()->all(); $listinterface = Interfaces::find()->all(); $liststate = States::find()->all(); $listype = Types::find()->all(); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('update', ['model' => $model, 'listparent' => $listparent, 'listobject' => $listobject, 'listbrend' => $listbrend, 'listinterface' => $listinterface, 'liststate' => $liststate, 'listype' => $listype]); } }
/** * @return \yii\db\ActiveQuery */ public function getObjects() { return $this->hasMany(Objects::className(), ['cbs' => 'id']); }
/** * Displays a User model. * @param integer $id * @param boolean $followed * @return mixed */ public function actionView($id, $followed = null) { // If I'm trying to view myself then redirect to index $myId = \Yii::$app->user->id; if ($myId == $id) { return $this->redirect(['index']); } $model = $this->findModel($id); $votedUpAPIsArray = array_filter(explode(',', $model->votes_up_apis)); $votedUpAPIsArrayInt = array_map('intval', $votedUpAPIsArray); $votedUpAPIsQuery = Apis::find()->where(['id' => $votedUpAPIsArrayInt]); $votedUpAPIsDataProvider = new ActiveDataProvider(['query' => $votedUpAPIsQuery, 'sort' => false, 'pagination' => ['pageSize' => 5]]); $votedDownAPIsArray = array_filter(explode(',', $model->votes_down_apis)); $votedDownAPIsArrayInt = array_map('intval', $votedDownAPIsArray); $votedDownAPIsQuery = Apis::find()->where(['id' => $votedDownAPIsArrayInt]); $votedDownAPIsDataProvider = new ActiveDataProvider(['query' => $votedDownAPIsQuery, 'sort' => false, 'pagination' => ['pageSize' => 5]]); $votedUpObjectsArray = array_filter(explode(',', $model->votes_up_objects)); $votedUpObjectsArrayInt = array_map('intval', $votedUpObjectsArray); $votedUpObjectsQuery = Objects::find()->where(['id' => $votedUpObjectsArrayInt]); $votedUpObjectsDataProvider = new ActiveDataProvider(['query' => $votedUpObjectsQuery, 'sort' => false, 'pagination' => ['pageSize' => 5]]); $votedDownObjectsArray = array_filter(explode(',', $model->votes_down_objects)); $votedDownObjectsArrayInt = array_map('intval', $votedDownObjectsArray); $votedDownObjectsQuery = Objects::find()->where(['id' => $votedDownObjectsArrayInt]); $votedDownObjectsDataProvider = new ActiveDataProvider(['query' => $votedDownObjectsQuery, 'sort' => false, 'pagination' => ['pageSize' => 5]]); $votedUpCommentsArray = array_filter(explode(',', $model->votes_up_comments)); $votedUpCommentsArrayInt = array_map('intval', $votedUpCommentsArray); $votedUpCommentsQuery = Comments::find()->where(['id' => $votedUpCommentsArrayInt]); $votedUpCommentsDataProvider = new ActiveDataProvider(['query' => $votedUpCommentsQuery, 'sort' => false, 'pagination' => ['pageSize' => 5]]); $votedDownCommentsArray = array_filter(explode(',', $model->votes_down_comments)); $votedDownCommentsArrayInt = array_map('intval', $votedDownCommentsArray); $votedDownCommentsQuery = Comments::find()->where(['id' => $votedDownCommentsArrayInt]); $votedDownCommentsDataProvider = new ActiveDataProvider(['query' => $votedDownCommentsQuery, 'sort' => false, 'pagination' => ['pageSize' => 5]]); $followedUsers = $model->getFollowees(); $followedUsersDataProvider = new ActiveDataProvider(['query' => $followedUsers, 'sort' => false, 'pagination' => ['pageSize' => 5]]); $followedApis = $model->getFollowingApis(); $followedApisDataProvider = new ActiveDataProvider(['query' => $followedApis, 'sort' => false, 'pagination' => ['pageSize' => 5]]); $followUserUser = FollowUserUser::findOne(['follower' => $myId, 'followee' => $id]); $doIFollow = false; if ($followUserUser != null) { $doIFollow = true; $followUserUser->last_seen = date("Y-m-d H:i:s"); $followUserUser->changed_photo = false; $followUserUser->changed_linkedin = false; $followUserUser->changed_github = false; $followUserUser->created_api = null; $followUserUser->changed_upvotes_apis = null; $followUserUser->changed_downvotes_apis = null; $followUserUser->save(); } $followers = FollowUserUser::find(['followee' => $id])->count(); $this->view->params['followed'] = $followed; return $this->render('view', ['model' => $model, 'votedUpAPIsDataProvider' => $votedUpAPIsDataProvider, 'votedDownAPIsDataProvider' => $votedDownAPIsDataProvider, 'votedUpObjectsDataProvider' => $votedUpObjectsDataProvider, 'votedDownObjectsDataProvider' => $votedDownObjectsDataProvider, 'votedUpCommentsDataProvider' => $votedUpCommentsDataProvider, 'votedDownCommentsDataProvider' => $votedDownCommentsDataProvider, 'followedUsersDataProvider' => $followedUsersDataProvider, 'followedApisDataProvider' => $followedApisDataProvider, 'doIFollow' => $doIFollow, 'followers' => $followers]); }
/** * Finds the Objects model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return Objects the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findObjectModel($id) { if (($model = Objects::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }
/** * Publishes an API Swagger. * If publish is successful, the browser will be redirected to the 'swagger/index?url=$model->name' page. * @param integer $id * @return mixed */ public function actionPublish($id) { $api = $this->findModel($id); $api->published = 1; $api->save(); $apiName = preg_replace('/\\s+/', '', $api->name); $change = new NotifAPIHelper(); $followersNotified = $change->apiChangedPublished($id); $basePathPart = Url::canonical(); $basePathPart = explode('swagger', $basePathPart); $basePathPart = explode('hydra', $basePathPart[0]); $basePathPart = explode('raml', $basePathPart[0]); $basePathPart = explode('wadl', $basePathPart[0]); $basePath = $basePathPart[0] . $apiName . '/'; $objects = Objects::findAll(['api' => $id]); $swaggerJSON = new BuildSwaggerAnnotationsOnly(); $swaggerJSON->BuildJSON(); foreach ($objects as $object) { $object->methods = explode(',', $object->methods); // If this Resource has Methods if ($object->methods !== ['']) { $swaggerJSON->BuildResource($api->version, '1.2', $basePath, $object->name); foreach ($object->methods as $methodName) { // $methodParts[method_name, path] $tempMethodParts = explode(' ', $methodName); foreach ($tempMethodParts as $key => $methodPart) { if ($key === 0) { $methodParts[$key] = $methodPart; $methodParts[1] = ''; } else { $methodParts[1] .= $methodPart; } } $upper_method = strtoupper($methodParts[0]); // $pathParts = [object, ({id}, connection)] $pathParts = explode('/', $methodParts[1]); $numOfPathParts = count($pathParts); $swaggerJSON->BuildAPI($methodParts[1], NULL); $summary = ''; $nickname = ''; $returnType = ''; switch ($upper_method) { case 'GET': switch ($numOfPathParts) { case 1: $summary = 'Retrieve a list of ' . $pathParts[0]; $nickname = 'Get_all_' . $pathParts[0]; $returnType = 'list_' . $pathParts[0]; break; case 2: $summary = 'Retrieve one ' . $pathParts[0]; $nickname = 'Get_one_' . $pathParts[0]; $returnType = $pathParts[0]; break; case 3: $summary = 'Retrieve a list of ' . $pathParts[0] . ' ' . $pathParts[2]; $nickname = 'Get_all_' . $pathParts[2]; $returnType = 'list_' . $pathParts[2]; } break; case 'POST': switch ($numOfPathParts) { case 1: $summary = 'Create a new ' . $pathParts[0] . ' object'; $nickname = 'Post_one_' . $pathParts[0]; $returnType = $pathParts[0]; break; case 3: $summary = 'Create a new ' . $pathParts[2] . 'as a cconection of ' . $pathParts[0]; $nickname = 'Post_one_' . $pathParts[2]; $returnType = $pathParts[2] . '_post'; } break; case 'PUT': switch ($numOfPathParts) { case 2: $summary = 'Change a particular ' . $pathParts[0]; $nickname = 'Put_' . $pathParts[0]; $returnType = $pathParts[0]; } break; case 'DELETE': switch ($numOfPathParts) { case 1: $summary = 'Delete all ' . $pathParts[0]; $nickname = 'Delete_all_' . $pathParts[0]; $returnType = 'list_' . $pathParts[0]; break; case 2: $summary = 'Delete one ' . $pathParts[0]; $nickname = 'Delete_one_' . $pathParts[0]; $returnType = 'boolean'; break; case 3: $summary = 'Delete all ' . $pathParts[2] . ' connections of ' . $pathParts[0]; $nickname = 'Delete_all_' . $pathParts[0]; $returnType = 'boolean'; } break; } $swaggerJSON->BuildOperation($upper_method, $summary, '', $returnType, $nickname); if ($numOfPathParts > 1) { $swaggerJSON->BuildParameter('id', 'Primary key of resource', true, 'integer', 'body'); } if ($upper_method === 'POST' or $upper_method === 'PUT') { $swaggerJSON->BuildParameter($pathParts[0], 'Model of resource', true, $pathParts[0] . '_post_put', 'query'); } $swaggerJSON->CloseOperation(); $swaggerJSON->CloseAPI(); } $swaggerJSON->CloseResource(); // ALL THE DIFFERENT MODEL TYPES THAT NEED TO BE IMPLEMENTED // Meta // $pathParts[0] + Meta // $pathParts[0] . '_post_put' // $pathParts[2] . '_post' // 'list_' . $pathParts[0] // 'list_' . $pathParts[2] // THE MODELS FOR THE CONNECTIONS HAVE TO BE BUILT WHEN THAT PARTICULAR OBJECT COMES IN $swaggerJSON->BuildModel('Meta'); $swaggerJSON->BuildProperty('previous', 'Uri of the previous page relative to the current page settings.', 'string'); $swaggerJSON->BuildProperty('next', 'Uri of the next page relative to the current page settings.', 'string'); $swaggerJSON->BuildProperty('total_count', 'Total items count for all the collection.', 'integer'); $swaggerJSON->BuildProperty('offset', 'Specify the offset to start displaying element on a page.', 'integer'); $swaggerJSON->BuildProperty('limit', 'Specify the number of element to display per page.', 'integer'); $swaggerJSON->CloseModel(); $properties = Properties::findAll(['object' => $object->id]); // $pathParts[0] + Meta $swaggerJSON->BuildModel($object->name); foreach ($properties as $property) { if ($property->type === 'byte') { $swaggerJSON->BuildProperty($property->name, $property->description, 'string', '', 'byte'); } else { if ($property->type === 'date') { $swaggerJSON->BuildProperty($property->name, $property->description, 'string', '', 'date'); } else { if ($property->type === 'dateTime') { $swaggerJSON->BuildProperty($property->name, $property->description, 'string', '', 'date-format'); } else { if ($property->type === 'long') { $swaggerJSON->BuildProperty($property->name, $property->description, 'integer', '', 'int64'); } else { switch ($property->type) { case 'Integer': case 'String': $property->type = strtolower($property->type); } $swaggerJSON->BuildProperty($property->name, $property->description, $property->type); } } } } } $swaggerJSON->BuildProperty('meta', '', 'Meta'); $swaggerJSON->CloseModel(); // $pathParts[0] . '_post_put' $swaggerJSON->BuildModel($object->name . '_post_put'); foreach ($properties as $property) { if ($property->name !== 'id') { if ($property->type === 'byte') { $swaggerJSON->BuildProperty($property->name, $property->description, 'string', '', 'byte'); } else { if ($property->type === 'date') { $swaggerJSON->BuildProperty($property->name, $property->description, 'string', '', 'date'); } else { if ($property->type === 'dateTime') { $swaggerJSON->BuildProperty($property->name, $property->description, 'string', '', 'date-format'); } else { if ($property->type === 'long') { $swaggerJSON->BuildProperty($property->name, $property->description, 'integer', '', 'int64'); } else { switch ($property->type) { case 'Integer': case 'String': $property->type = strtolower($property->type); } $swaggerJSON->BuildProperty($property->name, $property->description, $property->type); } } } } } } $swaggerJSON->CloseModel(); // 'list_' . $pathParts[0] $swaggerJSON->BuildModel('Objects_' . $object->name); $swaggerJSON->BuildProperty($object->name, '', 'array', $object->name); $swaggerJSON->CloseModel(); $swaggerJSON->BuildModel('list_' . $object->name); $swaggerJSON->BuildProperty('meta', '', 'Meta'); $swaggerJSON->BuildProperty('objects', '', 'Objects_' . $object->name); $swaggerJSON->CloseModel(); } } $swaggerJSON->CloseJSON(); $file = new FileManipulation(); $file->setFilename(ucfirst($apiName) . '/' . $apiName . '.php'); $file->makeDirectory(ucfirst($apiName) . '/'); $file->write_file($swaggerJSON->getSwaggerJSON()); // Actually Publish the API $_file = Yii::getAlias('@apisDirectory') . '/' . ucfirst($apiName); $swagger = new Swagger($_file); $basePathPart = explode('/apis/', $basePathPart[0]); $writeFiles = new FileManipulation(); $writeFiles->setFilename(ucfirst($apiName) . '/api-docs.json'); $writeFiles->write_file($swagger->getResourceList(array('output' => 'json', 'basePath' => $basePathPart[0] . '/api-docs/' . ucfirst($apiName)))); foreach ($swagger->registry as $api_name => $api_resource) { $writeFiles->setFilename(ucfirst($apiName) . '/' . $api_name); $writeFiles->write_file($swagger->getResource($api_name, array('output' => 'json'))); } return $apiName; }
use yii\helpers\Html; use yii\bootstrap\ActiveForm; /* @var $this yii\web\View */ /* @var $model app\models\Properties */ /* @var $form yii\widgets\ActiveForm */ /* @var $propertyDropdownList yii\helpers\ArrayHelper Has all the available datatypes (string, integer, etc.) and the public objects but itself to make foreign keys.*/ // Find all the IDs of the Objects that are contained in this API so that we can populate the DropdownList below. $objectsOfAPI = $model->object0->api0->objects; $objectsIDs = []; foreach ($objectsOfAPI as $object) { // Exclude our Object as it can't be FK to itself. if ($object->id != $model->object) { $objectsIDs[] = $object->id; } } $propertyDropdownList = ArrayHelper::map(Objects::find()->where(['and', ['in', 'id', $objectsIDs]])->all(), 'name', 'name'); $propertyDropdownList = ArrayHelper::merge(['integer' => 'integer', 'long' => 'long', 'float' => 'float', 'double' => 'double', 'string' => 'string', 'byte' => 'byte', 'boolean' => 'boolean', 'date' => 'date', 'dateTime' => 'dateTime', '--------' => '--------'], $propertyDropdownList); ?> <div class="properties-form"> <?php $form = ActiveForm::begin(); ?> <?php echo $form->field($model, 'name')->textInput(['maxlength' => 255, 'placeholder' => 'Property Name']); ?> <?php echo $form->field($model, 'description')->textInput(['maxlength' => 255, 'placeholder' => 'Property Description']);
/** * @return \yii\db\ActiveQuery */ public function getObject0() { return $this->hasOne(Objects::className(), ['id' => 'object']); }
/** * Build a new Object * * @param string $titleFromKey * @param object $value * * @return boolean */ public function BuildObject($titleFromKey, $value) { $object = new Objects(); $object->name = property_exists($value, 'title') ? $value->title : $titleFromKey; $object->description = property_exists($value, 'description') ? $value->description : ''; $object->api = $this->api->id; $object->privacy = $this->api->privacy; if ($object->save()) { if (property_exists($value, 'properties')) { return $this->BuildProperties($value->properties, $object->id); } return true; } else { return false; } }
/** * @inheritdoc */ public static function getList() { return Objects::find()->All(); }
use yii\helpers\ArrayHelper; use app\models\Objects; use app\models\Agents; /* @var $this yii\web\View */ /* @var $model app\models\Comission */ /* @var $form yii\widgets\ActiveForm */ ?> <div class="comission-form"> <?php $form = ActiveForm::begin(); ?> <?php echo $form->field($model, 'objects_id')->dropDownList(ArrayHelper::map(Objects::getList(), 'id', 'name')); ?> <?php echo $form->field($model, 'agents_id')->dropDownList(ArrayHelper::map(Agents::getList(), 'id', 'name')); ?> <?php echo $form->field($model, 'value')->textInput(); ?> <?php echo $form->field($model, 'is_episode')->checkBox(['checked' => 1]); ?> <?php echo $form->field($model, 'start_epizode')->textInput();
use app\models\States; use app\models\Types; use yii\helpers\ArrayHelper; /* @var $this yii\web\View */ /* @var $searchModel app\models\DevicesSearch */ /* @var $dataProvider yii\data\ActiveDataProvider */ $this->title = 'Devices'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="devices-index"> <h1><?php echo Html::encode($this->title); ?> </h1> <?php // echo $this->render('_search', ['model' => $searchModel]); ?> <p> <?php echo Html::a('Create Devices', ['create'], ['class' => 'btn btn-success']); ?> </p> <?php echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [['class' => 'yii\\grid\\SerialColumn'], 'name', 'description:ntext', ['attribute' => 'type', 'label' => 'Тип', 'value' => 'types.name', 'filter' => ArrayHelper::map(Types::find()->all(), 'id', 'name')], ['attribute' => 'state', 'label' => 'state', 'value' => 'states.name', 'filter' => ArrayHelper::map(States::find()->all(), 'id', 'name')], ['attribute' => 'idobject', 'label' => 'Обьект', 'value' => 'objects.name', 'filter' => ArrayHelper::map(Objects::find()->all(), 'id', 'name')], ['class' => 'yii\\grid\\ActionColumn']]]); ?> </div>
<?php use app\models\Objects; use yii\helpers\ArrayHelper; use yii\helpers\Html; use yii\bootstrap\ActiveForm; /* @var $this yii\web\View */ /* @var $model app\models\Objects */ /* @var $form yii\widgets\ActiveForm */ /* @var $objectDropdownList yii\helpers\ArrayHelper */ $query = Objects::find(); $query->where(['privacy' => 'public']); $query->where(['not in', 'name', ['Addressmodel', 'Timemodel', 'Durationmodel', 'Frommodel', 'Locationmodel', 'Sizemodel', 'Tagsmodel', 'Applicationmodel', 'Basefilemodel', 'Organizationmodel', 'Personmodel', 'Placemodel', 'Productmodel', 'Servicemodel', 'Cartproductlist', 'Cartservicelist', 'Cart_target_id', 'Orderproductlist', 'Orderservicelist', 'Registeredapplication_user']]); $objectDropdownList = ArrayHelper::map($query->all(), 'id', 'name'); ?> <div class="objects-form"> <?php $form = ActiveForm::begin(); ?> <?php echo $form->field($model, 'name')->textInput(['maxlength' => 255, 'placeholder' => 'Must be a unique name']); ?> <?php echo $form->field($model, 'inherited')->dropDownList($objectDropdownList, ['prompt' => '']); ?> <div class="form-group">