+
+/**
+* Implementation of hook_validate()
+*/
+function mkdru_validate($node) {
+ if (!is_numeric($node->source_max)) {
+ form_set_error('source_max', t('Please enter a number.'));
+ }
+ if (!is_numeric($node->author_max)) {
+ form_set_error('author_max', t('Please enter a number.'));
+ }
+ if (!is_numeric($node->subject_max)) {
+ form_set_error('subject_max', t('Please enter a number.'));
+ }
+}
+
+/**
+* Implementation of hook_insert().
+*/
+function mkdru_insert($node) {
+ db_query("INSERT INTO {mkdru} (nid, vid, pz2_path, use_sessions, source_max, author_max, subject_max) VALUES (%d, %d, '%s', %d, %d, %d, %d)",
+ $node->nid, $node->vid, $node->pz2_path, $node->use_sessions, $node->source_max, $node->author_max, $node->subject_max);
+}
+
+/**
+* Implementation of hook_update().
+*/
+function mkdru_update($node) {
+ if ($node->revision) {
+ // New revision; treat it as a new record.
+ mkdru_insert($node);
+ }
+ else {
+ db_query("UPDATE {mkdru} SET pz2_path = '%s', use_sessions = %d, source_max = %d, author_max = %d, subject_max = %d WHERE vid = %d", $node->pz2_path, $node->use_sessions, $node->source_max, $node->author_max, $node->subject_max, $node->vid);
+ }
+}
+
+/**
+ * Implementation of hook_nodeapi().
+ *
+ * When a node revision is deleted, we need to remove the corresponding record
+ * from our table. The only way to handle revision deletion is by implementing
+ * hook_nodeapi().
+ */
+function mkdru_nodeapi(&$node, $op, $teaser, $page) {
+ switch ($op) {
+ case 'delete revision':
+ db_query('DELETE FROM {mkdru} WHERE vid = %d', $node->vid);
+ break;
+ }
+}
+
+/**
+ * Implementation of hook_delete().
+ */
+function mkdru_delete($node) {
+ // Deleting by nid covers all revisions.
+ db_query('DELETE FROM {mkdru} WHERE nid = %d', $node->nid);
+}
+
+
+
+// Node rendering
+/**
+* Implementation of hook_load()
+*/
+function mkdru_load($node) {
+ return array('mkdru' => db_fetch_object(db_query(
+ 'SELECT * FROM {mkdru} WHERE vid = %d', $node->vid)));
+}
+