• User Attivo

    opendir meno file usati

    salve a tutti, sto cercando di apportare una modifica al codice di phpbb3, se postassi nella sezione specifica non avrei nessuna risposta, ed essendo php ci provo qui.

    allora veniamo al punto, la funzione è quella che genere gli avatar presenti nella galleria.

    [php]function avatar_gallery($category, $avatar_select, $items_per_column, $block_var = 'avatar_row')
    {
    global $user, $cache, $template;
    global $config, $phpbb_root_path;
    $avatar_list = array();
    $path = $phpbb_root_path . $config['avatar_gallery_path'];
    if (!file_exists($path) || !is_dir($path))
    {
    $avatar_list = array($user->lang['NO_AVATAR_CATEGORY'] => array());
    }
    else
    {
    // Collect images
    $dp = @opendir($path);
    if (!$dp)
    {
    return array($user->lang['NO_AVATAR_CATEGORY'] => array());
    }
    while (($file = readdir($dp)) !== false)
    {
    if ($file[0] != '.' && preg_match('#^[^&"'<>]+$#i', $file) && is_dir("$path/$file"))
    {
    $avatar_row_count = $avatar_col_count = 0;
    if ($dp2 = @opendir("$path/$file"))
    {
    while (($sub_file = readdir($dp2)) !== false)
    {
    if (preg_match('#^[^&'"<>]+.(?:gif|png|jpe?g)$#i', $sub_file))
    {
    $avatar_list[$file][$avatar_row_count][$avatar_col_count] = array(
    'file' => "$file/$sub_file",
    'filename' => $sub_file,
    'name' => ucfirst(str_replace('_', ' ', preg_replace('#^(.)..$#', '\1', $sub_file))),
    );
    $avatar_col_count++;
    if ($avatar_col_count == $items_per_column)
    {
    $avatar_row_count++;
    $avatar_col_count = 0;
    }
    }
    }
    closedir($dp2);
    }
    }
    }
    closedir($dp);
    }
    if (!sizeof($avatar_list))
    {
    $avatar_list = array($user->lang['NO_AVATAR_CATEGORY'] => array());
    }
    @ksort($avatar_list);
    $category = (!$category) ? key($avatar_list) : $category;
    $avatar_categories = array_keys($avatar_list);
    $s_category_options = '';
    foreach ($avatar_categories as $cat)
    {
    $s_category_options .= '<option value="' . $cat . '"' . (($cat == $category) ? ' selected="selected"' : '') . '>' . $cat . '</option>';
    }
    $template->assign_vars(array(
    'S_AVATARS_ENABLED' => true,
    'S_IN_AVATAR_GALLERY' => true,
    'S_CAT_OPTIONS' => $s_category_options)
    );
    $avatar_list = (isset($avatar_list[$category])) ? $avatar_list[$category] : array();
    foreach ($avatar_list as $avatar_row_ary)
    {
    $template->assign_block_vars($block_var, array());
    foreach ($avatar_row_ary as $avatar_col_ary)
    {
    $template->assign_block_vars($block_var . '.avatar_column', array(
    'AVATAR_IMAGE' => $phpbb_root_path . $config['avatar_gallery_path'] . '/' . $avatar_col_ary['file'],
    'AVATAR_NAME' => $avatar_col_ary['name'],
    'AVATAR_FILE' => $avatar_col_ary['filename'])
    );
    $template->assign_block_vars($block_var . '.avatar_option_column', array(
    'AVATAR_IMAGE' => $phpbb_root_path . $config['avatar_gallery_path'] . '/' . $avatar_col_ary['file'],
    'S_OPTIONS_AVATAR' => $avatar_col_ary['filename'])
    );
    }
    }
    return $avatar_list;
    }
    [/php]

    io sto cercando il modo in cui l'avatar_list sia generata senza gli avatar in uso da altri utenti, per cui assegno alle funzioni globali il valore del database $db e ho inserito questa query

    [php]$my_counter = 0;
    $my_checker = 0;
    $sql = 'SELECT user_avatar
    FROM ' . USERS_TABLE . '
    WHERE user_avatar_type = 3';
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);
    if ($row)
    {
    $my_counter++;
    $my_used_list[$my_counter] = $row['user_avatar'];
    }[/php]

    se la query ha un riscontro il contatore cambia di valore da 0 a 1, giusto ?

    adesso ? c'è qualcuno che mi sa spiegare come sottrarre questo valore dall'array che estrae gli avatar dalla cartella ?

    :ciauz:


  • User Attivo

    Aspetta se non ho capito male te ad ogni array utilizzato incrementi di 1?
    Se è così non puoi venire a sapere quale è stato scelto... dovresti mettere una tabella nel db dove ogni campo ha il nome avatar e un campo valore dove puoi dire: 0 non usato 1 utilizzato... Fai così visualizzare solo gli 0...