From 7ed313f4930519619f9d5f77884afaca8d08fd01 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Fri, 21 Mar 2014 15:01:37 -0500 Subject: [PATCH] content: Add management for system templates --- bootstrap.php | 2 +- include/ajax.content.php | 39 +++++++++++++++++++++++++++ include/class.page.php | 37 ++++++++++++++++++------- include/staff/pages.inc.php | 2 +- include/staff/settings-access.inc.php | 11 ++++++++ scp/ajax.php | 5 +++- 6 files changed, 83 insertions(+), 13 deletions(-) diff --git a/bootstrap.php b/bootstrap.php index c3a02a92f..832fe96e5 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -63,7 +63,7 @@ class Bootstrap { define('CONFIG_TABLE',$prefix.'config'); define('CANNED_TABLE',$prefix.'canned_response'); - define('PAGE_TABLE', $prefix.'page'); + define('PAGE_TABLE', $prefix.'content'); define('FILE_TABLE',$prefix.'file'); define('FILE_CHUNK_TABLE',$prefix.'file_chunk'); diff --git a/include/ajax.content.php b/include/ajax.content.php index acc238c34..02b3bd550 100644 --- a/include/ajax.content.php +++ b/include/ajax.content.php @@ -125,5 +125,44 @@ class ContentAjaxAPI extends AjaxController { break; } } + + function manageContent($id, $lang=false) { + global $thisstaff; + + if (!$thisstaff) + Http::response(403, 'Login Required'); + + $content = Page::lookup($id, $lang); + include STAFFINC_DIR . 'templates/content-manage.tmpl'; + } + + function manageNamedContent($type, $lang=false) { + global $thisstaff; + + if (!$thisstaff) + Http::response(403, 'Login Required'); + + $content = Page::lookup(Page::getIdByType($type, $lang)); + include STAFFINC_DIR . 'templates/content-manage.tmpl.php'; + } + + function updateContent($id) { + global $thisstaff; + + if (!$thisstaff) + Http::response(403, 'Login Required'); + elseif (!$_POST['name'] || !$_POST['body']) + Http::response(422, 'Please submit name and body'); + elseif (!($content = Page::lookup($id))) + Http::response(404, 'No such content'); + + $vars = array_merge($content->getHashtable(), $_POST); + if (!$content->save($id, $vars, $errors)) { + if ($errors['err']) + Http::response(422, $errors['err']); + else + Http::response(500, 'Unable to update content: '.print_r($errors, true)); + } + } } ?> diff --git a/include/class.page.php b/include/class.page.php index f0ada9a6c..553e342a7 100644 --- a/include/class.page.php +++ b/include/class.page.php @@ -19,13 +19,13 @@ class Page { var $ht; var $attachments; - function Page($id) { + function Page($id, $lang=false) { $this->id=0; $this->ht = array(); - $this->load($id); + $this->load($id, $lang); } - function load($id=0) { + function load($id=0, $lang=false) { if(!$id && !($id=$this->getId())) return false; @@ -33,7 +33,8 @@ class Page { $sql='SELECT page.*, count(topic.page_id) as topics ' .' FROM '.PAGE_TABLE.' page ' .' LEFT JOIN '.TOPIC_TABLE. ' topic ON(topic.page_id=page.id) ' - .' WHERE page.id='.db_input($id) + . ' WHERE page.content_id='.db_input($id) + . ($lang ? ' AND lang='.db_input($lang) : '') .' GROUP By page.id'; if (!($res=db_query($sql)) || !db_num_rows($res)) @@ -195,10 +196,25 @@ class Page { return self::getActivePages(array('type' => 'thank-you')); } - function getIdByName($name) { + function getIdByName($name, $lang=false) { $id = 0; $sql = ' SELECT id FROM '.PAGE_TABLE.' WHERE name='.db_input($name); + if ($lang) + $sql .= ' AND lang='.db_input($lang); + + if(($res=db_query($sql)) && db_num_rows($res)) + list($id) = db_fetch_row($res); + + return $id; + } + + function getIdByType($type, $lang=false) { + $id = 0; + $sql = ' SELECT id FROM '.PAGE_TABLE.' WHERE `type`='.db_input($type); + if ($lang) + $sql .= ' AND lang='.db_input($lang); + if(($res=db_query($sql)) && db_num_rows($res)) list($id) = db_fetch_row($res); @@ -224,8 +240,6 @@ class Page { if(!$vars['type']) $errors['type'] = 'Type required'; - elseif(!in_array($vars['type'], array('landing', 'offline', 'thank-you', 'other'))) - $errors['type'] = 'Invalid selection'; if(!$vars['name']) $errors['name'] = 'Name required'; @@ -254,10 +268,13 @@ class Page { } else { $sql='INSERT INTO '.PAGE_TABLE.' SET '.$sql.', created=NOW()'; - if(db_query($sql) && ($id=db_insert_id())) - return $id; + if (!db_query($sql) || !($id=db_insert_id())) { + $errors['err']='Unable to create page. Internal error'; + return false; + } - $errors['err']='Unable to create page. Internal error'; + // TODO: Update `content_id` + return $id; } return false; diff --git a/include/staff/pages.inc.php b/include/staff/pages.inc.php index 34a3fa2f9..5dff4eced 100644 --- a/include/staff/pages.inc.php +++ b/include/staff/pages.inc.php @@ -6,7 +6,7 @@ $sql='SELECT page.id, page.isactive, page.name, page.created, page.updated, ' .'page.type, count(topic.topic_id) as topics ' .' FROM '.PAGE_TABLE.' page ' .' LEFT JOIN '.TOPIC_TABLE.' topic ON(topic.page_id=page.id) ' - .' WHERE 1 '; + .' WHERE type in ("other","landing","thank-you","offline") '; $sortOptions=array( 'name'=>'page.name', 'status'=>'page.isactive', 'created'=>'page.created', 'updated'=>'page.updated', diff --git a/include/staff/settings-access.inc.php b/include/staff/settings-access.inc.php index cb6306f25..4d27d8ed2 100644 --- a/include/staff/settings-access.inc.php +++ b/include/staff/settings-access.inc.php @@ -131,6 +131,17 @@ if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin() || !$config) Maximum idle time in minutes before a client must log in again (enter 0 to disable). </td> </tr> + <tr> + <th colspan="2"> + <em><b>Authentication and Registration Templates</b></em> + </th> + </tr> + <tr> + <td>New Registration Email</td> + <td><a href="ajax.php/content/new-registration/manage" + onclick="javascript: + $.dialog($(this).attr('href'), 200); + return false;">Manage</a></td> </tbody> </table> <p style="text-align:center"> diff --git a/scp/ajax.php b/scp/ajax.php index 5bc266064..9ef736ef7 100644 --- a/scp/ajax.php +++ b/scp/ajax.php @@ -42,7 +42,10 @@ $dispatcher = patterns('', url('^/content/', patterns('ajax.content.php:ContentAjaxAPI', url_get('^log/(?P<id>\d+)', 'log'), url_get('^ticket_variables', 'ticket_variables'), - url_get('^signature/(?P<type>\w+)(?:/(?P<id>\d+))?$', 'getSignature') + url_get('^signature/(?P<type>\w+)(?:/(?P<id>\d+))?$', 'getSignature'), + url_get('^(?P<id>\d+)/(?:(?P<lang>\w+)/)?manage$', 'manageContent'), + url_get('^(?P<id>[\w-]+)/(?:(?P<lang>\w+)/)?manage$', 'manageNamedContent'), + url_post('^(?P<id>\d+)(?:/(?P<lang>\w+))?$', 'updateContent') )), url('^/config/', patterns('ajax.config.php:ConfigAjaxAPI', url_get('^scp', 'scp') -- GitLab