/**
  * Creates a new Apis model from a swagger url.
  * If creation is successful, the browser will be redirected to the 'view' page.
  *
  * @param integer $swaggerId
  *
  * @return mixed
  */
 public function actionCreateapi($swaggerId)
 {
     $swaggerAPI = $this->findModel($swaggerId);
     $myId = \Yii::$app->user->id;
     $query = ObjectFromSwagger::find();
     $query->where(['api_from_swagger' => $swaggerId]);
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     // Check if there is already another API with the same name, that has not be created by me
     $alreadyTakenName = Apis::find();
     $alreadyTakenName->joinWith(['createdBy']);
     $alreadyTakenName->where(['name' => $swaggerAPI->name]);
     $alreadyTakenName->where(['not', 'created_by' => $myId]);
     if ($swaggerAPI->load(Yii::$app->request->post()) && $swaggerAPI->save()) {
         if ($alreadyTakenName->one() === null) {
             $buildFromSwagger = new BuildFromSwagger();
             $buildFromSwagger->setSwaggerAPI($swaggerId);
             if ($buildFromSwagger->BuildAPI()) {
                 // Build all the Objects
                 $buildFromSwagger->BuildObjects();
                 // Notify users who follow me!
                 $myId = \Yii::$app->user->id;
                 $change = new NotifUserHelper();
                 $followersNotified = $change->userChangedCreatedApi($myId);
                 return $this->redirect(['apis/view', 'id' => $buildFromSwagger->getAPIId(), 'followersNotified' => $followersNotified]);
             }
         }
     }
     // Check if there is already an API with same version by me. If there is, display a message.
     $message = Apis::find()->where(['name' => $swaggerAPI->name, 'created_by' => $myId])->one() === null ? '' : 'Overwrite already existing API?';
     $message = $alreadyTakenName->one() === null ? $message : 'This API name is already taken. Another one should be provided!';
     return $this->render('createapi', ['model' => $swaggerAPI, 'dataProvider' => $dataProvider, 'message' => $message]);
 }
 /**
  * Builds the ObjectFromSwagger Model
  */
 public function buildSwaggerObjects()
 {
     // Show all Objects brought from definition
     if (property_exists($this->resource, 'definitions')) {
         foreach ($this->resource->definitions as $keyObject => $valueObject) {
             // Get each Object with its name and description
             $object = new ObjectFromSwagger();
             $object->api_from_swagger = $this->getSwaggerAPIId();
             $object->name = property_exists($valueObject, 'title') ? $valueObject->title : $keyObject;
             $object->description = property_exists($valueObject, 'description') ? $valueObject->description : '';
             $object->methods = '';
             $object->save();
         }
     }
     //        if (property_exists($this->resource, 'paths')) {
     //            foreach ($this->resource->paths as $pathKey => $pathValue) {
     //                $swaggerObject = new ObjectFromSwagger;
     //                $swaggerObject->api_from_swagger = $this->getSwaggerAPIId();
     //                $swaggerObject->name = substr($pathKey, 1);
     //                $swaggerObject->methods = '';
     //
     //                foreach ($pathValue as $operationKey => $operationValue) {
     //                    // If there is a tag connected to this object, keep its description.
     //                    if (property_exists($operationValue, 'tags') and property_exists($this->resource, 'tags')) {
     //                        foreach ($this->resource->tags as $tag) {
     //                            if (property_exists($tag, 'name') and property_exists($tag, 'description') and ($tag->name === $operationValue->tags[0])) {
     //                                $swaggerObject->description = $tag->description;
     //                            }
     //                        }
     //                    }
     //                    // Keep track of the methods used. Only: get, post, put, delete. No: $ref, options, head, patch, parameters
     //                    switch ($operationKey) {
     //                        case 'get':
     //                        case 'post':
     //                        case 'put':
     //                        case 'delete':
     //                            $swaggerObject->methods .= $operationKey . ' ';
     //                            break;
     //                    }
     //                }
     //
     //                $swaggerObject->save();
     //            }
     //        }
 }
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getObjectFromSwaggers()
 {
     return $this->hasMany(ObjectFromSwagger::className(), ['api_from_swagger' => 'id']);
 }