示例#1
0
 public function getSpeakers(string $id_slug = null)
 {
     $single_theme = isset($id_slug);
     if (!$id_slug) {
         /** @var Theme[] $themes */
         $theme = null;
         if (\Auth::check()) {
             $themes = \Auth::user()->all_themes;
         } else {
             $themes = Theme::mostFrequent();
         }
     } else {
         $id = unslug($id_slug)[0];
         $theme = Theme::find($id);
         $themes = [$theme];
         //FIXME: find a way to create a list of "related" themes
     }
     $speakers = [];
     foreach ($themes as $t) {
         //take care to not override $theme
         foreach ($t->sessions as $session) {
             /** @var \App\Models\Session $session */
             $speakers += $session->speakers->all();
         }
     }
     $themed_speakers = (bool) sizeof($speakers);
     if (!$speakers) {
         $speakers = User::findSpeakers();
     }
     return view('user.speakers', compact('theme', 'themes', 'speakers', 'themed_speakers', 'single_theme'));
 }
 /**
  * Updates an existing Form model (except id).
  * Updates an existing FormData model (only data field).
  * Updates an existing FormConfirmation model (except id & form_id).
  * Updates an existing FormEmail model (except id & form_id).
  * If update is successful, the browser will be redirected to the 'index' page.
  *
  * @param int|null $id
  * @return string|\yii\web\Response
  * @throws NotFoundHttpException
  * @throws \Exception
  * @throws \yii\db\Exception
  */
 public function actionSettings($id = null)
 {
     /** @var \app\models\Form $formModel */
     $formModel = $this->findFormModel($id);
     $formDataModel = $formModel->formData;
     $formConfirmationModel = $formModel->formConfirmation;
     $formEmailModel = $formModel->formEmail;
     $formUIModel = $formModel->ui;
     $postData = Yii::$app->request->post();
     if ($formModel->load($postData) && $formConfirmationModel->load($postData) && $formEmailModel->load($postData) && $formUIModel->load($postData) && Model::validateMultiple([$formModel, $formConfirmationModel, $formEmailModel, $formUIModel])) {
         // Save data in single transaction
         $transaction = Form::getDb()->beginTransaction();
         try {
             // Save Form Model
             if (!$formModel->save()) {
                 throw new \Exception(Yii::t("app", "Error saving Form Model"));
             }
             // Save data field in FormData model
             if (isset($postData['Form']['name'])) {
                 // Convert JSON Data of Form Data Model to PHP Array
                 /** @var \app\components\JsonToArrayBehavior $builderField */
                 $builderField = $formDataModel->behaviors['builderField'];
                 // Set form name by json key path. If fail, throw \ArrayAccessException
                 $builderField->setSafeValue('settings.name', $postData['Form']['name']);
                 // Save to DB
                 $builderField->save();
                 // If fail, throw \Exception
             }
             // Save FormConfirmation Model
             if (!$formConfirmationModel->save()) {
                 throw new \Exception(Yii::t("app", "Error saving Form Confirmation Model"));
             }
             // Save FormEmail Model
             if (!$formEmailModel->save()) {
                 throw new \Exception(Yii::t("app", "Error saving Form Email Model"));
             }
             // Save FormUI Model
             if (!$formUIModel->save()) {
                 throw new \Exception(Yii::t("app", "Error saving Form UI Model"));
             }
             $transaction->commit();
             Yii::$app->getSession()->setFlash('success', Yii::t('app', 'The form settings have been successfully updated'));
             return $this->redirect(['index']);
         } catch (\Exception $e) {
             // Rolls back the transaction
             $transaction->rollBack();
             // Rethrow the exception
             throw $e;
         }
     } else {
         // Select id & name of all themes in the system
         $themes = Theme::find()->select(['id', 'name'])->asArray()->all();
         $themes = ArrayHelper::map($themes, 'id', 'name');
         return $this->render('settings', ['formModel' => $formModel, 'formDataModel' => $formDataModel, 'formConfirmationModel' => $formConfirmationModel, 'formEmailModel' => $formEmailModel, 'formUIModel' => $formUIModel, 'themes' => $themes]);
     }
 }
示例#3
0
 /**
  * @param $id
  * @param $inputs
  */
 public function update($id, $inputs)
 {
     $theme = Theme::find($id);
     $theme->fill($inputs);
     $theme->save();
 }