source: extensions/AdditionalPages/trunk/admin/add_page.inc.php @ 16118

Last change on this file since 16118 was 16118, checked in by mistic100, 12 years ago

add a simple page template system

File size: 7.7 KB
Line 
1<?php
2
3if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
4
5if (!isset($edited_page))
6{
7  $page_title = l10n('ap_create');
8
9  $edited_page = array(
10    'id'         => 0,
11    'title'      => '',
12    'permalink'  => '',
13    'lang'       => 'ALL',
14    'homepage'   => false,
15    'standalone' => false,
16    'level'      => 0,
17    'users'      => array('guest', 'generic', 'normal', 'admin', 'webmaster'),
18    'groups'     => array(),
19    'content'    => '',
20  );
21}
22
23// load template
24if (isset($_GET['load_template']))
25{
26  if (file_exists(AP_DISTRIBUED . $_GET['load_template']))
27  {
28    $distribued = load_ap_template($_GET['load_template'], true);
29  }
30  else
31  {
32    $distribued = trigger_event('load_ap_template', array(), $_GET['load_template']);
33  }
34  $edited_page = array_merge($edited_page, $distribued);
35  $template->assign('template_selected', $_GET['load_template']);
36}
37
38// Submit form
39if (isset($_POST['save']))
40{
41  if (empty($_POST['title']))
42  {
43    array_push($page['errors'], l10n('ap_no_name'));
44  }
45  if (!empty($_POST['permalink']))
46  {
47    $permalink = trim($_POST['permalink'], ' /');
48    $permalink = str_replace(array(' ', '/'), '_',$permalink);
49
50    $query ='
51SELECT id FROM '.ADD_PAGES_TABLE.'
52WHERE permalink = "'.$permalink.'"
53  AND id <> '.$edited_page['id'].'
54;';
55    $ids = array_from_query($query, 'id');
56    if (!empty($ids))
57    {
58      array_push($page['errors'], sprintf(l10n('ap_permalink_already_used'), $permalink, $ids[0]));
59    }
60    $permalink = '"'.$permalink.'"';
61  }
62  else
63  {
64    $permalink = 'NULL';
65  }
66
67  $language = (empty($_POST['lang']) or $_POST['lang'] == 'ALL') ? 'NULL' : '"'.$_POST['lang'].'"';
68  $group_access = !empty($_POST['groups']) ? '"'.implode(',', $_POST['groups']).'"' : 'NULL';
69  $standalone = isset($_POST['standalone']) ? '"true"' : '"false"';
70
71  $user_access = 'NULL';
72  if ($conf['AP']['user_perm'])
73  {
74    $user_access = !empty($_POST['users']) ? '"'.implode(',', $_POST['users']).'"' : '""';
75  }
76
77  $level_access = !empty($_POST['level']) ? $_POST['level'] : 0;
78
79  if (empty($page['errors']))
80  {
81    if ($page['tab'] == 'edit_page')
82    {
83      $query = '
84UPDATE '.ADD_PAGES_TABLE.'
85SET lang = '.$language.',
86  title = "'.$_POST['title'].'",
87  content = "'.$_POST['ap_content'].'",
88  users = '.$user_access.',
89  groups = '.$group_access.',
90  level = '.$level_access.',
91  permalink = '.$permalink.',
92  standalone = '.$standalone.'
93WHERE id = '.$edited_page['id'] .'
94;';
95      pwg_query($query);
96    }
97    else
98    {
99      $query = 'SELECT MAX(ABS(pos)) AS pos FROM ' . ADD_PAGES_TABLE . ';';
100      list($position) = array_from_query($query, 'pos');
101
102      $query = '
103INSERT INTO '.ADD_PAGES_TABLE.' ( pos , lang , title , content , users , groups , level , permalink, standalone)
104VALUES (
105  '.($position+1).',
106  '.$language.',
107  "'.$_POST['title'].'",
108  "'.$_POST['ap_content'].'",
109  '.$user_access.',
110  '.$group_access.',
111  '.$level_access.',
112  '.$permalink.',
113  '.$standalone.'
114);';
115      pwg_query($query);
116      $edited_page['id'] = pwg_db_insert_id(ADD_PAGES_TABLE, 'id');
117    }
118
119    // Homepage
120    if (isset($_POST['homepage']) xor $conf['AP']['homepage'] == $edited_page['id'])
121    {
122      $conf['AP']['homepage'] = isset($_POST['homepage']) ? $edited_page['id'] : null;
123      conf_update_param('additional_pages', pwg_db_real_escape_string(serialize($conf['AP'])));
124    }
125
126    // Backup file
127    mkgetdir($conf['local_data_dir'], MKGETDIR_DEFAULT&~MKGETDIR_DIE_ON_ERROR);
128    mkgetdir($conf['local_data_dir'].'/additional_pages_backup', MKGETDIR_PROTECT_HTACCESS&~MKGETDIR_DIE_ON_ERROR);
129    $sav_file = @fopen($conf['local_data_dir'].'/additional_pages_backup/' . $edited_page['id'] . '.txt', "w");
130    @fwrite($sav_file, "Title: ".stripslashes($_POST['title'])."\nPermalink: ".stripslashes($_POST['permalink'])."\n\n".stripslashes($_POST['ap_content']));
131    @fclose($sav_file);
132
133    // Redirect to admin pannel or additional page
134    if (isset($_GET['redirect']))
135    {
136      redirect(make_index_url(array('section'=>'page')).'/'.$edited_page['id']);
137    }
138    redirect($my_base_url.'&page_saved=');
139  }
140
141  $edited_page['title'] = stripslashes($_POST['title']);
142  $edited_page['permalink'] = stripslashes($_POST['permalink']);
143  $edited_page['content'] = stripslashes($_POST['ap_content']);
144  $edited_page['lang'] = !empty($_POST['lang']) ? $_POST['lang'] : 'ALL';
145  $edited_page['groups'] = !empty($_POST['groups']) ? $_POST['groups'] : array();
146  $edited_page['users'] = !empty($_POST['users']) ? $_POST['users'] :  array();
147  $edited_page['level'] = !empty($_POST['level']) ? $_POST['level'] :  0;
148  $edited_page['homepage'] = isset($_POST['homepage']);
149  $edited_page['standalone'] = isset($_POST['standalone']);
150}
151
152// Language options
153if ($conf['AP']['language_perm'])
154{
155  $languages = get_languages();
156  $options = array('ALL' => l10n('ap_all_lang'));
157  foreach ($languages as $language_code => $language_name)
158  {
159    $options[$language_code] = $language_name;
160  }
161  $template->assign(array(
162    'lang' => $options,
163    'selected_lang' => $edited_page['lang'],
164    )
165  );
166}
167
168// Groups options
169if ($conf['AP']['group_perm'])
170{
171        $query = 'SELECT id, name FROM '.GROUPS_TABLE.' ORDER BY name ASC;';
172  $result = pwg_query($query);
173  $groups = array();
174  while ($row = pwg_db_fetch_assoc($result))
175  {
176    $groups[$row['id']] = $row['name'];
177  }
178  $template->assign(array(
179    'groups' => $groups,
180    'selected_groups' => $edited_page['groups'],
181    )
182  );
183}
184
185// Users options
186if ($conf['AP']['user_perm'])
187{
188  $users_id = array('guest', 'generic', 'normal', 'admin', 'webmaster');
189  $users = array();
190  foreach ($users_id as $id)
191  {
192    $users[$id] = l10n('user_status_'.$id);
193  }
194  $template->assign(array(
195    'users' => $users,
196    'selected_users' => $edited_page['users'],
197    )
198  );
199}
200
201// User level options
202if ($conf['AP']['level_perm'])
203{
204  foreach ($conf['available_permission_levels'] as $level)
205  {
206    $level_options[$level] = l10n(sprintf('Level %d', $level));
207  }
208  $template->assign(array(
209    'level_perm' => $level_options,
210    'level_selected' => $edited_page['level']
211    )
212  );
213}
214
215// Available templates
216if (!isset($_GET['edit']))
217{
218  $distribued = array();
219  $dh = opendir(AP_DISTRIBUED);
220  if ($dh)
221  {
222    while (($dir = readdir($dh)) !== false)
223    {
224      if ( is_dir(AP_DISTRIBUED.$dir) and $dir!='.' and $dir!='..' )
225      {
226        array_push($distribued, load_ap_template($dir, false));
227      }
228    }
229    closedir($dh);
230  }
231  $distribued = trigger_event('load_ap_templates_list', $distribued); // external plugins can add templates
232  $template->assign('TEMPLATES', $distribued);
233}
234
235// template output
236$template->assign(array(
237  'AP_TITLE' => $page_title,
238  'NAME' => htmlspecialchars($edited_page['title']),
239  'PERMALINK' => htmlspecialchars($edited_page['permalink']),
240  'HOMEPAGE' => $edited_page['homepage'],
241  'STANDALONE' => $edited_page['standalone'],
242  'CONTENT' => htmlspecialchars($edited_page['content'])
243  )
244);
245
246$template->set_filename('plugin_admin_content', dirname(__FILE__) . '/template/add_page.tpl');
247$template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
248
249
250function load_ap_template($dir, $with_content=true)
251{
252  $path = AP_DISTRIBUED . $dir . '/';
253 
254  // default template
255  $template_conf = array(
256    'name'       => $dir,
257    'title'      => '',
258    'permalink'  => '',
259    'lang'       => 'ALL',
260    'homepage'   => false,
261    'standalone' => false,
262    'level'      => 0,
263    'users'      => array('guest', 'generic', 'normal', 'admin', 'webmaster'),
264    'groups'     => array(),
265    'content'    => '',
266  );
267 
268  // load config
269  if (file_exists($path.'config.php'))
270  {
271    include($path.'config.php');
272  }
273 
274  // load content
275  if ( $with_content and file_exists($path.'content.tpl') )
276  {
277    $template_conf['content'] = file_get_contents($path.'content.tpl');
278  }
279 
280  $template_conf['tpl_id'] = $dir;
281  return $template_conf;
282}
283
284?>
Note: See TracBrowser for help on using the repository browser.