/** * */ public function install() { $tmp = JPATH_ROOT . '/tmp/'; $tmp_kunena = JPATH_ROOT . '/tmp/kinstall/'; $dest = KPATH_SITE . '/template/'; $file = $this->app->input->files->get('install_package', null, 'raw'); if (!JSession::checkToken('post')) { $this->app->enqueueMessage(JText::_('COM_KUNENA_ERROR_TOKEN'), 'error'); $this->setRedirect(KunenaRoute::_($this->baseurl, false)); return; } if (empty($file['tmp_name']) || !is_uploaded_file($file['tmp_name']) || !empty($file['error'])) { $this->app->enqueueMessage(JText::sprintf('COM_KUNENA_A_TEMPLATE_MANAGER_INSTALL_EXTRACT_MISSING', $this->escape($file['name'])), 'notice'); } else { $success = KunenaFile::upload($file['tmp_name'], $tmp . $file['name'], false, true); if ($success) { try { JArchive::extract($tmp . $file['name'], $tmp_kunena); } catch (Exception $e) { $this->app->enqueueMessage(JText::sprintf('COM_KUNENA_A_TEMPLATE_MANAGER_INSTALL_EXTRACT_FAILED', $this->escape($file['name'])), 'notice'); } } if (is_dir($tmp_kunena)) { $templates = KunenaTemplateHelper::parseXmlFiles($tmp_kunena); if (!empty($templates)) { foreach ($templates as $template) { // Never overwrite locked templates if (in_array($template->directory, $this->locked)) { continue; } if (is_dir($dest . $template->directory)) { if (is_file($dest . $template->directory . '/params.ini')) { if (is_file($tmp_kunena . $template->sourcedir . '/params.ini')) { KunenaFile::delete($tmp_kunena . $template->sourcedir . '/params.ini'); } KunenaFile::move($dest . $template->directory . '/params.ini', $tmp_kunena . $template->sourcedir . '/params.ini'); } KunenaFolder::delete($dest . $template->directory); } $success = KunenaFolder::move($tmp_kunena . $template->sourcedir, $dest . $template->directory); if ($success !== true) { $this->app->enqueueMessage(JText::sprintf('COM_KUNENA_A_TEMPLATE_MANAGER_INSTALL_FAILED', $template->directory), 'notice'); } else { $this->app->enqueueMessage(JText::sprintf('COM_KUNENA_A_TEMPLATE_MANAGER_INSTALL_SUCCESS', $template->directory)); } } // Delete the tmp install directory if (is_dir($tmp_kunena)) { KunenaFolder::delete($tmp_kunena); } // Clear all cache, just in case. KunenaCacheHelper::clearAll(); } else { $this->app->enqueueMessage(JText::_('COM_KUNENA_A_TEMPLATE_MANAGER_TEMPLATE_MISSING_FILE'), 'error'); } } else { $this->app->enqueueMessage(JText::_('COM_KUNENA_A_TEMPLATE_MANAGER_TEMPLATE') . ' ' . JText::_('COM_KUNENA_A_TEMPLATE_MANAGER_UNINSTALL') . ': ' . JText::_('COM_KUNENA_A_TEMPLATE_MANAGER_DIR_NOT_EXIST'), 'error'); } } $this->setRedirect(KunenaRoute::_($this->baseurl, false)); }