$t('ImageCache Directory'), 'value' => $t('%p is not a directory or is not readable by the webserver.', array('%p' => $imagecache_directory)), 'severity' => REQUIREMENT_ERROR, ); } elseif (!is_writable($imagecache_directory)) { $requirements['imagecache_directory'] = array( 'title' => $t('ImageCache Directory'), 'value' => $t('%p is not writeable by the webserver.', array('%p' => $imagecache_directory)), 'severity' => REQUIREMENT_ERROR, ); } else { $requirements['imagecache_directory'] = array( 'title' => $t('ImageCache Directory'), 'value' => $t('An unknown error occured.'), 'description' => $t('An unknown error occured trying to verify %p is a directory and is writable.', array('%p' => $imagecache_directory)), 'severity' => REQUIREMENT_ERROR, ); } } if (!is_writable(file_directory_temp())) { $requirements['imagecache_directory'] = array( 'title' => $t('ImageCache Temp Directory'), 'value' => $t('%p is not writeable by the webserver.', array('%p' => file_directory_temp())), 'severity' => REQUIREMENT_ERROR, ); } } return $requirements; } function imagecache_schema() { $schema['imagecache_preset'] = array( 'fields' => array( 'presetid' => array( 'description' => t('The primary identifier for an imagecache_preset.'), 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, ), 'presetname' => array( 'description' => t('The primary identifier for a node.'), 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, ), ), 'primary key' => array('presetid'), ); $schema['imagecache_action'] = array( 'fields' => array( 'actionid' => array( 'description' => t('The primary identifier for an imagecache_action.'), 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, ), 'presetid' => array( 'description' => t('The primary identifier for an imagecache_preset.'), 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, ), 'weight' => array( 'description' => t('The weight of the action in the preset.'), 'type' => 'int', 'not null' => TRUE, 'default' => 0, ), 'module' => array( 'description' => t('The module that defined the action.'), 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, ), 'action' => array( 'description' => t('The unique ID of the action to be executed.'), 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, ), 'data' => array( 'description' => t('The configuration data for the action.'), 'type' => 'text', 'not null' => TRUE, 'size' => 'big', 'serialize' => TRUE, ), ), 'primary key' => array('actionid'), 'indexes' => array( 'presetid' => array('presetid'), ), ); return $schema; } /** * Implementation of hook_install(). */ function imagecache_install() { drupal_install_schema('imagecache'); } /** * Implementation of hook_uninstall(). */ function imagecache_uninstall() { // Remove any cached images. $path = file_directory_path() .'/imagecache/'; if (is_dir($path)) { _imagecache_recursive_delete($path); } drupal_uninstall_schema('imagecache'); } // Add action id to actions table. function imagecache_update_1() { $ret = array(); $ret[] = update_sql('ALTER TABLE {imagecache_actions} ADD COLUMN actionid INT UNSIGNED NOT NULL primary key auto_increment'); return $ret; } // Rename rulesets to presets; Make all table names singular; function imagecache_update_2() { $ret = array(); $ret[] = update_sql('ALTER TABLE {imagecache_rulesets} RENAME TO {imagecache_preset}'); $ret[] = update_sql('ALTER TABLE {imagecache_actions} RENAME TO {imagecache_action}'); switch ($GLOBALS['db_type']) { case 'mysql': case 'mysqli': $ret[] = update_sql('ALTER TABLE {imagecache_preset} CHANGE rulesetid presetid INT UNSIGNED NOT NULL AUTO_INCREMENT'); $ret[] = update_sql('ALTER TABLE {imagecache_preset} CHANGE rulesetname presetname VARCHAR(255) NOT NULL DEFAULT \'\''); $ret[] = update_sql('ALTER TABLE {imagecache_action} CHANGE rulesetid presetid INTEGER NOT NULL DEFAULT 0'); break; case 'pgsql': $ret[] = update_sql('ALTER TABLE {imagecache_preset} RENAME COLUMN rulesetid TO presetid'); $ret[] = update_sql('ALTER TABLE {imagecache_preset} RENAME COLUMN rulesetname TO presetname'); $ret[] = update_sql('ALTER TABLE {imagecache_action} RENAME COLUMN rulesetid TO presetid'); break; } return $ret; } /** * Remove auto-increment from tables, instead depending on the sequences table and db_next_id() */ function imagecache_update_3() { $ret = array(); $count_action = db_result(db_query('SELECT max(actionid) FROM {imagecache_action}')) + 1; $count_preset = db_result(db_query('SELECT max(presetid) FROM {imagecache_preset}')) + 1; switch ($GLOBALS['db_type']) { case 'mysql': case 'mysqli': $ret[] = update_sql("ALTER TABLE {imagecache_action} CHANGE actionid actionid INT UNSIGNED NOT NULL"); $ret[] = update_sql("ALTER TABLE {imagecache_preset} CHANGE presetid presetid INT UNSIGNED NOT NULL"); // Add the sequences $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES ('{imagecache_action}_actionid', $count_action)"); $ret[] = update_sql("INSERT INTO {sequences} (name, id) VALUES ('{imagecache_preset}_presetid', $count_preset)"); break; case 'pgsql': db_change_column($ret, 'imagecache_action', 'actionid', 'actionid', 'INT', $attributes = array('not null' => TRUE, 'default' => '0')); db_change_column($ret, 'imagecache_preset', 'presetid', 'presetid', 'INT', $attributes = array('not null' => TRUE, 'default' => '0')); // Re-add our indexes $ret[] = update_sql("ALTER TABLE {imagecache_action} ADD PRIMARY KEY (actionid)"); $ret[] = update_sql("ALTER TABLE {imagecache_preset} ADD PRIMARY KEY (rulesetid)"); // Add the sequences $ret[] = update_sql("CREATE SEQUENCE {imagecache_action}_actionid_seq INCREMENT 1 START $count_action;"); $ret[] = update_sql("CREATE SEQUENCE {imagecache_preset}_presetid_seq INCREMENT 1 START $count_preset;"); } return $ret; } function imagecache_update_4() { $ret = array(); // add action column to the imagecache_action table just becuase serialization bugs me. switch ($GLOBALS['db_type']) { case 'mysql': case 'mysqli': $ret[] = update_sql("ALTER TABLE {imagecache_action} ADD COLUMN action varchar(255) not null default '' after weight"); break; case 'pgsql': $ret[] = update_sql("ALTER TABLE {imagecache_action} ADD COLUMN action varchar(255) NOT NULL DEFAULT ''"); break; } // unserialize what we can. $result = db_query("SELECT * FROM {imagecache_action}"); while ($row = db_fetch_array($result)) { $data = unserialize($row['data']); // remove function from data if present; $function = $data['function']; unset($data['function']); $data = serialize($data); // Rename scale and crop for any people who upgraded early... if ($function == 'scale and crop') { $function = 'scale_and_crop'; } // Keep scale and crop and the old scale function seperate... I don't really want to break BC with // the 2.x update. We'll deprecate this version. if ($function == 'scale') { $function = 'deprecated_scale'; } // prefix with module name as per new status quo. // since other modules couldn't implement actions before this update // we assume imagecache... $function = 'imagecache_'. $function; db_query("UPDATE {imagecache_action} SET action='%s', data='%s' WHERE actionid = %d", $function, $data, $row['actionid']); } cache_clear_all('*', 'cache', TRUE); return $ret; } function imagecache_update_5() { // enable image API. module_rebuild_cache(); // make sure new modules are in the system table. module_enable(array('imageapi', 'imageapi_gd', 'imageapi_imagemagick')); // enable our new module. // @todo: update formatter names: http://cvs.drupal.org/viewvc.py/drupal/contributions/modules/imagecache/imagecache.module?r1=1.68&r2=1.68.2.8&pathrev=DRUPAL-5--2 // ln: 516 diff 511. return array(); } /** * Upgrade from Drupal 5 => Drupal 6. * * Use serial data type for primary keys. Add module field and presetid index. */ function imagecache_update_6000() { $ret = array(); // Our additions to the schema. $schema['imagecache_preset'] = array( 'fields' => array( 'presetid' => array( 'description' => t('The primary identifier for an imagecache_preset.'), 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, ), ), 'primary key' => array('presetid'), ); $schema['imagecache_action'] = array( 'fields' => array( 'actionid' => array( 'description' => t('The primary identifier for an imagecache_action.'), 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, ), 'module' => array( 'description' => t('The module that defined the action.'), 'type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'initial' => 'imagecache', ), ), 'primary key' => array('actionid'), ); // Update primary keys to serial type for Drupal 6 foreach ($schema as $table => $info) { $field = $info['primary key'][0]; if (db_table_exists('sequences')) { $ret[] = update_sql("DELETE FROM {sequences} WHERE name = '{{$table}}_{$field}'"); } db_change_field($ret, $table, $field, $field, $info['fields'][$field]); } // Going to assume that if the table doesn't have a module column that // it needs the index as well. if (!db_column_exists('imagecache_action', 'module')) { // Add 'module' column to action table. db_add_field($ret, 'imagecache_action', 'module', $schema['imagecache_action']['fields']['module']); // Add 'presetid' index to action table db_add_index($ret, 'imagecache_action', 'presetid', array('presetid')); } return $ret; } /** * Make sure the schemas match, the weight should be signed. */ function imagecache_update_6001() { $ret = array(); db_change_field($ret, 'imagecache_action', 'weight', 'weight', array('type' => 'int', 'not null' => TRUE, 'default' => 0)); return $ret; }