? 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	25 Jan 2009 21:20:47 -0000
@@ -38,3 +38,48 @@ 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(
+    'view catalog' => array('view album content'),
+    'edit album content' => array('edit any album content', 'delete any album content'),
+    'create playlists' => array('create playlist content'),
+    'edit own playlists' => array('edit own playlist content'),
+    'edit program content' => array('edit any program content')
+  );
+
+  $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 per
+    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 playlist content',
+        'view program content',
+        'view schedule content',
+      ));
+    }
+
+    $new_perm = db_escape_string(implode(', ', array_unique($new_perms)));
+    $ret[] = update_sql("UPDATE {permission} SET perm = '$new_perm' WHERE rid = $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	25 Jan 2009 21:20:47 -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 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	25 Jan 2009 21:20:47 -0000
@@ -50,10 +50,11 @@ function station_catalog_node_info() {
  */
 function station_catalog_perm() {
   return array(
-    'view catalog',
-    'create album content',
-    'edit album content',
     'administer catalog',
+    'view album content',
+    'create album content',
+    'edit any album content',
+    'delete any album content',
   );
 }
 
@@ -61,7 +62,6 @@ function station_catalog_perm() {
  * Implementation of hook_access().
  */
 function station_catalog_album_accesss($op, $node, $account) {
-
   // Admins can do anything.
   if (user_access('administer catalog', $account)) {
     return TRUE;
@@ -69,14 +69,16 @@ function station_catalog_album_accesss($
 
   switch ($op) {
     case 'view':
-      return user_access('view catalog', $account);
+      return user_access('view album content', $account);
 
     case 'create':
       return user_access('create album content', $account);
 
     case 'update':
+      return user_access('edit any album content', $account);
+
     case 'delete':
-      return user_access('edit album content', $account);
+      return user_access('delete any album content', $account);
   }
 }
 
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	25 Jan 2009 21:20:47 -0000
@@ -68,8 +68,12 @@ function station_playlist_node_info() {
  */
 function station_playlist_perm() {
   return array(
-    'create playlists',
-    'edit own playlists',
+    'administer playlists',
+    'view playlist content',
+    'create playlist content',
+    'edit any playlist content',
+    'edit own playlist content',
+    'delete any playlist content',
   );
 }
 
@@ -122,20 +126,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 playlists', $account)) {
     return TRUE;
   }
 
   switch ($op) {
     case 'view':
-      return TRUE;
+      return user_access('view playlist content', $account);
 
     case 'create':
-      return user_access('create playlists', $account);
+      return user_access('create playlist content', $account);
 
     case 'update':
+      if (user_access('edit any playlist content', $account)) {
+        return TRUE;
+      }
+
+      if (user_access('edit own playlist content', $account) && ($account->uid == $node->uid)) {
+        return TRUE;
+      }
+
     case 'delete':
-      if (user_access('edit own playlists') && ($account->uid == $node->uid)) {
+      if (user_access('delete any playlist content', $account)) {
         return TRUE;
       }
       return FALSE;
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	25 Jan 2009 21:20:47 -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',
+    'view program content',
+    'create program content',
+    'edit any program content',
+    'edit own program content',
+    'delete any program content',
   );
 }
 
@@ -71,39 +74,39 @@ function station_program_access($op, $no
   }
 
   switch ($op) {
-    // Only users with 'administer programs' permissions can create or delete
-    // programs.
-
     case 'view':
-      return TRUE;
+      return user_access('view program content', $account);
+
+    case 'create':
+      return user_access('create program content', $account);
 
     case 'update':
-      if (user_access('edit program content', $account)) {
+      if (user_access('edit any 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 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 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	25 Jan 2009 21:20:47 -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));
 }
 
 
@@ -207,6 +207,11 @@ function station_schedule_theme() {
 function station_schedule_perm() {
   return array(
     'administer schedule',
+    'view schedule content',
+    'create schedule content',
+    'edit any schedule content',
+    'edit own schedule content',
+    'delete any schedule content',
   );
 }
 
@@ -228,14 +233,26 @@ function station_schedule_node_info() {
  * Implementation of hook_access().
  */
 function station_schedule_access($op, $node, $account) {
+  if (user_access('administer schedule', $account)) {
+    return TRUE;
+  }
+
   switch ($op) {
     case 'view':
-      return TRUE;
+      return user_access('view schedule content', $account);
+
+    case 'create':
+      return user_access('create schedule content', $account);
 
     case 'update':
+      return user_access('edit any schedule content', $account);
+
+      if (user_access('edit own schedule content', $account) && ($account->uid == $node->uid)) {
+        return TRUE;
+      }
+
     case 'delete':
-    case 'create':
-      return user_access('administer schedule', $account);
+      return user_access('delete any schedule content', $account);
   }
 }
 
@@ -637,10 +654,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') {
+    $node = $form['#node'];
+// @TODO: figure out how to handle the permissions here.
     if (user_access('administer schedule')) {
-      $node = $form['#node'];
 
       $form['schedule'] = array(
         '#type' => 'fieldset',
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	25 Jan 2009 21:20:47 -0000
@@ -26,6 +26,7 @@ class station_schedule_handler_field_iid
   }
 
   function access() {
+// @TODO figure out a more granular way to handle permissions here.
     return user_access('administer schedule');
   }
 
