--- acidfree.module.org 2008-12-15 14:48:04.000000000 +0000 +++ acidfree.module 2009-09-24 17:29:47.243164000 +0100 @@ -1,22 +1,22 @@ view; } + function acidfree_mass_import_access($node) { - return node_access('update', $node) || - (node_access('view', $node) && $node->share); + return (node_access('update', $node) || //Pachkov.Sergey + (node_access('view', $node) && $node->share)) && user_access('acidfree mass import'); //Pachkov.Sergey } + function acidfree_menu() { $items = array(); $items['admin/settings/acidfree'] = array( @@ -411,8 +413,10 @@ 'page callback' => 'acidfree_page', 'page arguments' => array('per_user_album', 1), 'title' => 'Acidfree albums', - 'access callback' => '_acidfree_access_per_user_album', - 'access arguments' => array(1), + 'access callback' => 'user_access', //Pachkov.Sergey + 'access arguments' => array('access content'), //Pachkov.Sergey + //'access callback' => '_acidfree_access_per_user_album', //Old CODE + //'access arguments' => array(1), 'type' => MENU_SUGGESTED_ITEM, ); $items['acidfree/thumbnail/%acidfree_node'] = array( @@ -431,7 +435,7 @@ 'access arguments' => array(1), ); */ - foreach (array('list'=>'List view', 'grid'=>'Grid view') as $k=>$v) { + foreach (array('list' => 'List view', 'grid' => 'Grid view') as $k => $v) { $items["node/%acidfree_album/$k"] = array( 'page callback' => 'acidfree_album_view', 'page arguments' => array(1, "album_{$k}_view"), @@ -442,64 +446,50 @@ ); } $items['node/%acidfree_album/import'] = array( - 'access callback' => 'acidfree_mass_import_access', - 'access arguments' => array(1), 'title' => 'Mass import', 'page callback' => 'drupal_get_form', 'page arguments' => array('acidfree_mass_import', 1), + 'access callback' => 'acidfree_mass_import_access', + 'access arguments' => array(1), 'type' => variable_get('acidfree_mass_import_local_task', false) ? MENU_LOCAL_TASK : MENU_SUGGESTED_ITEM, ); - return $items; - /* - } else { - $path = explode('/', $_GET['q']); - if ($path[0] == 'node' && is_numeric($path[1])) { - $album = acidfree_node_load($path[1]); - if ($album && $album->type == 'acidfree') { - $items[] = Array('path' => "node/{$path[1]}/contents", - 'access' => node_access('update', $album) && user_access('use album contents mode'), - 'title' => t('Album contents'), - 'callback' => 'drupal_get_form', - 'callback arguments' => array('acidfree_album_contents', $album->tid), - 'type' => MENU_LOCAL_TASK); - if (variable_get('acidfree_show_alternate_view', true)) { - $other_view = array('grid' => 'list', 'list' => 'grid'); - $view_name = array('grid' => t('Grid'), 'list' => t('List')); - $view = $other_view[$album->view]; - $items[] = Array('path' => "node/{$path[1]}/{$view}", - 'access' => 1, - 'title' => $view_name[$view], - 'callback' => 'acidfree_album_view', - 'callback arguments' => array("album_{$view}_view", $album->tid), - 'type' => MENU_LOCAL_TASK, - 'weight' => -4, - ); - } - if ($album->share || node_access('update', $album) || - user_access('can upload to any album')) { - $items[] = array('path' => "node/{$path[1]}/import", - 'access' => user_access('acidfree mass import'), - 'title' => t('Mass import'), - 'callback' => 'acidfree_mass_import_form', - 'callback arguments' => $album->nid, - 'type' => variable_get('acidfree_mass_import_local_task', false) ? - MENU_LOCAL_TASK : MENU_SUGGESTED_ITEM, - 'weight' => 5, - ); - } - } - } - if (variable_get('acidfree_per_user_albums', false)) { - $items[] = array('path' => 'user/acidfree', 'title' => t('My Acidfree Albums'), - 'access' => user_access('get a per-user album'), - 'callback' => 'acidfree_page', - 'type' => MENU_SUGGESTED_ITEM, - ); - } - } - */ + $items["node/%/contents"] = Array( + 'title' => t('Album contents'), + 'callback' => 'drupal_get_form', + 'callback arguments' => array('acidfree_album_contents', $album->tid), + 'access arguments' => array('use album contents mode'), + 'type' => MENU_LOCAL_TASK + ); + + $other_view = array('grid' => 'list', 'list' => 'grid'); + $view_name = array('grid' => t('Grid'), 'list' => t('List')); + $view = $other_view[$album->view]; + $items["node/%/{$view}"] = Array( + 'title' => $view_name[$view], + 'page callback' => 'acidfree_album_view', + 'page arguments' => array("album_{$view}_view", $album->tid), + 'access arguments' => array(1), // FIXME?: if (variable_get('acidfree_show_alternate_view', true)) { + 'type' => MENU_LOCAL_TASK, + 'weight' => -4, + ); + $items["node/%/import"] = array( + 'title' => t('Mass import'), + 'page callback' => 'acidfree_mass_import_form', + 'page arguments' => $album->nid, + 'access arguments' => array('can upload to any album'), // FIXME: AND array('acidfree mass import') AND ($album->share || node_access('update', $album) + 'type' => variable_get('acidfree_mass_import_local_task', false) ? MENU_LOCAL_TASK : MENU_SUGGESTED_ITEM, + 'weight' => 5, + ); + $items['user/%/edit/acidfree'] = array( + 'title' => t('My Albums'), + 'page callback' => 'acidfree_page', + 'access arguments' => array('get a per-user album'), // FIXME: if (variable_get('acidfree_per_user_albums', FALSE)) + 'type' => MENU_SUGGESTED_ITEM | MENU_LOCAL_TASK, + 'file' => 'user.pages.inc', + 'file path' => drupal_get_path('module', 'user'), + ); return $items; } @@ -1359,9 +1349,11 @@ $argc = func_num_args(); $argv = func_get_args(); $path = _acidfree_get_path(true); - drupal_add_js(drupal_get_path('module', 'acidfree').'/acidfree.js'); - if ($path == 'user/acidfree' && user_access('get a per-user album') && - variable_get('acidfree_per_user_albums', 0)) { + $argv[1] = $argv[1]->uid; + drupal_add_js(drupal_get_path('module', 'acidfree') . '/acidfree.js'); + if (arg(0) == 'user' && arg(2) == 'edit' && arg(3) == 'acidfree' + && user_access('get a per-user album') + && variable_get('acidfree_per_user_albums', 0)) { global $user; $tid = acidfree_get_root($user->uid, true); if (!$tid) @@ -1383,16 +1375,16 @@ } elseif ($argv[0] == 'per-user-albums' && variable_get('acidfree_per_user_albums', 0)) { $output = acidfree_list_per_user_albums(); - } else if ($argc == 2 && $argv[0] == 'user' && is_numeric($argv[1])) { - $tid = acidfree_get_root($argv[1]); - if (!$node) - return drupal_not_found(); - $nid = _nid_from_tid($tid); - drupal_goto("node/{$nid}"); + } else if ($argc == 2 && $argv[0] == 'per_user_album' && is_numeric($argv[1])) { + $result = db_query("SELECT MIN(nid) FROM {node} WHERE uid = %d AND type = '%s'", $argv[1], 'acidfree'); + $min_nid = 0; + $min_nid = (array)db_fetch_object($result); + $min_nid = $min_nid['MIN(nid)']; + if ($min_nid == 0) return drupal_not_found(); + drupal_goto("node/{$min_nid}"); } else { drupal_not_found(); - //gotto(__LINE__); - return; + exit(); } return $output; } @@ -1402,6 +1394,7 @@ if ($reset) $recursion_level = 0; if ($recursion_level++ > 2) { //trace(); + drupal_set_message(t('Recursion exceeded.'), 'error'); exit(1); } if ($title === NULL) { @@ -1442,7 +1435,7 @@ return $node->tid; } -function acidfree_get_root($uid=-1, $create=false, $reset=true) { +function acidfree_get_root($uid = -1, $create = FALSE, $reset = TRUE) { static $recursion_level = 0; static $vocab_id = -1; static $root_term_id = -1; @@ -1669,7 +1662,6 @@ $file->source = 'acidfree_local_filesystem'; $file->filepath = $fullpath; $file->filename = $file->basename; - // echo "importing file $filename
\n"; if ($recursive && is_dir($fullpath)) { $dirs[] = $file; @@ -1770,7 +1762,7 @@ function _acidfree_valid_file_extensions() { static $valid = NULL; if ($valid == NULL) { - $ext = array('gz', 'bz2', 'zip'); + $ext = array('zip', 'bz2', 'gz'); $others = module_invoke_all('af_valid_extensions'); $valid = array_merge($ext, $others); } @@ -1794,7 +1786,7 @@ } } $parent = array_values($form['parent']); - $parent = $parent[0]; + $parent = $parent[0]['#default_value']; //Pachkov.Sergey $p = _album_from_tid($parent); if ($op == t('Import')) { $tmpdir = $form['serverpath']; @@ -1806,10 +1798,11 @@ _acidfree_import_dir($p, $tmpdir, $recursive, $node_items); } } elseif ($op == t('Upload')) { - $validators = array('file_validate_extensions' => _acidfree_valid_file_extensions()); + //Pachkov.Sergey //$validators = array('file_validate_extensions' => _acidfree_valid_file_extensions()); for ($i=0; $i<5; $i++) { - if ($form["acidfreeupload{$i}name"]) { - if ($file = file_save_upload("acidfreeupload$i", $validators)) { + if ($form['#post']["acidfreeupload{$i}name"]) { + //if ($file = file_save_upload("acidfreeupload$i", $validators)) { //Original + if ($file = file_save_upload("acidfreeupload$i")) { //Pachkov.Sergey drupal_set_message(t('Importing file %filename', array('%filename' => $file->filename))); _acidfree_handle_uploaded_file($file, $p, $node_items); @@ -1884,10 +1877,11 @@ $types[] = $type->class; } } - if (!$types) { - $form['nothing'] = array('#value' => t('No node types available')); - return $form; - } + //Pachkov.Sergey + //if (!$types) { + //$form['nothing'] = array('#value' => t('No node types available')); + //return $form; + //} $vocabs = array(); $node = new stdClass(); $form['#id'] = 'node-form'; @@ -1993,7 +1987,7 @@ function _acidfree_filter_tag($matches) { $node = acidfree_node_load($matches[1]); if (!$node) { - return "{$matches[0]}"; + return "{$matches[0]}"; // FIXME: convert to theme function } else { $args = preg_replace("/[ \\r\\n\\t]+/", ' ', $matches[2]); $match_count = preg_match_all("/([-\w]+)=(([^'\" ]+)|'([^']*)'|\"([^\"]*)\")/i", $args, $pairs); @@ -2030,7 +2024,7 @@ $pnid = _nid_from_tid($pterm->tid); $settings['link'] = 'node/'.$pnid; } - $ret = ""; + $ret = ""; // FIXME: convert to theme function if ($settings['type'] != 'slide') { $size = explode('x', $settings['size']); $width = $size[0]; $height = ($size[1] ? $size[1] : $size[0]); @@ -2076,7 +2070,7 @@ $ret .= theme("acidfree_print_thumb_{$node->type}", $node); } if ($settings['title']) { - $ret .= "
{$settings['title']}
"; + $ret .= "
{$settings['title']}
"; // FIXME: convert to theme function } $ret .= "
"; return $ret; @@ -2159,7 +2153,7 @@ } else { $parent = $node; } - $tid = 1; // $parent->tid + $tid = $parent->tid; //$tid = 1; // $parent->tid $parents = array_reverse(taxonomy_get_parents_all($tid)); return $parents; } @@ -2183,7 +2177,6 @@ //gotto(__LINE__); exit(1); } -drupal_set_message("REDIRECT: album"); $p = "pid={$node->nid}"; $pager = _acidfree_make_pager_query(); $nid = $child->nid; @@ -2213,7 +2206,7 @@ */ foreach ($order[0] as $k => $ltgt) { break; } $ltgt = $ltgt == 'ASC' ? '<' : '>'; - $query = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE n.type <> '%s' AND tn.tid = %d AND (n.moderate = 0 AND n.status = 1) AND " . _acidfree_filter_clause($order, 'n') . " $ltgt '" . _acidfree_filter_clause($order, $node) . "' and n.nid <> %d"; + $query = "SELECT COUNT(n.nid) FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE n.type <> '%s' AND tn.tid = %d AND (n.moderate = 0 AND n.status = 1) AND " . _acidfree_filter_clause($order, 'n') . " $ltgt '" . _acidfree_filter_clause($order, $node) . "' and n.nid <> %d"; // FIXME: convert variables into query arguments $args = array('acidfree', $parent, $node->nid); $query = db_rewrite_sql($query); @@ -2262,18 +2255,12 @@ * @return * a pager string in the form from=a,b,c,d,e */ -function _acidfree_make_pager_query($values=array()) { +function _acidfree_make_pager_query($values = array()) { return PAGER_STRING.'='._acidfree_make_pager_string($values); } -function _acidfree_get_path($string=false) { - - $menu = menu_get_active_trail(); - $item = array_pop($menu); - $path = $item['href']; - if ($string) - return $path; - return explode('/', $path); +function _acidfree_get_path($string = FALSE) { + return arg(); // TODO: this function should be removed } function _acidfree_get_parent_from_path() { @@ -2287,8 +2274,7 @@ return false; } - -function mkdir_rec($dir, $mode=0770) { +function mkdir_rec($dir, $mode = 0770) { if (version_compare(PHP_VERSION, "5.0.0", ">=")) { return mkdir($dir, $mode, true); } else { @@ -2300,6 +2286,7 @@ } return true; } + function rmdir_rec($path) { $dir = opendir($path); while ($file = readdir($dir)) { @@ -2334,12 +2321,14 @@ * that acidfree knows about. */ function _acidfree_file_mime($f) { - if (ini_get('safe_mode') || !function_exists('shell_exec')) + if (ini_get('safe_mode') || !function_exists('shell_exec')) { return 'safe_mode'; + } $f = escapeshellarg($f); $ret = explode(' ', trim( `file -biN $f` )); return $ret[count($ret)-1]; } + function _acidfree_finfo_file($fname) { if (!function_exists('finfo_open')) return 'no_finfo'; @@ -2465,20 +2454,27 @@ * Implementation of hook_user */ function acidfree_user($op, &$edit, &$account, $category = NULL) { - if ($op == 'view' && variable_get('acidfree_per_user_albums', 0) - && user_access('get a per-user album', $account)) { - $album = _album_from_tid($account->acidfree_album); - if (!$album) { - user_save($account, array('acidfree_album' => null)); - return null; - } - $items['acidfree-albums'] = array( - 'title' => t('Personal album'), - 'value' => l($album->title, "node/{$album->nid}"), - 'class' => 'acidfree-albums', - ); - return array(t('Acidfree Albums') => $items); + if ($op == 'view') { + //Pachkov.Sergey.START + $result = db_query("SELECT nid, title FROM node WHERE nid IN (SELECT MIN(nid) FROM node WHERE uid=%d AND type='acidfree')", $account->uid); + $min_nid = 0; + $min_nid = (array)db_fetch_object($result); + $title_node = $min_nid['title']; + $min_nid = $min_nid['nid']; + if ($min_nid > 0) { + $account->content['acidfree-albums'] = array( + '#type' => 'user_profile_category', + '#title' => t('Foto album'), + ); + $account->content['acidfree-albums']['album'] = array( + '#title' => t('Personal album'), + '#value' => l($title_node, "node/{$min_nid}"), + '#class' => 'acidfree-albums', + '#type' => 'user_profile_item', + ); + } } + //Pachkov.Sergey.END } function acidfree_list_per_user_albums() {