/**
  * Method to run this controller.
  *
  * @return  mixed
  */
 protected function doExecute()
 {
     // Init Variables
     $data = $this->input->get($this->input->get('formctrl'), array(), 'array');
     $result = new \JRegistry();
     $result->set('Result', false);
     $model_name = $this->input->get('model_name');
     $component = $this->input->get('component');
     $extension = $this->input->get('extension');
     // Include Needed Classes
     \JModelLegacy::addIncludePath(JPATH_BASE . "/components/com_{$component}/models");
     \JForm::addFormPath(JPATH_BASE . "/components/com_{$component}/models/forms");
     \JForm::addFieldPath(JPATH_BASE . "/components/com_{$component}/models/fields");
     \JTable::addIncludePath(JPATH_BASE . "/components/com_{$component}/tables");
     LanguageHelper::loadLanguage($extension, null);
     // Get Model
     $model = \JModelLegacy::getInstance(ucfirst($model_name), ucfirst($component) . 'Model', array('ignore_request' => true));
     // For WindWalker Component only
     if (is_callable(array($model, 'getFieldsName'))) {
         $fields_name = $model->getFieldsName();
         $data = ArrayHelper::pivotToTwoDimension($data, $fields_name);
     }
     // Get Form
     $form = $model->getForm($data, false);
     if (!$form) {
         $result->set('errorMsg', $model->getError());
         jexit($result);
     }
     // Test whether the data is valid.
     $validData = $model->validate($form, $data);
     // Check for validation errors.
     if ($validData === false) {
         // Get the validation messages.
         $errors = $model->getErrors();
         $errorMsg = is_string($errors[0]) ? $errors[0] : $errors[0]->getMessage();
         $result->set('errorMsg', $errorMsg);
         jexit($result);
     }
     // Do Save
     if (!$model->save($validData)) {
         // Return Error Message.
         $result->set('errorMsg', \JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError()));
         jexit($result);
     }
     // Set ID
     $data['id'] = $model->getstate($model_name . '.id');
     // Set Result
     $result->set('Result', true);
     $result->set('data', $data);
     jexit($result);
 }
 /**
  * Method to test pivotFromTwoDimension
  *
  * @param mixed $origin
  * @param array $keys
  * @param mixed $expected
  *
  * @dataProvider pivotToTwoDimensionDataProvider
  * @covers       \Windwalker\Helper\ArrayHelper::pivotFromTwoDimension
  *
  * @return void
  */
 public function testPivotToTwoDimension($origin, $keys, $expected)
 {
     $this->assertEquals($expected, ArrayHelper::pivotToTwoDimension($origin, $keys));
 }
 /**
  * Method to run this controller.
  *
  * @return  mixed
  */
 protected function doExecute()
 {
     // Init Variables
     $data = $this->input->get($this->input->get('formctrl'), array(), 'array');
     $result = new Registry();
     $result->set('Result', false);
     $model_name = $this->input->get('model_name');
     $component = $this->input->get('component');
     $extension = $this->input->get('extension');
     // Include Needed Classes
     JLoader::registerPrefix(ucfirst($component), JPATH_BASE . "/components/com_{$component}");
     JForm::addFormPath(JPATH_BASE . "/components/com_{$component}/models/forms");
     JForm::addFieldPath(JPATH_BASE . "/components/com_{$component}/models/fields");
     JTable::addIncludePath(JPATH_BASE . "/components/com_{$component}/tables");
     LanguageHelper::loadLanguage($extension, null);
     // Get Model
     /** @var $model CrudModel */
     $model = $this->getModel(ucfirst($model_name), ucfirst($component));
     if (!$model instanceof CrudModel) {
         $result->set('errorMsg', 'Model need extends to \\Windwalker\\Model\\CrudModel.');
         jexit($result);
     }
     // For WindWalker Component only
     if (method_exists($model, 'getFieldsName')) {
         $fields_name = $model->getFieldsName();
         $data = ArrayHelper::pivotToTwoDimension($data, $fields_name);
     }
     // Check for validation errors.
     try {
         // Get Form
         if (method_exists($model, 'getForm')) {
             $form = $model->getForm($data, false);
             if (!$form) {
                 $result->set('errorMsg', 'No form');
                 jexit($result);
             }
             // Test whether the data is valid.
             $validData = $model->validate($form, $data);
         } else {
             $validData = $data;
         }
         // Do Save
         $model->save($validData);
     } catch (ValidateFailException $e) {
         // Get the validation messages.
         $errors = $e->getErrors();
         $errors = array_map(function ($error) {
             return (string) $error->getMessage();
         }, $errors);
         $result->set('errorMsg', $errors);
         exit($result);
     } catch (\Exception $e) {
         // Return Error Message.
         $result->set('errorMsg', \JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $e->getMessage()));
         jexit($result);
     }
     // Set ID
     $data['id'] = $model->getState()->get($model_name . '.id');
     // Set Result
     $result->set('Result', true);
     $result->set('data', $data);
     jexit($result);
 }