/** * This function will output the XML text for one statement */ function xmlOutput() { $o = ''; $o .= ' <STATEMENT NAME="' . $this->name . '" TYPE="' . XMLDBStatement::getXMLDBStatementName($this->type) . '" TABLE="' . $this->table . '"'; if ($this->comment) { $o .= ' COMMENT="' . htmlspecialchars($this->comment) . '"'; } if ($this->previous) { $o .= ' PREVIOUS="' . $this->previous . '"'; } if ($this->next) { $o .= ' NEXT="' . $this->next . '"'; } if ($this->sentences) { $o .= '>' . "\n"; $o .= ' <SENTENCES>' . "\n"; foreach ($this->sentences as $sentence) { $o .= ' <SENTENCE TEXT="' . htmlspecialchars($sentence) . '" />' . "\n"; } $o .= ' </SENTENCES>' . "\n"; $o .= ' </STATEMENT>' . "\n"; } else { $o .= '/>' . "\n"; } return $o; }
/** * Invoke method, every class will have its own * returns true/false on completion, setting both * errormsg and output as necessary */ function invoke() { parent::invoke(); $result = true; /// Set own core attributes $this->does_generate = ACTION_GENERATE_HTML; /// These are always here global $CFG, $XMLDB, $db; /// Do the job, setting result as needed /// Get the dir containing the file $dirpath = required_param('dir', PARAM_PATH); $dirpath = $CFG->dirroot . stripslashes_safe($dirpath); /// Get the correct dirs if (!empty($XMLDB->dbdirs)) { $dbdir =& $XMLDB->dbdirs[$dirpath]; } else { return false; } if (!empty($XMLDB->editeddirs)) { $editeddir =& $XMLDB->editeddirs[$dirpath]; $structure =& $editeddir->xml_file->getStructure(); } /// ADD YOUR CODE HERE $tableparam = optional_param('table', NULL, PARAM_CLEAN); $typeparam = optional_param('type', NULL, PARAM_CLEAN); /// If no table or type, show form if (!$tableparam || !$typeparam) { /// No postaction here $this->postaction = NULL; /// Get list of tables $dbtables = $db->MetaTables('TABLES'); $selecttables = array(); foreach ($dbtables as $dbtable) { $dbtable = str_replace($CFG->prefix, '', $dbtable); $selecttables[$dbtable] = $dbtable; } /// Get list of statement types $typeoptions = array(XMLDB_STATEMENT_INSERT => XMLDBStatement::getXMLDBStatementName(XMLDB_STATEMENT_INSERT), XMLDB_STATEMENT_UPDATE => XMLDBStatement::getXMLDBStatementName(XMLDB_STATEMENT_UPDATE), XMLDB_STATEMENT_DELETE => XMLDBStatement::getXMLDBStatementName(XMLDB_STATEMENT_DELETE), XMLDB_STATEMENT_CUSTOM => XMLDBStatement::getXMLDBStatementName(XMLDB_STATEMENT_CUSTOM)); if (!$selecttables) { $this->errormsg = 'No tables available to create statements'; return false; } /// Now build the form $o = '<form id="form" action="index.php" method="post">'; $o .= '<div>'; $o .= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />'; $o .= ' <input type="hidden" name ="action" value="new_statement" />'; $o .= ' <input type="hidden" name ="postaction" value="edit_statement" />'; $o .= ' <input type="hidden" name ="sesskey" value="' . sesskey() . '" />'; $o .= ' <table id="formelements" class="boxaligncenter" cellpadding="5">'; $o .= ' <tr><td><label for="type" accesskey="t">' . $this->str['statementtype'] . ' </label>' . choose_from_menu($typeoptions, 'type', '', 'choose', '', 0, true) . '<label for="table" accesskey="a">' . $this->str['statementtable'] . ' </label>' . choose_from_menu($selecttables, 'table', '', 'choose', '', 0, true) . '</td></tr>'; $o .= ' <tr><td colspan="2" align="center"><input type="submit" value="' . $this->str['create'] . '" /></td></tr>'; $o .= ' <tr><td colspan="2" align="center"><a href="index.php?action=edit_xml_file&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['back'] . ']</a></td></tr>'; $o .= ' </table>'; $o .= '</div></form>'; $this->output = $o; /// If table, retrofit information and, if everything works, /// go to the table edit action } else { /// Get some params (table is mandatory here) $tableparam = required_param('table', PARAM_CLEAN); $typeparam = required_param('type', PARAM_CLEAN); /// Only insert is allowed :-/ if ($typeparam != XMLDB_STATEMENT_INSERT) { $this->errormsg = 'Only insert of records is supported'; return false; } /// Calculate the name of the statement $typename = XMLDBStatement::getXMLDBStatementName($typeparam); $name = trim(strtolower($typename . ' ' . $tableparam)); /// Check that this Statement hasn't been created before if ($structure->getStatement($name)) { $this->errormsg = 'The statement "' . $name . '" already exists, please use it to add more sentences'; return false; } /// Create one new XMLDBStatement $statement = new XMLDBStatement($name); $statement->setType($typeparam); $statement->setTable($tableparam); $statement->setComment('Initial ' . $typename . ' of records on table ' . $tableparam); /// Finally, add the whole retroffited table to the structure /// in the place specified $structure->addStatement($statement); } /// Launch postaction if exists (leave this here!) if ($this->getPostAction() && $result) { return $this->launch($this->getPostAction()); } /// Return ok if arrived here return $result; }
/** * Invoke method, every class will have its own * returns true/false on completion, setting both * errormsg and output as necessary */ function invoke() { parent::invoke(); $result = true; /// Set own core attributes $this->does_generate = ACTION_GENERATE_HTML; /// These are always here global $CFG, $XMLDB; /// Do the job, setting result as needed /// Get the dir containing the file $dirpath = required_param('dir', PARAM_PATH); $dirpath = $CFG->dirroot . stripslashes_safe($dirpath); /// Get the correct dirs if (!empty($XMLDB->dbdirs)) { $dbdir =& $XMLDB->dbdirs[$dirpath]; } else { return false; } if (!empty($XMLDB->editeddirs)) { $editeddir =& $XMLDB->editeddirs[$dirpath]; $structure =& $editeddir->xml_file->getStructure(); } /// ADD YOUR CODE HERE $statementparam = optional_param('statement', NULL, PARAM_CLEAN); /// If no statement, then we are coming for a new one. Look for /// type and table and build the correct statementparam if (!$statementparam) { $typeparam = optional_param('type', NULL, PARAM_CLEAN); $tableparam = optional_param('table', NULL, PARAM_CLEAN); $typename = XMLDBStatement::getXMLDBStatementName($typeparam); $statementparam = trim(strtolower($typename . ' ' . $tableparam)); } if (!($statement =& $structure->getStatement($statementparam))) { /// Arriving here from a name change, looking for the new statement name $statementname = required_param('name', PARAM_CLEAN); $statement =& $structure->getStatement($statementparam); } $dbdir =& $XMLDB->dbdirs[$dirpath]; $origstructure =& $dbdir->xml_file->getStructure(); /// Add the main form $o = '<form id="form" action="index.php" method="post">'; $o .= '<div>'; $o .= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />'; $o .= ' <input type="hidden" name ="statement" value="' . $statementparam . '" />'; $o .= ' <input type="hidden" name ="action" value="edit_statement_save" />'; $o .= ' <input type="hidden" name ="postaction" value="edit_statement" />'; $o .= ' <table id="formelements" class="boxaligncenter">'; $o .= ' <tr valign="top"><td>Name:</td><td><input type="hidden" name ="name" value="' . s($statement->getName()) . '" />' . s($statement->getName()) . '</td></tr>'; $o .= ' <tr valign="top"><td><label for="comment" accesskey="c">Comment:</label></td><td><textarea name="comment" rows="3" cols="80" id="comment">' . s($statement->getComment()) . '</textarea></td></tr>'; $o .= ' <tr valign="top"><td> </td><td><input type="submit" value="' . $this->str['change'] . '" /></td></tr>'; $o .= ' </table>'; $o .= '</div></form>'; /// Calculate the buttons $b = ' <p class="centerpara buttons">'; /// The view original XML button if ($origstructure->getStatement($statementparam)) { $b .= ' <a href="index.php?action=view_statement_xml&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&select=original&statement=' . $statementparam . '">[' . $this->str['vieworiginal'] . ']</a>'; } else { $b .= ' [' . $this->str['vieworiginal'] . ']'; } /// The view edited XML button if ($statement->hasChanged()) { $b .= ' <a href="index.php?action=view_statement_xml&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&select=edited&statement=' . $statementparam . '">[' . $this->str['viewedited'] . ']</a>'; } else { $b .= ' [' . $this->str['viewedited'] . ']'; } /// The new sentence button $b .= ' <a href="index.php?action=new_sentence&postaction=edit_sentence&statement=' . $statementparam . '&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newsentence'] . ']</a>'; /// The back to edit xml file button $b .= ' <a href="index.php?action=edit_xml_file&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['back'] . ']</a>'; $b .= '</p>'; $o .= $b; /// Delete any 'changeme' sentence ///$statement->deleteSentence('changeme'); /// Add the fields list $sentences =& $statement->getSentences(); if (!empty($sentences)) { $o .= '<h3 class="main">' . $this->str['sentences'] . '</h3>'; $o .= '<table id="listfields" border="0" cellpadding="5" cellspacing="1" class="boxaligncenter flexible">'; $row = 0; foreach ($sentences as $key => $sentence) { /// Prepend some SQL if ($statement->getType() == XMLDB_STATEMENT_INSERT) { $p = 'INSERT INTO ' . $statement->getTable() . ' '; } else { $p = 'UNSUPPORTED SENTENCE TYPE '; } /// Calculate buttons $b = '</td><td class="button cell">'; /// The edit button $b .= '<a href="index.php?action=edit_sentence&sentence=' . $key . '&statement=' . urlencode($statement->getName()) . '&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['edit'] . ']</a>'; $b .= '</td><td class="button cell">'; /// The duplicate button $b .= '<a href="index.php?action=new_sentence&postaction=edit_sentence&basesentence=' . $key . '&statement=' . urlencode($statement->getName()) . '&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['duplicate'] . ']</a>'; $b .= '</td><td class="button cell">'; /// The delete button $b .= '<a href="index.php?action=delete_sentence&sentence=' . $key . '&statement=' . urlencode($statement->getName()) . '&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>'; $b .= '</td>'; /// Print table row $o .= '<tr class="r' . $row . '"><td class="table cell">' . $p . $sentence . $b . '</tr>'; $row = ($row + 1) % 2; } $o .= '</table>'; } $this->output = $o; /// Launch postaction if exists (leave this here!) if ($this->getPostAction() && $result) { return $this->launch($this->getPostAction()); } /// Return ok if arrived here return $result; }