PHP Classes
Icontem

File: editentry.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of alexei peterkin  >  B-Forms  >  editentry.php  
File: editentry.php
Role: Example script
Content type: text/plain
Description: Example form: edit blog entry
Class: B-Forms
Compose and generate complex web forms
 

Contents

Class file image Download
<?
// Include my local files
require_once("local.inc");
require_once(
"common.inc");

// Include the library
require_once("b-forms/b-forms.inc");
require_once(
"b-forms/layout.inc");

init_db(TRUE); // Initialize the database link in the global $blog_link variable

// Define the form structure
$form = new Form("denied.html"TRUE);
$bl = & new BaseLayout();
$tl = & new TableLayout(FALSE);

// Single row block "entry"
$block = & new Block("entry");

$block->add_property(new TextProperty("title""Title"""TRUE128), new TextBox(80));
$block->add_property(new DateProperty("post_date""Post date"""FALSE));
$block->add_property(new TextProperty("brief""Intro"""TRUE10000), new TextArea(8015));
$block->add_property(new TextProperty("full""Content"""FALSE100000), new TextArea(8025));
$block->add_property(new LayoutElement("Post in topics"), new InlineBlock(&$bl"topic", &$tl));

$block -> add_property(new ButtonProperty("save""Save"TRUE));
$block -> add_property(new ButtonProperty("cancel""Cancel"));
$block -> add_property(new ButtonProperty("delete""Delete"));

$form -> add_block($block);

//Multi-row block "topic"
$block = & new Block("topic"TRUE);
$block -> add_property(new CheckBoxProperty("include_fl"""FALSE));
$block -> add_property(new TextProperty("name""Name"""TRUE64), new TextDisplay());

$form -> add_block($block);

// Define triggers

function entry_on_open() {
   global 
$form$blog_link$HTTP_GET_VARS;

   if (isset(
$HTTP_GET_VARS["entry"])) {
      
$query sprintf(
         
"SELECT entries.id, ".             //0
         
"       entries.title, ".          //1
         
"       entries.brief, ".          //2
         
"       entries.post_date, ".      //3
         
"       entries.full ".            //4
         
"FROM   entries ".
         
"WHERE  entries.id = %d ",
         
$HTTP_GET_VARS["entry"]);

      
$result = @mysql_query($query$blog_link);
      
$num_rows mysql_num_rows($result);

      if (!
$num_rows) {
         
header("Location: ".$form->_denied_target);
         
close_db();
         exit;
      }
      
$row mysql_fetch_row($result);

      
$form->entry->append(RS_OLD);

      
$form->entry->id $row[0];
      
$form->entry->title $row[1];
      
$form->entry->brief $row[2];
      
$form->entry->post_date $row[3];
      
$form->entry->full $row[4];

   }
}

// The following trigger will be executed AFTER the entry_on_open trigger
// since block entry is added to the form before block topic.

function topic_on_open() {
   global 
$form$blog_link;

   
$query sprintf(
         
"SELECT id, name, topic_id ".  // 0, 1, 2
         
"FROM topics ".
         
"LEFT JOIN entry_topics ON topic_id = id AND entry_id = %d ".
         
"ORDER BY name",
         
$form->entry->id);
      
// Because of the left join, topic_id column will be null for those
      // topics for which there is no row in the entry_topics for this entry.
      // And it will be not null, if the entry is already included in that topic.
      //
      // When the form is opened for creation, the $form->entry->id will be null,
      // sprintf() will convert it into 0, and no entry_topics will be found.

   
$result mysql_query($query$blog_link);
   
$num_rows mysql_num_rows($result);
   for (
$i=0$i<$num_rows$i++) {
      
$row mysql_fetch_row($result);
      if (
$row[2]) { // Entry already belongs to the topic
         
$form->topic->append(RS_OLD);
         
$form->topic->include_fl[$i] = TRUE;
      }
      else { 
// NULL, Entry does not belong to the topic
         
$form->topic->append(RS_NEW);
      }
      
$form->topic->id[$i]=$row[0];
      
$form->topic->name[$i]=$row[1];
   }
}



function 
entry_cancel_on_action($rownum = -1) {
   
close_db();

   
header("Location: /examples/");
   exit;
}

function 
entry_save_on_action($rownum = -1) {
   global 
$blog_link$domain$form$post_date;

   
$post_date $form->entry->post_date;
   if (
$post_date == "")
      
$post_date "SYSDATE()";
   else
      
$post_date "'$post_date'";

   if (
$form->save()) {
      
close_db();
      
header("Location: /examples/");
      exit;
   }
}

function 
entry_on_update($rownum = -1) {
   global 
$form$blog_link$post_date;

   
$query sprintf(
         
"UPDATE entries ".
         
"SET    title = '%s', ".
         
"       brief = '%s', ".
         
"       full = '%s', ".
         
"       post_date = %s ".
         
"WHERE  id = %d",
         
mysql_escape_string($form->entry->title),
         
mysql_escape_string($form->entry->brief),
         
mysql_escape_string($form->entry->full),
         
$post_date,
         
$form->entry->id);

   
mysql_query($query$blog_link);
}

function 
entry_on_insert($rownum = -1) {
   global 
$form$blog_link$post_date;

   
$query sprintf(
      
"INSERT INTO entries ".
      
"   (title, brief, full, post_date) ".
      
"VALUES ('%s', '%s', '%s', %s)",
      
mysql_escape_string($form->entry->title),
      
mysql_escape_string($form->entry->brief),
      
mysql_escape_string($form->entry->full),
      
$post_date);

   
mysql_query($query$blog_link);

   
// We need to retrieve the autoincrement id assigned to our entry.
   // It will be required for saving the topics of this entry
   
$form->entry->id mysql_insert_id($blog_link);
}

// This trigger will only be called for records, that are in status RS_INSERT
// and these are records that previously did not exist in the form, thus the
// checkbox was originally off, and now the record has changed, thus the
// checkbox is on.
function topic_on_insert($rownum = -1) {
   global 
$form$blog_link;

   
$query sprintf(
         
"INSERT INTO entry_topics (entry_id, topic_id) VALUES (%d, %d)",
         
$form->entry->id,
         
$form->topic->id[$rownum]);
   
mysql_query($query$blog_link);

}

// This trigger will only be called for records in status RS_UPDATE, and these
// are those records that were originally in the database, thus the checkbox was
// on. Since the record has changed to be in status RS_UPDATE, the checkbox must
// be off now. So this is a record to be deleted. However, will will not delete it now,
// - just build a list of ids.
function topic_on_update($rownum = -1) {
   global 
$form$delete_list$join;

   
$delete_list .= $join.$form->topic->id[$rownum];
   
$join ', ';
}

function 
form_post_save() {
   global 
$form$blog_link$delete_list;

   
// And this is the place where we should delete the topics than require
   // deletion
   
if ($delete_list) {
      
$query sprintf(
         
"DELETE FROM entry_topics ".
         
"WHERE entry_id = %d ".
         
"AND topic_id IN (%s)",
         
$form->entry->id,
         
$delete_list);
      
mysql_query($query$blog_link);
   }
}

function 
entry_delete_on_action($rownum = -1) {
   global 
$blog_link$form$domain;

   
$query sprintf(
               
"DELETE FROM entry_topics ".
               
"WHERE entry_id = %d ",
               
$form->entry->id);
   
mysql_query($query$blog_link);

   
$query sprintf(
               
"DELETE FROM entries ".
               
"WHERE id = %d ",
               
$form->entry->id);
   
mysql_query($query$blog_link);


   
close_db();

   
header("Location: /examples/");
   exit;
}

function 
entry_pre_display($rownum = -1) {
   global 
$form;
   if (!
$form->entry->is_record_existing())
      
$form->entry->_properties["delete"]->visible FALSE;
}

function 
topic_name_pre_render($rownum) {
   global 
$form;
   echo 
'<label for="'.
        
$form->topic->_properties['include_fl']->get_form_name($rownum).
        
'">';
}

function 
topic_name_post_render($rownum) {
   echo 
'</label>';
}


// Do the main processing

$form->process();

// Generate the HTML code for the form

echo "<html><body><head>\n";
echo 
"<link rel=\"stylesheet\" media=\"screen, projection\" type=\"text/css\" href=\"layout.css\" />\n";
echo 
"</head><h1>";
if (
$form->entry->is_record_existing())
   echo 
"Edit";
else
   echo 
"Create";
echo 
" entry</h1>\n";

if (isset(
$error)) echo "<h2>$error</h2>\n";

$form->start_form();
$bl->show_block("entry");
$form->end_form();

echo 
"</body></html>\n";
close_db();
?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products