--- flexinode.module 13 May 2004 01:24:36 -0000 1.18
+++ flexinode.module 10 Jun 2004 21:20:24 -0000
@@ -1,6 +1,26 @@
$name) {
- if ($section == 'node/add#flexinode-' . $type) {
+ $nodetype = _ctypeid_to_nodetype($type);
+ if ($section == 'node/add#' . $nodetype) {
$ctype = flexinode_load_content_type($type);
$output .= $ctype->description;
}
- if ($section == 'node/add/flexinode-' . $type) {
+ if ($section == 'node/add/' . $nodetype) {
$ctype = flexinode_load_content_type($type);
$output .= t($ctype->help);
}
@@ -76,8 +97,8 @@
function flexinode_perm() {
$perms = array("administer content types");
foreach (flexinode_content_types() as $ctype) {
- $perms[] = "create '$ctype->name' content";
- $perms[] = "edit own '$ctype->name' content";
+ $perms[] = _ctypename_create_perm($ctype->name);
+ $perms[] = _ctypename_edit_own_perm($ctype->name);
}
return $perms;
}
@@ -88,8 +109,8 @@
if ($type == "system") {
foreach (flexinode_content_types() as $ctype) {
- if (user_access("create '$ctype->name' content")) {
- menu("node/add/flexinode-" . $ctype->ctype_id, t("create %type", array("%type" => t($ctype->name))), "node_page");
+ if (user_access(_ctypename_create_perm($ctype->name))) {
+ menu("node/add/" . _ctypeid_to_nodetype($ctype->ctype_id), t("create %type", array("%type" => t($ctype->name))), "node_page");
}
}
if (user_access("access content")) {
@@ -106,7 +127,7 @@
}
}
- if ($type == 'node' && strpos($node->type, 'flexinode-') === 0) {
+ if ($type == 'node' && strpos($node->type, FLEXI_NODE_TYPE_PREFIX) === 0) {
/* Don't display a redundant edit link if they are node administrators */
if (flexinode_access("update", $node) && !user_access('administer nodes')) {
$links[] = l(t('edit this %nodename', array('%nodename' => flexinode_node_name($node))), "node/edit/$node->nid");
@@ -123,12 +144,8 @@
$output = "";
$ctype = flexinode_load_content_type($ctype_id);
- if ($ctype_id) {
- $type = "flexinode/" . check_query($ctype_id);
- } else {
- $type = "flexinode/%";
- }
- $result = pager_query("SELECT nid, type FROM {node} WHERE status = '1' AND type LIKE '$type' ORDER BY static DESC, created DESC", variable_get("default_nodes_main", 10));
+ $where = _where_ctype_id($ctype_id);
+ $result = pager_query("SELECT nid, type FROM {node} WHERE status = '1' AND $where ORDER BY static DESC, created DESC", variable_get("default_nodes_main", 10));
while ($node = db_fetch_object($result)) {
$output .= node_view(node_load(array("nid" => $node->nid, "type" => $node->type)), 1);
@@ -157,7 +174,9 @@
print theme("page", form($output), t("search %type", array("%type" => t($ctype->name))));
}
-
+/*
+Only a single column "Title" if ctype_id = 0, because then no $ctype.
+ */
function flexinode_page_table($ctype_id = 0) {
$output = "";
$ctype = flexinode_load_content_type($ctype_id);
@@ -169,15 +188,16 @@
$where_clauses = array();
foreach ($ctype->fields as $field) {
- $fieldname = "flexinode_". $field->field_id;
-
+ $fieldname = _fieldid_to_fieldname($field->field_id);
$fields_to_select[] = flexinode_invoke("db_select", $field);
$table_joins[] = "LEFT JOIN {flexinode_data} ". $fieldname ." ON n.nid = ". $fieldname .".nid";
$where_clauses[] = $fieldname .".field_id = ". $field->field_id;
}
- $type = "flexinode/" . check_query($ctype_id);
- $sql = "SELECT n.title, n.nid, ". implode(", ", $fields_to_select) ." FROM {node} n ". implode(" ", $table_joins) ." WHERE n.type = '$type' AND ". implode(" AND ", $where_clauses);
+ $where = _where_ctype_id(check_query($ctype_id), 'n.type');
+ $extra_fields = count($fields_to_select) > 0 ? ', ' . implode(", ", $fields_to_select) : '';
+ $extra_where = count($where_clauses) > 0 ? ' AND ' . implode(" AND ", $where_clauses) : '';
+ $sql = "SELECT n.title, n.nid$extra_fields FROM {node} n ". implode(" ", $table_joins) ." WHERE $where$extra_where";
if ($_POST['op'] == t("Search")) {
$edit = $_POST['edit'];
@@ -192,7 +212,7 @@
$sql .= " AND (n.title LIKE '%". $edit["search"] ."%'";
$sql .= " OR n.body LIKE '%". $edit["search"] ."%'";
foreach ($ctype->fields as $field) {
- $sql .= "OR flexinode_". $field->field_id .".textual_data LIKE '%". $edit["search"] ."%'";
+ $sql .= 'OR ' . _fieldid_to_fieldname($field->field_id) .".textual_data LIKE '%". $edit["search"] ."%'";
}
$sql .= ")";
}
@@ -201,7 +221,7 @@
// build the columns
$header[] = array("data" => t("title"), "field" => "n.title");
foreach ($ctype->fields as $field) {
- $fieldname = "flexinode_". $field->field_id;
+ $fieldname = _fieldid_to_fieldname($field->field_id);
$sort_column = flexinode_invoke("db_sort_column", $field);
if ($sort_column) {
@@ -219,12 +239,12 @@
$row = array(l($node->title, "node/view/" . $node->nid));
foreach ($ctype->fields as $field) {
$data = flexinode_invoke("format", $field, $node, TRUE);
- if ($data) {
- $row[] = $data;
- }
+ // this is a table, we have to add a column regardless of whether $data is set
+ $row[] = $data;
}
$rows[] = $row;
}
+ // print("got " . count($rows) . " from sql: " . $sql);
$output .= theme("table", $header, $rows);
$output .= theme("pager", "", 20, 0, "default", tablesort_pager());
@@ -371,15 +391,14 @@
function flexinode_node_types() {
$types = array();
foreach (flexinode_content_types() as $type => $name) {
- $types[] = "flexinode-" . $type;
+ $types[] = _ctypeid_to_nodetype($type);
}
return $types;
}
-
function flexinode_node_name($node) {
$type = is_string($node) ? $node : (is_array($node) ? $node[type] : $node->type);
- $ctype = flexinode_load_content_type(substr($type, 10));
+ $ctype = flexinode_load_content_type(_nodetype_to_ctypeid($type));
return $ctype->name ? t($ctype->name) : t("flexible content");
}
@@ -392,28 +411,28 @@
}
if ($op == "create") {
- return user_access("create '". flexinode_node_name($node) ."' content");
+ return user_access(_ctypename_create_perm(flexinode_node_name($node)) );
}
if ($op == "update") {
- return user_access("edit own '". flexinode_node_name($node) ."' content") && ($user->uid == $node->uid);
+ return user_access(_ctypename_edit_own_perm(flexinode_node_name($node))) && ($user->uid == $node->uid);
}
if ($op == "delete") {
- return user_access("edit own '". flexinode_node_name($node) ."' content") && ($user->uid == $node->uid);
+ return user_access(_ctypename_edit_own_perm(flexinode_node_name($node))) && ($user->uid == $node->uid);
}
}
function flexinode_load($node) {
- $ctype = flexinode_load_content_type(substr($node->type, 10));
+ $ctype = flexinode_load_content_type(_nodetype_to_ctypeid($node->type));
// build the query
$fields_to_select = array();
$table_joins = array();
foreach ($ctype->fields as $field) {
- $fieldname = "flexinode_". $field->field_id;
+ $fieldname = _fieldid_to_fieldname($field->field_id);
$fields_to_select[] = flexinode_invoke("db_select", $field);
$table_joins[] = "LEFT JOIN {flexinode_data} ". $fieldname ." ON n.nid = ". $fieldname .".nid AND ". $fieldname .".field_id = " . $field->field_id;
@@ -425,7 +444,7 @@
// unserialize necessary fields
foreach ($ctype->fields as $field) {
- $fieldname = "flexinode_". $field->field_id;
+ $fieldname = _fieldid_to_fieldname($field->field_id);
$field_data = flexinode_invoke("load", $field, $flexinode);
if ($field_data) {
$flexinode->$fieldname = $field_data;
@@ -475,7 +494,7 @@
$output = "";
if (!isset($node->ctype_id)) {
- $node->ctype_id = substr($node->type, 10);
+ $node->ctype_id = _nodetype_to_ctypeid($node->type);
}
$ctype = flexinode_load_content_type($node->ctype_id);
@@ -501,7 +520,7 @@
$error = array();
foreach ($ctype->fields as $field) {
- $fieldname = "flexinode_". $field->field_id;
+ $fieldname = _fieldid_to_fieldname($field->field_id);
$validation = flexinode_invoke("validate", $field, $node);
if ($validation) {
$node->$fieldname = $validation['value'];
@@ -536,11 +555,12 @@
$node->original_body = $node->body = check_output($node->body);
foreach ($ctype->fields as $field) {
- $fieldname = "flexinode_". $field->field_id;
+ $fieldname = _fieldid_to_fieldname($field->field_id);
if (isset($node->$fieldname)){
$data = flexinode_invoke("format", $field, $node, FALSE);
+ //print("flexinode_content(fieldname=$fieldname,data=$data,label=$field->label)
\n");
if (!empty($data) && $data) {
- $node->body .= theme("flexinode_". $field->field_type, $field->field_id, $field->label, $node->$fieldname, $data);
+ $node->body .= theme(_fieldtype_to_themename($field->field_type), $field->field_id, $field->label, $node->$fieldname, $data);
}
}
}
@@ -608,6 +628,30 @@
#################### Private Functions ####################
+function _nodetype_to_ctypeid($nodetype) {
+ // 'flexinode' has 9 letters
+ return substr($nodetype, 10);
+}
+
+function _ctypename_create_perm($name) {return "create $name content";}
+function _ctypename_edit_own_perm($name) {return "edit own $name content";}
+
+function _ctypeid_to_nodetype ($ctype_id) {
+ return FLEXI_NODE_TYPE_PREFIX . check_query($ctype_id);
+}
+
+function _fieldid_to_fieldname ($field_id) {
+ return FLEXI_FIELD_NAME_PREFIX . $field_id;
+}
+
+function _fieldtype_to_themename ($field_type) {
+ return FLEXI_FIELD_TYPE_THEME_PREFIX . $field_type;
+}
+
+function _where_ctype_id($ctype_id, $colname = 'type') {
+ return $ctype_id ? "$colname = '" . _ctypeid_to_nodetype($ctype_id) . "'" : "$colname LIKE '" . FLEXI_LIKE_ALL . "'";
+}
+
function flexinode_content_types() {
$types = array();
$result = db_query("SELECT * FROM {flexinode_type}");
@@ -633,6 +677,7 @@
$ctype->fields[] = $field;
}
+ //if (!$ctype) {print("no ctype for ctype_id=$ctype_id
\n");}
$content_types[$ctype_id] = $ctype;
return $ctype;
}
@@ -737,11 +782,12 @@
// TODO: Delete files as appropriate.
db_query("DELETE FROM {flexinode_type} WHERE ctype_id = %d", $edit["ctype_id"]);
db_query("DELETE FROM {flexinode_field} WHERE ctype_id = %d", $edit["ctype_id"]);
- $result = db_query("SELECT nid FROM {node} WHERE type = '%s'", 'flexinode_' . $edit["ctype_id"]);
+ $nodetype = _ctypeid_to_nodetype($edit["ctype_id"]);
+ $result = db_query("SELECT nid FROM {node} WHERE type = '%s'", $nodetype);
while ($node = db_fetch_object($result)) {
db_query("DELETE FROM {flexinode_data} WHERE nid = %d", $node->nid);
}
- db_query("DELETE FROM {node} WHERE type = '%s'", 'flexinode_' . $edit["ctype_id"]);
+ db_query("DELETE FROM {node} WHERE type = '%s'", $nodetype);
drupal_set_message(t("deleted content type '%name'.", array("%name" => $edit["name"])));
}