? .git
? autocomplete_working.patch
? viewsacces.patch
? schedule/views/station_schedule_handler_filter_time.inc
? schedule/views/station_schedule_plugin_argument_validate_day.inc
Index: station.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/station.install,v
retrieving revision 1.11
diff -u -p -r1.11 station.install
--- station.install	1 Nov 2007 17:52:11 -0000	1.11
+++ station.install	19 Apr 2009 21:33:17 -0000
@@ -38,3 +38,57 @@ function station_update_100() {
   return array();
 }
 
+
+/**
+ * Rename the module's permissions to make them consistent with core.
+ */
+function station_update_6000() {
+  $ret = array();
+
+  $replacements = array(
+    // Catalog
+    'administer catalog' => array('administer station catalog'),
+    'view catalog' => array('view station album content'),
+    'create album content' => array('create station album content'),
+    'edit album content' => array('edit any station album content', 'delete any station album content'),
+    // Playlist
+    'create playlists' => array('create station playlist content'),
+    'edit own playlists' => array('edit own station playlist content', 'delete own station playlist content'),
+    // Program
+    'administer programs' => array('administer station programs'),
+    'edit program content' => array('edit any station program content'),
+    'edit own program content' => array('edit own station program content'),
+    // Schedule
+    'administer schedule' => array('administer station schedule'),
+  );
+
+  $result = db_query("SELECT rid, perm FROM {permission}");
+  while ($row = db_fetch_object($result)) {
+    $old_perms = explode(', ', $row->perm);
+    $new_perms = $old_perms;
+
+    // Rename the permission.
+    foreach ($replacements as $from => $to) {
+      $key = array_search($from, $old_perms);
+      if ($key !== FALSE) {
+        unset($new_perms[$key]);
+        $new_perms = array_merge($new_perms, $to);
+      }
+    }
+
+    // If they had 'access content' permissions before grant them the new
+    // view permissions.
+    if (in_array('access content', $old_perms)) {
+      $new_perms = array_merge($new_perms, array(
+        'view station playlist content',
+        'view station program content',
+        'view station schedule content',
+      ));
+    }
+
+    $new_perm = db_escape_string(implode(', ', array_unique($new_perms)));
+    $ret[] = update_sql("UPDATE {permission} SET perm = '". db_escape_string($new_perm) ."' WHERE rid = ". (int) $row->rid);
+  }
+
+  return $ret;
+}
\ No newline at end of file
Index: station.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/station.module,v
retrieving revision 1.44
diff -u -p -r1.44 station.module
--- station.module	25 Jan 2009 18:21:51 -0000	1.44
+++ station.module	19 Apr 2009 21:33:17 -0000
@@ -78,7 +78,7 @@ function station_theme() {
 function station_block($op = 'list', $delta = 0, $edit = array()) {
   switch ($op) {
   case 'view':
-    if (user_access('access content')) {
+    if (user_access('view station schedule content')) {
       switch ($delta) {
         case 0:
           $block['subject'] = t('On Air');
Index: catalog/station_catalog.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/catalog/station_catalog.module,v
retrieving revision 1.30
diff -u -p -r1.30 station_catalog.module
--- catalog/station_catalog.module	25 Jan 2009 18:26:08 -0000	1.30
+++ catalog/station_catalog.module	19 Apr 2009 21:33:17 -0000
@@ -50,33 +50,35 @@ function station_catalog_node_info() {
  */
 function station_catalog_perm() {
   return array(
-    'view catalog',
-    'create album content',
-    'edit album content',
-    'administer catalog',
+    'administer station catalog',
+    'view station album content',
+    'create station album content',
+    'edit any station album content',
+    'delete any station album content',
   );
 }
 
 /**
  * Implementation of hook_access().
  */
-function station_catalog_album_accesss($op, $node, $account) {
-
+function station_catalog_album_access($op, $node, $account) {
   // Admins can do anything.
-  if (user_access('administer catalog', $account)) {
+  if (user_access('administer station catalog', $account)) {
     return TRUE;
   }
 
   switch ($op) {
     case 'view':
-      return user_access('view catalog', $account);
+      return user_access('view station album content', $account);
 
     case 'create':
-      return user_access('create album content', $account);
+      return user_access('create station album content', $account);
 
     case 'update':
+      return user_access('edit any station album content', $account);
+
     case 'delete':
-      return user_access('edit album content', $account);
+      return user_access('delete any station album content', $account);
   }
 }
 
Index: catalog/station_catalog.views_default.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/catalog/station_catalog.views_default.inc,v
retrieving revision 1.3
diff -u -p -r1.3 station_catalog.views_default.inc
--- catalog/station_catalog.views_default.inc	13 Jan 2009 04:57:25 -0000	1.3
+++ catalog/station_catalog.views_default.inc	19 Apr 2009 21:33:17 -0000
@@ -168,7 +168,7 @@ function station_catalog_views_default_v
   ));
   $handler->override_option('access', array(
     'type' => 'perm',
-    'perm' => 'view catalog',
+    'perm' => 'view station album content',
   ));
   $handler->override_option('title', 'Catalog');
   $handler->override_option('use_pager', '1');
Index: playlist/station_playlist.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/playlist/station_playlist.module,v
retrieving revision 1.18
diff -u -p -r1.18 station_playlist.module
--- playlist/station_playlist.module	13 Jan 2009 05:06:30 -0000	1.18
+++ playlist/station_playlist.module	19 Apr 2009 21:33:17 -0000
@@ -68,8 +68,13 @@ function station_playlist_node_info() {
  */
 function station_playlist_perm() {
   return array(
-    'create playlists',
-    'edit own playlists',
+    'administer station playlists',
+    'view station playlist content',
+    'create station playlist content',
+    'edit any station playlist content',
+    'edit own station playlist content',
+    'delete any station playlist content',
+    'delete own station playlist content',
   );
 }
 
@@ -122,23 +127,28 @@ function station_playlist_link($type, $o
  * Implementation of hook_access().
  */
 function station_playlist_access($op, $node, $account) {
-  if (user_access('administer schedule', $account)) {
+  if (user_access('administer station playlists', $account)) {
     return TRUE;
   }
 
   switch ($op) {
     case 'view':
-      return TRUE;
+      return user_access('view station playlist content', $account);
 
     case 'create':
-      return user_access('create playlists', $account);
+      return user_access('create station playlist content', $account);
 
     case 'update':
+      if (user_access('edit own station playlist content', $account) && ($account->uid == $node->uid)) {
+        return TRUE;
+      }
+      return user_access('edit any station playlist content', $account);
+
     case 'delete':
-      if (user_access('edit own playlists') && ($account->uid == $node->uid)) {
+      if (user_access('delete own station playlist content', $account) && ($account->uid == $node->uid)) {
         return TRUE;
       }
-      return FALSE;
+      return user_access('delete any station playlist content', $account);
   }
 }
 
Index: playlist/station_playlist.views_default.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/playlist/station_playlist.views_default.inc,v
retrieving revision 1.4
diff -u -p -r1.4 station_playlist.views_default.inc
--- playlist/station_playlist.views_default.inc	13 Jan 2009 04:57:26 -0000	1.4
+++ playlist/station_playlist.views_default.inc	19 Apr 2009 21:33:17 -0000
@@ -145,7 +145,7 @@ function station_playlist_views_default_
   ));
   $handler->override_option('access', array(
     'type' => 'perm',
-    'perm' => 'access content',
+    'perm' => 'view station playlist content',
   ));
   $handler->override_option('title', 'Playlists');
   $handler->override_option('use_pager', '1');
Index: program/station_program.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/program/station_program.module,v
retrieving revision 1.18
diff -u -p -r1.18 station_program.module
--- program/station_program.module	25 Jan 2009 18:43:36 -0000	1.18
+++ program/station_program.module	19 Apr 2009 21:33:17 -0000
@@ -56,9 +56,12 @@ function station_program_node_info() {
  */
 function station_program_perm() {
   return array(
-    'edit program content',
-    'edit own program content',
-    'administer programs',
+    'administer station programs',
+    'view station program content',
+    'create station program content',
+    'edit any station program content',
+    'edit own station program content',
+    'delete any station program content',
   );
 }
 
@@ -66,44 +69,43 @@ function station_program_perm() {
  * Implementation of hook_access().
  */
 function station_program_access($op, $node, $account) {
-  if (user_access('administer programs', $account)) {
+  if (user_access('administer station programs', $account)) {
     return TRUE;
   }
 
   switch ($op) {
-    // Only users with 'administer programs' permissions can create or delete
-    // programs.
-
     case 'view':
-      return TRUE;
+      return user_access('view station program content', $account);
+
+    case 'create':
+      return user_access('create station program content', $account);
 
     case 'update':
-      if (user_access('edit program content', $account)) {
+      if (user_access('edit any station program content', $account)) {
         return TRUE;
       }
 
       // The node owner can edit the program.
-      if ($node->uid == $account->uid && user_access('edit own program content', $account)) {
-        return TRUE;
-      }
-
-      // If the schedule is enabled, let it also control access.
-      if (module_exists('station_schedule')) {
-        if (user_access('administer schedule', $account)) {
+      if (user_access('edit own station program content', $account)) {
+        if ($node->uid == $account->uid) {
           return TRUE;
         }
 
-        // DJs can edit the program.
-        if (user_access('edit own program content', $account) && !empty($node->field_station_program_dj)) {
-          foreach ($node->field_station_program_dj as $user) {
-            if ($user->uid == $account->uid) {
-              return TRUE;
+        // If the schedule is enabled, let DJs edit the program.
+        if (module_exists('station_schedule')) {
+          if (!empty($node->field_station_program_dj)) {
+            foreach ($node->field_station_program_dj as $user) {
+              if ($user->uid == $account->uid) {
+                return TRUE;
+              }
             }
           }
         }
       }
-
       return FALSE;
+
+    case 'delete':
+      return user_access('delete any station program content', $account);
   }
 }
 
Index: schedule/station_schedule.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/schedule/station_schedule.module,v
retrieving revision 1.84
diff -u -p -r1.84 station_schedule.module
--- schedule/station_schedule.module	25 Jan 2009 18:26:08 -0000	1.84
+++ schedule/station_schedule.module	19 Apr 2009 21:33:17 -0000
@@ -95,7 +95,7 @@ function station_schedule_menu() {
     'title' => 'Alter schedule',
     'page callback' => 'station_schedule_item_list',
     'page arguments' => array(1),
-    'access callback' => 'station_schedule_node_edit_access',
+    'access callback' => 'station_schedule_node_update_access',
     'access arguments' => array(1),
     'file' => 'station_schedule.edit.inc',
     'type' => MENU_LOCAL_TASK,
@@ -109,7 +109,7 @@ function station_schedule_menu() {
     'title' => 'Add item',
     'page callback' => 'station_schedule_item_add',
     'page arguments' => array(1),
-    'access callback' => 'station_schedule_node_edit_access',
+    'access callback' => 'station_schedule_node_update_access',
     'access arguments' => array(1),
     'file' => 'station_schedule.edit.inc',
     'type' => MENU_LOCAL_TASK,
@@ -118,7 +118,7 @@ function station_schedule_menu() {
     'title' => 'Edit item',
     'page callback' => 'station_schedule_item_edit',
     'page arguments' => array(1, 3),
-    'access callback' => 'station_schedule_node_edit_access',
+    'access callback' => 'station_schedule_node_update_access',
     'access arguments' => array(1),
     'file' => 'station_schedule.edit.inc',
     'type' => MENU_CALLBACK
@@ -127,7 +127,7 @@ function station_schedule_menu() {
     'title' => 'Remove item',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('station_schedule_item_remove_form', 1, 3),
-    'access callback' => 'station_schedule_node_edit_access',
+    'access callback' => 'station_schedule_node_update_access',
     'access arguments' => array(1),
     'file' => 'station_schedule.edit.inc',
     'type' => MENU_CALLBACK
@@ -137,11 +137,11 @@ function station_schedule_menu() {
 }
 
 function station_schedule_node_view_access($node) {
-  return ($node->type == 'station_schedule' && user_access('access content'));
+  return ($node->type == 'station_schedule' && node_access('view', $node));
 }
 
-function station_schedule_node_edit_access($node) {
-  return ($node->type == 'station_schedule' && user_access('administer schedule'));
+function station_schedule_node_update_access($node) {
+  return ($node->type == 'station_schedule' && node_access('update', $node));
 }
 
 
@@ -206,7 +206,12 @@ function station_schedule_theme() {
  */
 function station_schedule_perm() {
   return array(
-    'administer schedule',
+    'administer station schedule',
+    'view station schedule content',
+    'create station schedule content',
+    'edit any station schedule content',
+    'edit own station schedule content',
+    'delete any station schedule content',
   );
 }
 
@@ -228,14 +233,25 @@ function station_schedule_node_info() {
  * Implementation of hook_access().
  */
 function station_schedule_access($op, $node, $account) {
+  if (user_access('administer station schedule', $account)) {
+    return TRUE;
+  }
+
   switch ($op) {
     case 'view':
-      return TRUE;
+      return user_access('view station schedule content', $account);
+
+    case 'create':
+      return user_access('create station schedule content', $account);
 
     case 'update':
+      if (user_access('edit own station schedule content', $account) && ($account->uid == $node->uid)) {
+        return TRUE;
+      }
+      return user_access('edit any station schedule content', $account);
+
     case 'delete':
-    case 'create':
-      return user_access('administer schedule', $account);
+      return user_access('delete any station schedule content', $account);
   }
 }
 
@@ -637,10 +653,11 @@ function station_schedule_nodeapi(&$node
  * implementation of hook_form_alter()
  */
 function station_schedule_form_alter(&$form, $form_state, $form_id) {
-  // We only alter audio node edit forms
+  // We only alter station_program node edit forms
   if ($form_id == 'station_program_node_form') {
-    if (user_access('administer schedule')) {
-      $node = $form['#node'];
+    $node = $form['#node'];
+// @TODO: figure out how to handle the permissions here.
+    if (user_access('administer station schedule')) {
 
       $form['schedule'] = array(
         '#type' => 'fieldset',
Index: schedule/views/station_schedule.views_default.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/schedule/views/station_schedule.views_default.inc,v
retrieving revision 1.3
diff -u -p -r1.3 station_schedule.views_default.inc
--- schedule/views/station_schedule.views_default.inc	13 Jan 2009 04:57:26 -0000	1.3
+++ schedule/views/station_schedule.views_default.inc	19 Apr 2009 21:33:17 -0000
@@ -73,7 +73,7 @@ function station_schedule_views_default_
   ));
   $handler->override_option('access', array(
     'type' => 'perm',
-    'perm' => 'access content',
+    'perm' => 'view station schedule content',
   ));
   $handler->override_option('title', 'Schedule listing');
   $handler->override_option('style_plugin', 'list');
@@ -187,7 +187,7 @@ function station_schedule_views_default_
   ));
   $handler->override_option('access', array(
     'type' => 'perm',
-    'perm' => 'access content',
+    'perm' => 'view station program content',
   ));
   $handler->override_option('title', 'Scheduled programs');
   $handler->override_option('use_pager', '1');
@@ -587,7 +587,7 @@ function station_schedule_views_default_
   ));
   $handler->override_option('access', array(
     'type' => 'perm',
-    'perm' => 'access content',
+    'perm' => 'view schedule content',
   ));
   $handler->override_option('empty', 'There are no programs scheduled for this day.');
   $handler->override_option('empty_format', '1');
Index: schedule/views/station_schedule_handler_field_iid_link.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/station/schedule/views/station_schedule_handler_field_iid_link.inc,v
retrieving revision 1.1
diff -u -p -r1.1 station_schedule_handler_field_iid_link.inc
--- schedule/views/station_schedule_handler_field_iid_link.inc	1 Dec 2008 17:09:41 -0000	1.1
+++ schedule/views/station_schedule_handler_field_iid_link.inc	19 Apr 2009 21:33:17 -0000
@@ -26,7 +26,8 @@ class station_schedule_handler_field_iid
   }
 
   function access() {
-    return user_access('administer schedule');
+// @TODO figure out a more granular way to handle permissions here.
+    return user_access('administer station schedule');
   }
 
   function query() {
