3 * Edit functions for nodes
4 * Used in edit, new, delete and so on.
7 function node_form_edit($action = 'new'){
9 global $db, $node_type, $node, $user;
11 if($node_type['title_label'] != '<no-title>'){
13 $form['nodes']['title'] = array(
15 'value' => $node['title'],
17 'text' => $node_type['title_label']
21 if($node_type['body_label'] != '<no-body>'){
23 $form['nodes']['body'] = array(
25 'value' => $node['body'],
26 'text' => $node_type['body_label'],
29 'help' => $node_type['help'],
33 $form['nodes']['teaser_full'] = array(
35 'checked' => ($node['teaser_full'] == 1 ? 'checked' : ''),
36 'text' => 'Display teaser in full view',
41 if(user_access('admin nodes', 'node')){
43 $form['nodes']['fieldset_admin'] = array(
45 'legend' => 'Moderation settings'
48 $form['nodes']['fieldset_admin']['author'] = array(
50 'value' => ($action == 'edit' ? $node['author'] : $user['name']),
51 'text' => 'Authored by',
52 'help' => 'Leave blank for ' . core_variable_get('guest_name', 'Guest')
55 $form['nodes']['fieldset_admin']['post_time'] = array(
57 'value' => ($node['timestamp'] != '' ? date('m-d-Y H:i:s', $node['timestamp']) : ''),
58 'text' => 'Posting time',
59 'help' => 'Use the form \'mm-dd-yyyy hh:mm:ss\' For example: 12-18-2009 18:24:06'
62 $form['nodes']['fieldset_admin']['published'] = array(
64 'checked' => ($node['status'] == 1 ? 'checked' : ''),
65 'text' => 'Published',
69 $form['nodes']['fieldset_admin']['promoted'] = array(
71 'checked' => ($node['promote'] == 1 ? 'checked' : ''),
72 'text' => 'Promoted to front page',
76 $form['nodes']['fieldset_admin']['sticky'] = array(
78 'checked' => ($node['sticky'] == 1 ? 'checked' : ''),
84 if($action == 'edit'){
85 $form['nodes']['nid'] = array(
87 'value' => $node['nid']
89 $form['nodes']['revision'] = array(
91 'value' => $node['revision']
94 if(user_access('edit reviews'.$node_type['type'], 'node')){
96 $form['nodes']['fieldset_revisions'] = array(
98 'legend' => 'Review Log'
101 $form['nodes']['fieldset_revisions']['create_rev'] = array(
102 'type' => 'checkbox',
103 'text' => 'Create new revision',
106 $form['nodes']['fieldset_revisions']['log'] = array(
108 'value' => $node['log'],
109 'text' => 'Revision Log',
116 $form['nodes']['uid'] = array(
118 'value' => ($action == 'edit' ? $node['uid'] : $user['uid'])
121 $form['nodes']['submit'] = array(
126 if($action == 'edit' && ((user_access('edit own '.$node_type['name'], 'node') && $node['uid'] == $user['uid']) || user_access('edit any'.$node_type['name'], 'node'))){
127 $form['nodes']['form_delete'] = array(
139 * Helper function to Delete nodes, deletes revisions
141 * Node Id to be deleted
143 * Revision to be deleted NULL means ALL revisions for this node
145 function _node_delete_revision($nid, $rev = NULL){
147 $q = 'DELETE FROM {PRE_}node_revisions WHERE nid = ' . $nid . ($rev ? ' AND revision = ' . $rev : '');
153 * Helper function to Delete nodes, deletes the node
155 * Node Id to be deleted
157 function _node_delete($nid){
159 $q = 'DELETE FROM {PRE_}node WHERE nid = ' . $nid;
166 * Helper function to delete nodes
170 function node_delete($nid = NULL, $rev = NULL){
175 path_redirect(core_variable_get('site_frontpage', 'node'));
178 hooks_invoke('node_delete', $nid, $rev);
180 _node_delete_revision($nid, $rev);
183 if(!$rev && $db['error'] == NULL){
185 system_warnings("Your content has been succesfully deleted");
187 //redirect and go back where?
193 * Main function to save nodes, this will only save them.
195 * Change the query in order to use the internal query function
197 function node_save_new(&$form){
199 global $user, $db, $node_type;
201 //Main node registry THE TITLE SHOULD BE REMOVED FROM HERE
202 mysql_query("INSERT INTO ".$db['pre']."node
203 (type, title, uid, status, created, promote, sticky)
204 values('".$form['nodes']['data']['type']."',
205 '".$form['nodes']['title']['value']."',
206 ".$form['nodes']['uid']['value'].",
207 ".$form['nodes']['published']['value'].",
208 ".$form['nodes']['fieldset_admin']['post_time']['value'].",
209 ".$form['nodes']['promoted']['value'].",
210 ".$form['nodes']['sticky']['value'].")
213 $nid = mysql_fetch_assoc(mysql_query("SELECT MAX(nid) as nid FROM ".$db['pre']."node WHERE uid = ".$form['nodes']['uid']['value'].""));
216 _node_revision_save($nid, $form);
218 //Add some more information about the publishing options and so on.
219 system_warnings('Your '.$node_type['name'].' has been created.');
220 path_redirect('node/' . $nid);
225 * Save an edited node
228 function _node_save_edit($nid, &$form){
233 mysql_query("UPDATE ".$db['pre']."node
234 SET uid = ".$form['nodes']['uid']['value'].",
235 status = ".$form['nodes']['published']['value'].",
236 promote = ".$form['nodes']['promoted']['value'].",
237 sticky = ".$form['nodes']['sticky']['value']."
238 WHERE nid = ".$nid."");
244 function _node_revision_save($nid, &$form, $rev = 0){
251 //Get the latest revision if needed
252 $rev = mysql_fetch_assoc(mysql_query("SELECT MAX(revision) as rev FROM ".$db['pre']."node_revisions WHERE nid = ".$nid.""));
253 $rev = ++$rev['rev'];
255 //Get rid of the current revision
257 mysql_query("UPDATE ".$db['pre']."node_revisions SET current = 0 WHERE nid = ".$nid."");
263 mysql_query("INSERT INTO ".$db['pre']."node_revisions (nid, uid, title, body, teaser_full, log, timestamp, current, revision)
266 ".$form['nodes']['uid']['value'].",
267 '".$form['nodes']['title']['value']."',
268 '".$form['nodes']['body']['value']."',
269 '".$form['nodes']['teaser_full']['value']."',
270 '".$form['nodes']['log']['value']."',
271 ".$form['nodes']['fieldset_admin']['post_time']['value'].",
277 UPDATE {PRE_}node_revisions
278 SET uid = ".$form['nodes']['uid']['value'].",
279 title = '".$form['nodes']['title']['value']."',
280 body = '".$form['nodes']['body']['value']."',
281 teaser_full = ".$form['nodes']['teaser_full']['value'].",
282 log = '".$form['nodes']['log']['value']."',
283 timestamp = ".$form['nodes']['fieldset_admin']['post_time']['value'].",
294 function node_prepare_save(&$data, &$form, $type){
299 if(user_access('admin nodes', 'node')){
300 $form['nodes']['published']['value'] = (isset($_POST['published']) ? 1 : 0);
302 if(isset($_POST['post_time']) && $_POST['post_time'] != ''){
303 $time = explode(' ', $_POST['post_time']);
304 $hours = explode(':', $time[1]);
305 $days = explode('-', $time[0]);
306 $form['nodes']['fieldset_admin']['post_time']['value'] = mktime((int)$hours[0], (int)$hours[1], (int)$hours[2], $days[0], $days[1], $days[2]);
309 $form['nodes']['fieldset_admin']['post_time']['value'] = time();
313 $form['nodes']['sticky']['value'] = (isset($_POST['sticky']) ? 1 : 0);
315 $form['nodes']['promoted']['value'] = (isset($_POST['promoted']) ? 1 : 0);
318 if(isset($_POST['author']) && $_POST['author'] != ''){
319 $uid = mysql_fetch_assoc(mysql_query("SELECT uid FROM ".$db['pre']."users WHERE name = '".$_POST['author']."'"));
320 $form['nodes']['uid']['value'] = $uid['uid'];
321 //$form['nodes']['uid']['value'] = $author['uid'];
323 //For anonymous author
324 elseif($_POST['author'] == ''){
325 $form['nodes']['uid']['value'] = 0;
327 //just in case the author was not found (it should not happen)
328 if($form['nodes']['uid']['value'] == ''){
329 $form['nodes']['uid']['value'] = $user['uid'];
334 $form['nodes']['published']['value'] = $data['published'];
335 $form['nodes']['fieldset_admin']['post_time']['value'] = time();
336 $form['nodes']['sticky']['value'] = $data['sticky'];
337 $form['nodes']['uid']['value'] = $user['uid'];
338 $form['nodes']['promoted']['value'] = $data['promoted'];
341 $form['nodes']['data']['type'] = $type;
345 function _node_verify(&$data, &$form){
349 //Count the words in the node
350 if(str_word_count($_POST['body']) < $data['min_word_count']){
351 system_warnings("Minimun word count was not met. You should use at least: " . $data['min_word_count'] . " words", "error");
352 $form_status = 'with_erros';
356 if(isset($_POST['author']) && $_POST['author'] != '' && user_access('admin nodes', 'node')){
357 $form['nodes']['author']['value'] = mysql_fetch_assoc(mysql_query("SELECT uid FROM ".$db['pre']."users WHERE name = '".$_POST['author']."'"));
358 if($form['nodes']['author']['value'] == ''){
359 system_warnings("The author does not exist", "error");
360 $form_status = 'with_erros';
366 function node_get_details($type = NULL){
371 $where = "WHERE type = '".$type."'";
374 $info = mysql_query("SELECT * FROM ".$db['pre']."node_type ".$where."");
376 while($t = mysql_fetch_assoc($info)){
377 $data[$t['type']] = $t;
389 function node_new($type){
391 global $form_status, $user, $xx, $skin, $node_type, $data, $form;
394 if(!user_access('post new ' . $type, 'node', 'node')){
398 $node_type = node_get_details($type);
400 $form = node_form_edit('new');
403 path_redirect('node/new');
406 if(isset($_POST['form_id'])){
407 _node_verify($node_type, $form);
410 $content = form_form($form);
412 $skin['page_title'] = 'Add new ' . $node_type['name'];
414 if($form_status == 'verified'){
415 node_prepare_save($node_type, $form, $node_type['type']);
416 node_save_new($form);
426 function node_edit($nid, $rev = NULL){
428 global $db, $user, $skin, $node, $node_type, $xx, $form_status, $form;
430 $node = node_load($nid, $rev);
433 path_redirect('<front>');
436 $node_type = node_get_details($node['type']);
438 $skin['page_title'] = 'Edit form for: ' . $node['title'];
440 if(user_access('edit nodes', 'node') || (user_access('edit own '.$node['type'], 'node') && $node['uid'] == $user['uid'])){
442 if(isset($_POST['form_id'])){
443 _node_verify($node_type[$node['type']], $form);
446 $form = node_form_edit('edit');
447 $content = form_form($form, 'post', NULL, (isset($_GET['form']) ? FALSE : TRUE));
449 if($form_status == 'verified'){
451 //Update the current node
452 node_prepare_save($node_type, $form, $node_type['type']);
453 _node_save_edit($nid, $form);
455 //Create new revision
456 if($form['nodes']['create_rev']['value'] == 1){
457 $form['nodes']['revision']['value'] = 0;
460 _node_revision_save($nid, $form, $form['nodes']['revision']['value']);
461 system_warnings('Your '.$node_type['type'].' has been modified.');
462 path_redirect('node/' . $nid);
464 elseif($form_status == 'delete_confirmed'){
465 if(node_delete($nid, $rev)){
466 path_redirect('system/admin');
472 return 'PATH_NO_ACCESS';
479 function node_new_list(){
480 return 'This will be a list of all posible nodes';