--- simplepie.module 2009-05-13 01:55:48.000000000 -0400 +++ simplepie.module-mod 2009-06-21 18:21:55.000000000 -0400 @@ -33,17 +33,55 @@ function simplepie_menu() { return $items; } -function simplepie_admin_settings() { - $form['simplepie_cache_location'] = array( - '#type' => 'textfield', - '#title' => t('SimplePie Core cache location'), - '#description' => t('Relative to files directory.'), - '#default_value' => variable_get('simplepie_cache_location', 'cache/simplepie'), - '#attributes' => array('class' => file_check_directory(simplepie_get_cache_location()) ? 'ok' : 'error'), - '#after_build' => array('system_check_directory'), - ); - - return system_settings_form($form); +function simplepie_admin_settings() { + $simplepie_cache_loc = simplepie_get_cache_location(); + $attr_class = file_check_directory($simplepie_cache_loc) ? 'ok' : 'error'; + + $form['simplepie_cache_location'] = array( + '#type' => 'textfield', + '#title' => t('SimplePie Core cache location'), + '#description' => t('Relative to files directory.'), + '#default_value' => variable_get('simplepie_cache_location', 'cache/simplepie'), + '#attributes' => array('class' => $attr_class), + //'#after_build' => array('system_check_directory'), + '#after_build' => array('simplepie_check_directory'), + ); + // dsm($form); + return system_settings_form($form); +} + +function simplepie_check_directory($form) { + /* + mimicks system_check_directory, which is only for system dirs + checks for directory and if it doesn't exist, creates it. + TODO: ? if directory was changed, remove old directory? + */ + $directory = file_directory_path() . '/' . $form['#value']; + $form_item = $form['#parents'][0]; + + if (!is_dir($directory)) { + if ((FILE_CREATE_DIRECTORY) && @mkdir($directory, 0775, true)) { + drupal_set_message(t('The directory %directory has been created.', array('%directory' => $directory))); + @chmod($directory, 0775); // Necessary for non-webserver users. + } else { + if ($form_item) { + form_set_error($form_item, t('The directory %directory does not exist.', array('%directory' => $directory))); + } + return FALSE; + } + } + // Check to see if the directory is writable. + if (!is_writable($directory)) { + if (($mode & FILE_MODIFY_PERMISSIONS) && @chmod($directory, 0775)) { + drupal_set_message(t('The permissions of directory %directory have been changed to make it writable.', array('%directory' => $directory))); + } + else { + form_set_error($form_item, t('The directory %directory is not writable', array('%directory' => $directory))); + watchdog('file system', 'The directory %directory is not writable, because it does not have the correct permissions set.', array('%directory' => $directory), WATCHDOG_ERROR); + return FALSE; + } + } + return $form; } /**