<?php /** * @package RSForm! Pro * @copyright (C) 2007-2019 www.rsjoomla.com * @license GPL, http://www.gnu.org/copyleft/gpl.html */ defined('_JEXEC') or die; use Joomla\CMS\MVC\Model\AdminModel; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; class RsformModelEmail extends AdminModel { public function getForm($data = array(), $loadData = true) { // Get the form. $form = $this->loadForm('com_rsform.email', 'email', array('control' => 'jform', 'load_data' => $loadData)); if (empty($form)) { return false; } return $form; } public function getItem($pk = null) { if ($pk === null) { $pk = Factory::getApplication()->input->getInt('cid'); } return parent::getItem($pk); } protected function loadFormData() { $app = Factory::getApplication(); // Check the session for previously entered form data. $data = $app->getUserState('com_rsform.edit.email.data', array()); if (empty($data)) { $data = $this->getItem(); } if (empty($data->formId)) { $data->formId = $this->getFormId(); } if (empty($data->type)) { $data->type = $this->getType(); } $data->language = $this->getCurrentLanguage(); if (!empty($data->id)) { if ($translations = RSFormProHelper::getTranslations('emails', $data->formId, $data->language)) { foreach (array('fromname', 'subject', 'message', 'replytoname') as $property) { $reference = $data->id . '.' . $property; if (isset($translations[$reference])) { $data->{$property} = $translations[$reference]; } } } $data->message_0 = $data->message_1 = $data->message; } return $data; } public function getFormId() { return Factory::getApplication()->input->getInt('formId'); } public function getType() { return Factory::getApplication()->input->getCmd('type','additional'); } public function getCurrentLanguage() { if ($language = Factory::getApplication()->input->getString('language')) { return $language; } $data = $this->getItem(); $default = RSFormProHelper::getCurrentLanguage($this->getFormId()); if (!empty($data->id)) { return Factory::getSession()->get('com_rsform.emails.emailId' . $data->id . '.lang', $default); } return $default; } public function getTable($type = 'Rsform_Emails', $prefix = 'Table', $options = array()) { return parent::getTable($type, $prefix, $options); } public function getQuickfields() { require_once JPATH_ADMINISTRATOR . '/components/com_rsform/helpers/quickfields.php'; return RSFormProQuickFields::getFieldNames('all'); } public function save($data) { $row = $this->getTable(); $app = Factory::getApplication(); $row->bind($data); // Saving new row twice so we can save translations if (!$row->id) { if (!$row->store()) { $app->enqueueMessage($row->getError(), 'error'); return false; } } if (empty($data['language'])) { $data['language'] = $this->getCurrentLanguage(); } if ($this->saveTranslation($row, $data['language'])) { $row->fromname = null; $row->subject = null; $row->message = null; } if (!$row->store()) { $app->enqueueMessage($row->getError(), 'error'); return false; } $app->enqueueMessage(Text::_('RSFP_CHANGES_SAVED')); return $row; } public function saveTranslation(&$email, $lang) { // We're saving a new email so we need to skip translations for now // This email is the base for future translations. if (!$email->id) { return false; } $fields = array('fromname', 'subject', 'message', 'replytoname'); $translations = RSFormProHelper::getTranslations('emails', $email->formId, $lang, 'id'); // $translations is false when we're trying to get translations (en-GB) for the same language the form is in (en-GB) if ($translations === false) { return false; } foreach ($fields as $field) { $reference_id = $email->id . '.' . $field; $translation = (object) array( 'form_id' => $email->formId, 'lang_code' => $lang, 'reference' => 'emails', 'reference_id' => $reference_id, 'value' => $email->{$field} ); if (!isset($translations[$reference_id])) { $this->getDbo()->insertObject('#__rsform_translations', $translation); } else { $translation->id = $translations[$reference_id]; $this->getDbo()->updateObject('#__rsform_translations', $translation, array('id')); } unset($email->{$field}); } return true; } }