--- tinymce.module 2007-08-01 00:40:36.000000000 +1000
+++ tinymce.module.profile_priority 2009-01-04 19:40:41.000000000 +1100
@@ -84,7 +84,17 @@ function tinymce_process_textarea($eleme
// Since tinymce_config() makes a db hit, only call it when we're pretty sure
// we're gonna render tinymce.
if (!$profile_name) {
- $profile_name = db_result(db_query('SELECT s.name FROM {tinymce_settings} s INNER JOIN {tinymce_role} r ON r.name = s.name WHERE r.rid IN (%s)', implode(',', array_keys($user->roles))));
+ $profile_name = db_result(db_query("
+ SELECT name
+ FROM {tinymce_settings}
+ WHERE priority = (
+ SELECT MIN(s.priority)
+ FROM {tinymce_settings} s
+ INNER JOIN {tinymce_role} r
+ ON r.name = s.name
+ WHERE r.rid IN (%s)
+ )
+ ", implode(',', array_keys($user->roles))));
if (!$profile_name) {
return $element;
}
@@ -1020,7 +1030,7 @@ function tinymce_profile_load($name = ''
if (!$profiles) {
$roles = user_roles();
- $result = db_query('SELECT * FROM {tinymce_settings}');
+ $result = db_query('SELECT * FROM {tinymce_settings} ORDER BY priority');
while ($data = db_fetch_object($result)) {
$data->settings = unserialize($data->settings);
$result2 = db_query("SELECT rid FROM {tinymce_role} WHERE name = '%s'", $data->name);
@@ -1041,22 +1051,79 @@ function tinymce_profile_load($name = ''
* Controller for tinymce profiles.
*/
function tinymce_profile_overview() {
- $output = '';
-
$profiles = tinymce_profile_load();
- if ($profiles) {
- $roles = user_roles();
- $header = array(t('Profile'), t('Roles'), t('Operations'));
- foreach ($profiles as $p) {
- $rows[] = array(array('data' => $p->name, 'valign' => 'top'), array('data' => implode("
\n", $p->rids)), array('data' => l(t('edit'), 'admin/settings/tinymce/edit/'. urlencode($p->name)) . ' '. l(t('delete'), 'admin/settings/tinymce/delete/'. urlencode($p->name)), 'valign' => 'top'));
- }
- $output .= theme('table', $header, $rows);
+ if (!empty($profiles)) {
+ $output = drupal_get_form('tinymce_form_profile_overview', $profiles);
$output .= t('
Create new profile
', array('!create-profile-url' => url('admin/settings/tinymce/add')));
}
else {
+ $output = '';
drupal_set_message(t('No profiles found. Click here to create a new profile.', array('!create-profile-url' => url('admin/settings/tinymce/add'))));
}
+ return $output;
+}
+function tinymce_form_profile_overview($profiles) {
+ $form = array();
+ $count = count($profiles);
+ $option = 0;
+ while ($option < $count) {
+ $options[] = ++$option;
+ }
+ foreach ($profiles as $p) {
+ $form['profile']['#tree'] = TRUE;
+ $form['profile'][$p->name] = array(
+ '#type' => 'select',
+ '#options' => $options,
+ '#default_value' => db_result(db_query("SELECT priority FROM {tinymce_settings} WHERE name = '%s'", $p->name)),
+ );
+ }
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Sort'),
+ );
+ return $form;
+}
+
+function tinymce_form_profile_overview_validate($form_id, $form_values) {
+ foreach ($form_values['profile'] as $profile => $priority) {
+ if (!is_numeric($priority)) {
+ form_set_error($form_values['profile'][$profile], t('Priority must be a numeric value.'));
+ }
+ }
+}
+
+function tinymce_form_profile_overview_submit($form_id, $form_values) {
+ foreach ($form_values['profile'] as $profile => $priority) {
+ db_query("UPDATE {tinymce_settings} SET priority = %d WHERE name = '%s'", $priority, $profile);
+ }
+}
+
+function theme_tinymce_form_profile_overview($form) {
+ $header = array(t('Priority'), t('Profile'), t('Roles'), t('Operations'));
+ $rows = array();
+ $profiles = tinymce_profile_load();
+ foreach ($profiles as $p) {
+ $rows[] = array(
+ array(
+ 'data' => drupal_render($form['profile'][$p->name]),
+ 'valign' => 'top',
+ ),
+ array(
+ 'data' => $p->name,
+ 'valign' => 'top',
+ ),
+ array(
+ 'data' => implode("
\n", $p->rids),
+ ),
+ array(
+ 'data' => l(t('edit'), 'admin/settings/tinymce/edit/'. urlencode($p->name)) .' '. l(t('delete'), 'admin/settings/tinymce/delete/'. urlencode($p->name)),
+ 'valign' => 'top',
+ ),
+ );
+ }
+ $output = theme('table', $header, $rows);
+ $output .= drupal_render($form);
return $output;
}
@@ -1141,7 +1208,17 @@ function _tinymce_page_match($edit) {
}
function tinymce_user_get_profile($account) {
- $profile_name = db_result(db_query('SELECT s.name FROM {tinymce_settings} s INNER JOIN {tinymce_role} r ON r.name = s.name WHERE r.rid IN (%s)', implode(',', array_keys($account->roles))));
+ $profile_name = db_result(db_query("
+ SELECT name
+ FROM {tinymce_settings}
+ WHERE priority = (
+ SELECT MIN(s.priority)
+ FROM {tinymce_settings} s
+ INNER JOIN {tinymce_role} r
+ ON r.name = s.name
+ WHERE r.rid IN (%s)
+ )
+ ", implode(',', array_keys($account->roles))));
if ($profile_name){
return tinymce_profile_load($profile_name);
}