You are here

function workflow_fields_update_6003 in Workflow Fields 6

Same name and namespace in other branches
  1. 7 workflow_fields.install \workflow_fields_update_6003()

File

./workflow_fields.install, line 28

Code

function workflow_fields_update_6003() {
  $ret = array();

  // That was a bug in earlier versions.
  db_query("DELETE FROM {workflow_fields} WHERE name=''");
  db_drop_index($ret, 'workflow_fields', 'sid');
  db_add_field($ret, 'workflow_fields', 'visible_roles', array(
    'type' => 'text',
    'not null' => FALSE,
  ));
  db_add_field($ret, 'workflow_fields', 'editable_roles', array(
    'type' => 'text',
    'not null' => FALSE,
  ));
  db_change_field($ret, 'workflow_fields', 'visible', 'visible', array(
    'type' => 'int',
    'size' => 'tiny',
    'not null' => FALSE,
  ));
  db_change_field($ret, 'workflow_fields', 'editable', 'editable', array(
    'type' => 'int',
    'size' => 'tiny',
    'not null' => FALSE,
  ));

  // Move role permissions from old schema to new schema.
  $distinct = db_query("SELECT DISTINCT sid, name, type FROM {workflow_fields}");
  while ($row = db_fetch_array($distinct)) {
    $permissions = db_query("SELECT rid, visible, editable, visible_userref, editable_userref FROM {workflow_fields} WHERE sid=%d AND name='%s' AND type='%s'", $row['sid'], $row['name'], $row['type']);
    $visible_roles = array();
    $editable_roles = array();
    while ($permission = db_fetch_array($permissions)) {
      if ($permission['visible']) {
        $visible_roles[] = $permission['rid'] == -2 ? $permission['visible_userref'] : $permission['rid'];
      }
      if ($permission['editable']) {
        $editable_roles[] = $permission['rid'] == -2 ? $permission['editable_userref'] : $permission['rid'];
      }
    }
    db_query("INSERT INTO {workflow_fields} (sid, name, type, visible_roles, editable_roles) VALUES (%d, '%s', '%s', '%s', '%s')", $row['sid'], $row['name'], $row['type'], implode(',', $visible_roles), implode(',', $editable_roles));
  }
  db_query("DELETE FROM {workflow_fields} WHERE visible_roles IS NULL AND editable_roles IS NULL");
  db_drop_field($ret, 'workflow_fields', 'rid');
  db_drop_field($ret, 'workflow_fields', 'visible');
  db_drop_field($ret, 'workflow_fields', 'editable');
  db_drop_field($ret, 'workflow_fields', 'visible_userref');
  db_drop_field($ret, 'workflow_fields', 'editable_userref');
  db_add_primary_key($ret, 'workflow_fields', array(
    'sid',
    'name',
    'type',
  ));
  db_add_index($ret, 'workflow_fields', 'runtime', array(
    'sid',
    'type',
  ));
  return $ret;
}