diff -ru archive/fckeditor/fckeditor.install sites/all/modules/fckeditor/fckeditor.install --- archive/fckeditor/fckeditor.install Wed Mar 19 14:42:01 2008 +++ sites/all/modules/fckeditor/fckeditor.install Wed Jun 25 11:11:49 2008 @@ -41,6 +41,12 @@ PRIMARY KEY (name) ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); + db_query("CREATE TABLE {fckeditor_node_type} ( + name varchar(128) NOT NULL default '', + type varchar(32) NOT NULL default '', + PRIMARY KEY (name,type) + ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); + db_query("CREATE TABLE {fckeditor_role} ( name varchar(128) NOT NULL default '', rid tinyint(3) unsigned NOT NULL default '0', @@ -55,6 +61,12 @@ PRIMARY KEY (name) );"); + db_query("CREATE TABLE {fckeditor_node_type} ( + name varchar(128) NOT NULL default '', + type varchar(32) NOT NULL default '', + PRIMARY KEY (name,type) + );"); + db_query("CREATE TABLE {fckeditor_role} ( name varchar(128) NOT NULL default '', rid smallint NOT NULL default '0', @@ -345,9 +357,40 @@ } /** + * Update from 5.x-2.1 to 5.x-2.x + * + */ +function fckeditor_update_4() { + $ret = array(); + + switch ($GLOBALS['db_type']) { + case 'mysql': + case 'mysqli': + $ret[] = update_sql("CREATE TABLE {fckeditor_node_type} ( + name varchar(128) NOT NULL default '', + type varchar(32) NOT NULL default '', + PRIMARY KEY (name,type) + ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); + break; + + case 'pgsql': + $ret[] = update_sql("CREATE TABLE {fckeditor_node_type} ( + name varchar(128) NOT NULL default '', + type varchar(32) NOT NULL default '', + PRIMARY KEY (name,type) + );"); + break; + } + + return $ret; +} + +/** * Implementation of hook_uninstall() */ function fckeditor_uninstall() { db_query('DROP TABLE {fckeditor_settings}'); db_query('DROP TABLE {fckeditor_role}'); + db_query('DROP TABLE {fckeditor_node_type}'); } + diff -ru archive/fckeditor/fckeditor.module sites/all/modules/fckeditor/fckeditor.module --- archive/fckeditor/fckeditor.module Wed Mar 19 15:25:13 2008 +++ sites/all/modules/fckeditor/fckeditor.module Fri Jun 27 15:27:19 2008 @@ -453,13 +453,22 @@ */ function fckeditor_profile_save($edit) { db_query("DELETE FROM {fckeditor_settings} WHERE name = '%s' or name = '%s'", $edit['name'], $edit['old_name']); - db_query("DELETE FROM {fckeditor_role} WHERE name = '%s' or name = '%s'", $edit['name'], $edit['old_name']); db_query("INSERT INTO {fckeditor_settings} (name, settings) VALUES ('%s', '%s')", $edit['name'], serialize($edit)); + + db_query("DELETE FROM {fckeditor_role} WHERE name = '%s' or name = '%s'", $edit['name'], $edit['old_name']); if ($edit['rids']) { foreach ($edit['rids'] as $rid => $value) { db_query("INSERT INTO {fckeditor_role} (name, rid) VALUES ('%s', %d)", $edit['name'], $rid); } } + + db_query("DELETE FROM {fckeditor_node_type} WHERE name = '%s' or name = '%s'", $edit['name'], $edit['old_name']); + if ($edit['types']) { + foreach ($edit['types'] as $type => $value) { + db_query("INSERT INTO {fckeditor_node_type} (name, type) VALUES ('%s', '%s')", $edit['name'], $type); + } + } + // if users can't set their own defaults, make sure to remove $user->fckeditor_status so their default doesn't override the main default if ($edit['user_choose'] == 'false') { global $user; @@ -520,9 +529,12 @@ if (!$profiles) { $roles = user_roles(); + $types = node_get_types('names'); $result = db_query('SELECT * FROM {fckeditor_settings}'); while ($data = db_fetch_object($result)) { $data->settings = unserialize($data->settings); + + // get fskeditor roles $result2 = db_query("SELECT rid FROM {fckeditor_role} WHERE name = '%s'", $data->name); $role = array(); while ($r = db_fetch_object($result2)) { @@ -530,6 +542,14 @@ } $data->rids = $role; + // get fskeditor node types + $result3 = db_query("SELECT type FROM {fckeditor_node_type} WHERE name = '%s'", $data->name); + $type = array(); + while ($r = db_fetch_object($result3)) { + $type[$r->type] = $types[$r->type]; + } + $data->types = $type; + $profiles[$data->name] = $data; } } @@ -596,6 +616,7 @@ $conf = array(); $conf = $profile->settings; + drupal_set_message('FCKProfile Conf:
'.print_r($conf, true).''); if ($conf['allow_user_conf']=='t') { foreach (array('default', 'show_toggle', 'popup', 'skin', 'toolbar', 'expand', 'width', 'lang', 'auto_lang') as $setting) { @@ -1266,6 +1287,8 @@ // profile per role. $orig_roles = user_roles(FALSE, 'access fckeditor'); $roles = $orig_roles; + + $types = node_get_types('names'); if ($edit->rids && !user_roles(false, 'access fckeditor')) { drupal_set_message(t('You haven\'t assigned
!access1 !permissions yet.!access1 !permissions before updating FCKeditor profiles.',
@@ -1322,6 +1345,15 @@
'#required' => TRUE
);
+ $form['basic']['types'] = array(
+ '#type' => 'checkboxes',
+ '#title' => t('Content types that can use this profile'),
+ '#default_value' => array_keys((array) $edit->types),
+ '#options' => $types,
+# '#description' => t(''),
+ '#required' => TRUE
+ );
+
$form['basic']['allow_user_conf'] = array(
'#type' => 'select',
'#title' => t('Allow users to customize FCKeditor appearance'),
@@ -1756,28 +1788,68 @@
function fckeditor_user_get_profile($user) {
static $profile_name;
+ $page_node_type = null;
+ if ('node' == arg(0)) {
+ if ('add' == arg(1)) {
+ $page_node_type = arg(2);
+ } // end if add
+ else if ('edit' == arg(2)) {
+ $nid = arg(1);
+ $node = node_load($nid);
+ $page_node_type = $node->type;
+ } // end if edit
+ } // end if node
+
// Since fckeditor_profile_load() makes a db hit, only call it when we're pretty sure
// we're gonna render fckeditor.
- if (!isset($profile_name[$user->uid])) {
+ if (!isset($profile_name[$page_node_type][$user->uid])) {
$sorted_roles = fckeditor_sorted_roles();
- foreach ($sorted_roles as $rid => $name) {
- if (isset($user->roles[$rid])) {
- break;
- }
- }
- if (isset($user->roles[$rid])) {
- $profile_name[$user->uid] = db_result(db_query("SELECT s.name FROM {fckeditor_settings} s INNER JOIN {fckeditor_role} r ON r.name = s.name WHERE r.rid='%s'", $rid));
- }
- else if ($user->uid == "1") {
- $profile_name[$user->uid] = db_result(db_query_range("SELECT s.name FROM {fckeditor_settings} s INNER JOIN {fckeditor_role} r ON r.name = s.name ORDER BY r.rid DESC", 1));
- }
- }
+ if (!empty($sorted_roles)) {
+ $sql = "SELECT r.rid, " .
+ (isset($page_node_type) ? "nt.type, " : '') .
+ "s.name FROM {fckeditor_settings} s " .
+ "INNER JOIN {fckeditor_role} r ON r.name = s.name " .
+ (isset($page_node_type)
+ ? "INNER JOIN {fckeditor_node_type} nt ON nt.name = s.name " : '') .
+ "WHERE r.rid IN (%s) " .
+ (isset($page_node_type) ? "AND nt.type = '%s' " : '' );
+ $res = db_query($sql, implode(",", array_keys($sorted_roles)),
+ $page_node_type);
+
+ $profiles = array();
+ while ($row = db_fetch_array($res)) {
+ $profiles[] = $row;
+ } // end while rows
+
+ $sorted_profiles = array();
+ foreach ($sorted_roles as $rid => $name) {
+ foreach ($profiles as $key => $row) {
+ if ($rid == $row['rid']) {
+ $sorted_profiles[] = $row;
+ unset($profiles[$key]);
+ break;
+ } // end if found rid
+ } // end foreach $row
+ } // end foreach $rid
+
+ $preferred_profile = current($sorted_profiles);
+ $profile_name[$page_node_type][$user->uid] = $preferred_profile['name'];
+ } // end if $sorted_roles
+ } // end if no profile
- if (isset($profile_name[$user->uid]) && $profile_name[$user->uid]) {
- $profile = fckeditor_profile_load($profile_name[$user->uid]);
- return $profile;
- }
+ if (isset($profile_name[$page_node_type][$user->uid])
+ && $profile_name[$page_node_type][$user->uid]) {
+ $profile = fckeditor_profile_load($profile_name[$page_node_type][$user->uid]);
+ if (!isset($page_node_type)
+ || in_array($page_node_type, array_keys($profile->types)))
+ {
+ return $profile;
+ } // end if no page node type or valid node type
+ } // end if valid profile name for user
return false;
-}
\ No newline at end of file
+}
+
+// vim:fenc=utf-8:ft=php:ai:si:ts=2:sw=2:et:
+