Exemple #1
0
 /**
  * Create a auth-object for a given user
  *
  * @param	int		$user_id	User you want the permissions from.
  * @param	int		$album_id	Only get the permissions for a given album_id. Should save some memory. // Not yet implemented.
  */
 public function phpbb_gallery_auth($user_id, $album_id = false)
 {
     self::$_permissions = array_merge(self::$_permission_i, self::$_permission_c, self::$_permission_m, self::$_permission_misc);
     self::$_permissions_flipped = array_flip(array_merge(self::$_permissions, array('m_')));
     self::$_permissions_flipped['i_count'] = 'i_count';
     self::$_permissions_flipped['a_count'] = 'a_count';
     global $user;
     if ($user_id == $user->data['user_id'] && !empty($user->gallery['user_permissions'])) {
         $this->unserialize_auth_data($user->gallery['user_permissions']);
         return;
     } else {
         if ($user_id != $user->data['user_id']) {
             $permissions_user = phpbb_gallery_user::get_settings($user_id);
             if (!empty($permissions_user['user_permissions'])) {
                 $this->unserialize_auth_data($permissions_user['user_permissions']);
                 return;
             }
         }
     }
     $this->query_auth_data($user_id);
 }
    function cleanup()
    {
        global $auth, $cache, $db, $template, $user;
        $delete = isset($_POST['delete']) ? true : false;
        $submit = isset($_POST['submit']) ? true : false;
        $missing_sources = request_var('source', array(0));
        $missing_entries = request_var('entry', array(''), true);
        $missing_authors = request_var('author', array(0), true);
        $missing_comments = request_var('comment', array(0), true);
        $missing_personals = request_var('personal', array(0), true);
        $personals_bad = request_var('personal_bad', array(0), true);
        $s_hidden_fields = build_hidden_fields(array('source' => $missing_sources, 'entry' => $missing_entries, 'author' => $missing_authors, 'comment' => $missing_comments, 'personal' => $missing_personals, 'personal_bad' => $personals_bad));
        if ($submit) {
            if ($missing_authors) {
                $sql = 'UPDATE ' . GALLERY_IMAGES_TABLE . ' 
					SET image_user_id = ' . ANONYMOUS . ",\n\t\t\t\t\t\timage_user_colour = ''\n\t\t\t\t\tWHERE " . $db->sql_in_set('image_id', $missing_authors);
                $db->sql_query($sql);
            }
            if ($missing_comments) {
                $sql = 'UPDATE ' . GALLERY_COMMENTS_TABLE . ' 
					SET comment_user_id = ' . ANONYMOUS . ",\n\t\t\t\t\t\tcomment_user_colour = ''\n\t\t\t\t\tWHERE " . $db->sql_in_set('comment_id', $missing_comments);
                $db->sql_query($sql);
            }
            trigger_error($user->lang['CLEAN_CHANGED'] . adm_back_link($this->u_action));
        }
        if (confirm_box(true)) {
            $message = array();
            if ($missing_sources) {
                $sql = 'DELETE FROM ' . GALLERY_COMMENTS_TABLE . ' WHERE ' . $db->sql_in_set('comment_image_id', $missing_sources);
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . GALLERY_REPORTS_TABLE . ' WHERE ' . $db->sql_in_set('report_image_id', $missing_sources);
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . GALLERY_FAVORITES_TABLE . ' WHERE ' . $db->sql_in_set('image_id', $missing_sources);
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . GALLERY_WATCH_TABLE . ' WHERE ' . $db->sql_in_set('image_id', $missing_sources);
                $db->sql_query($sql);
                phpbb_gallery_image_base::delete_images($missing_sources);
                $message[] = $user->lang['CLEAN_SOURCES_DONE'];
            }
            if ($missing_entries) {
                foreach ($missing_entries as $missing_image) {
                    @unlink(phpbb_gallery_url::path('upload') . utf8_decode($missing_image));
                }
                $message[] = $user->lang['CLEAN_ENTRIES_DONE'];
            }
            if ($missing_authors) {
                $deleted_images = $filenames = array();
                $sql = 'SELECT image_id, image_filename
					FROM ' . GALLERY_IMAGES_TABLE . '
					WHERE ' . $db->sql_in_set('image_id', $missing_authors);
                $result = $db->sql_query($sql);
                while ($row = $db->sql_fetchrow($result)) {
                    $filenames[(int) $row['image_id']] = $row['image_filename'];
                    $deleted_images[] = $row['image_id'];
                }
                $db->sql_freeresult($result);
                // we have all image_ids in $deleted_images which are deleted
                // aswell as the album_ids in $deleted_albums
                // so now drop the comments, ratings, images and albums
                if ($deleted_images) {
                    $sql = 'DELETE FROM ' . GALLERY_COMMENTS_TABLE . ' WHERE ' . $db->sql_in_set('comment_image_id', $deleted_images);
                    $db->sql_query($sql);
                    $sql = 'DELETE FROM ' . GALLERY_FAVORITES_TABLE . ' WHERE ' . $db->sql_in_set('image_id', $deleted_images);
                    $db->sql_query($sql);
                    $sql = 'DELETE FROM ' . GALLERY_REPORTS_TABLE . ' WHERE ' . $db->sql_in_set('report_image_id', $deleted_images);
                    $db->sql_query($sql);
                    $sql = 'DELETE FROM ' . GALLERY_WATCH_TABLE . ' WHERE ' . $db->sql_in_set('image_id', $deleted_images);
                    $db->sql_query($sql);
                    phpbb_gallery_image_base::delete_images($deleted_images, $filenames);
                }
                $message[] = $user->lang['CLEAN_AUTHORS_DONE'];
            }
            if ($missing_comments) {
                $sql = 'DELETE FROM ' . GALLERY_COMMENTS_TABLE . ' WHERE ' . $db->sql_in_set('comment_id', $missing_comments);
                $db->sql_query($sql);
                $message[] = $user->lang['CLEAN_COMMENTS_DONE'];
            }
            if ($missing_personals || $personals_bad) {
                $delete_albums = array_merge($missing_personals, $personals_bad);
                $deleted_images = $deleted_albums = array(0);
                $user_image_count = array();
                $sql = 'SELECT COUNT(album_user_id) personal_counter
					FROM ' . GALLERY_ALBUMS_TABLE . '
					WHERE parent_id = 0
						AND ' . $db->sql_in_set('album_user_id', $delete_albums);
                $result = $db->sql_query($sql);
                $remove_personal_counter = $db->sql_fetchfield('personal_counter');
                $db->sql_freeresult($result);
                $sql = 'SELECT album_id
					FROM ' . GALLERY_ALBUMS_TABLE . '
					WHERE ' . $db->sql_in_set('album_user_id', $delete_albums);
                $result = $db->sql_query($sql);
                while ($row = $db->sql_fetchrow($result)) {
                    $deleted_albums[] = $row['album_id'];
                }
                $db->sql_freeresult($result);
                $sql = 'SELECT image_id, image_filename, image_user_id
					FROM ' . GALLERY_IMAGES_TABLE . '
					WHERE ' . $db->sql_in_set('image_album_id', $deleted_albums);
                $result = $db->sql_query($sql);
                $filenames = array();
                while ($row = $db->sql_fetchrow($result)) {
                    $deleted_images[] = $row['image_id'];
                    $filenames[(int) $row['image_id']] = $row['image_filename'];
                    if (isset($user_image_count[$row['image_user_id']])) {
                        $user_image_count[$row['image_user_id']]++;
                    } else {
                        $user_image_count[(int) $row['image_user_id']] = 1;
                    }
                }
                $db->sql_freeresult($result);
                if ($deleted_images) {
                    $sql = 'DELETE FROM ' . GALLERY_COMMENTS_TABLE . ' WHERE ' . $db->sql_in_set('comment_image_id', $deleted_images);
                    $db->sql_query($sql);
                    $sql = 'DELETE FROM ' . GALLERY_FAVORITES_TABLE . ' WHERE ' . $db->sql_in_set('image_id', $deleted_images);
                    $db->sql_query($sql);
                    $sql = 'DELETE FROM ' . GALLERY_REPORTS_TABLE . ' WHERE ' . $db->sql_in_set('report_image_id', $deleted_images);
                    $db->sql_query($sql);
                    $sql = 'DELETE FROM ' . GALLERY_WATCH_TABLE . ' WHERE ' . $db->sql_in_set('image_id', $deleted_images);
                    $db->sql_query($sql);
                    phpbb_gallery_image_base::delete_images($deleted_images, $filenames);
                }
                $sql = 'DELETE FROM ' . GALLERY_ALBUMS_TABLE . ' WHERE ' . $db->sql_in_set('album_id', $deleted_albums);
                $db->sql_query($sql);
                phpbb_gallery_config::get('num_pegas', $remove_personal_counter);
                if (in_array(phpbb_gallery_config::get('newest_pega_album_id'), $deleted_albums)) {
                    // Update the config for the statistic on the index
                    if (phpbb_gallery_config::get('num_pegas') > 0) {
                        $sql_array = array('SELECT' => 'a.album_id, u.user_id, u.username, u.user_colour', 'FROM' => array(GALLERY_ALBUMS_TABLE => 'a'), 'LEFT_JOIN' => array(array('FROM' => array(USERS_TABLE => 'u'), 'ON' => 'u.user_id = a.album_user_id')), 'WHERE' => 'a.album_user_id <> ' . phpbb_gallery_album::PUBLIC_ALBUM . ' AND a.parent_id = 0', 'ORDER_BY' => 'a.album_id DESC');
                        $sql = $db->sql_build_query('SELECT', $sql_array);
                        $result = $db->sql_query_limit($sql, 1);
                        $newest_pgallery = $db->sql_fetchrow($result);
                        $db->sql_freeresult($result);
                        phpbb_gallery_config::set('newest_pega_user_id', $newest_pgallery['user_id']);
                        phpbb_gallery_config::set('newest_pega_username', $newest_pgallery['username']);
                        phpbb_gallery_config::set('newest_pega_user_colour', $newest_pgallery['user_colour']);
                        phpbb_gallery_config::set('newest_pega_album_id', $newest_pgallery['album_id']);
                    } else {
                        phpbb_gallery_config::set('newest_pega_user_id', 0);
                        phpbb_gallery_config::set('newest_pega_username', '');
                        phpbb_gallery_config::set('newest_pega_user_colour', '');
                        phpbb_gallery_config::set('newest_pega_album_id', 0);
                    }
                }
                $user_ids = array();
                foreach ($user_image_count as $user_id => $images) {
                    $user_ids[] = (int) $user_id;
                    phpbb_gallery_hookup::add_image($user_id, 0 - $images);
                    $uploader = new phpbb_gallery_user($db, $user_id, false);
                    $uploader->update_images(0 - $images);
                }
                phpbb_gallery_user_helpers::update_users($user_ids, array('personal_album_id' => 0));
                if ($missing_personals) {
                    $message[] = $user->lang['CLEAN_PERSONALS_DONE'];
                }
                if ($personals_bad) {
                    $message[] = $user->lang['CLEAN_PERSONALS_BAD_DONE'];
                }
            }
            // Make sure the overall image & comment count is correct...
            $sql = 'SELECT COUNT(image_id) AS num_images, SUM(image_comments) AS num_comments
				FROM ' . GALLERY_IMAGES_TABLE . '
				WHERE image_status <> ' . phpbb_gallery_image::STATUS_UNAPPROVED;
            $result = $db->sql_query($sql);
            $row = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);
            phpbb_gallery_config::set('num_images', $row['num_images']);
            phpbb_gallery_config::set('num_comments', $row['num_comments']);
            $cache->destroy('sql', GALLERY_ALBUMS_TABLE);
            $cache->destroy('sql', GALLERY_COMMENTS_TABLE);
            $cache->destroy('sql', GALLERY_FAVORITES_TABLE);
            $cache->destroy('sql', GALLERY_IMAGES_TABLE);
            $cache->destroy('sql', GALLERY_RATES_TABLE);
            $cache->destroy('sql', GALLERY_REPORTS_TABLE);
            $cache->destroy('sql', GALLERY_WATCH_TABLE);
            $cache->destroy('_albums');
            phpbb_gallery_auth::set_user_permissions('all', '');
            trigger_error(implode('<br />', $message) . adm_back_link($this->u_action));
        } else {
            if ($delete || isset($_POST['cancel'])) {
                if (isset($_POST['cancel'])) {
                    trigger_error($user->lang['CLEAN_GALLERY_ABORT'] . adm_back_link($this->u_action), E_USER_WARNING);
                } else {
                    $user->lang['CLEAN_GALLERY_CONFIRM'] = $user->lang['CONFIRM_CLEAN'];
                    if ($missing_sources) {
                        $user->lang['CLEAN_GALLERY_CONFIRM'] = $user->lang['CONFIRM_CLEAN_SOURCES'] . '<br />' . $user->lang['CLEAN_GALLERY_CONFIRM'];
                    }
                    if ($missing_entries) {
                        $user->lang['CLEAN_GALLERY_CONFIRM'] = $user->lang['CONFIRM_CLEAN_ENTRIES'] . '<br />' . $user->lang['CLEAN_GALLERY_CONFIRM'];
                    }
                    if ($missing_authors) {
                        $user->lang['CLEAN_GALLERY_CONFIRM'] = $user->lang['CONFIRM_CLEAN_AUTHORS'] . '<br />' . $user->lang['CLEAN_GALLERY_CONFIRM'];
                    }
                    if ($missing_comments) {
                        $user->lang['CLEAN_GALLERY_CONFIRM'] = $user->lang['CONFIRM_CLEAN_COMMENTS'] . '<br />' . $user->lang['CLEAN_GALLERY_CONFIRM'];
                    }
                    if ($personals_bad || $missing_personals) {
                        $sql = 'SELECT album_name, album_user_id
						FROM ' . GALLERY_ALBUMS_TABLE . '
						WHERE ' . $db->sql_in_set('album_user_id', array_merge($missing_personals, $personals_bad));
                        $result = $db->sql_query($sql);
                        while ($row = $db->sql_fetchrow($result)) {
                            if (in_array($row['album_user_id'], $personals_bad)) {
                                $personals_bad_names[] = $row['album_name'];
                            } else {
                                $missing_personals_names[] = $row['album_name'];
                            }
                        }
                        $db->sql_freeresult($result);
                    }
                    if ($missing_personals) {
                        $user->lang['CLEAN_GALLERY_CONFIRM'] = sprintf($user->lang['CONFIRM_CLEAN_PERSONALS'], implode(', ', $missing_personals_names)) . '<br />' . $user->lang['CLEAN_GALLERY_CONFIRM'];
                    }
                    if ($personals_bad) {
                        $user->lang['CLEAN_GALLERY_CONFIRM'] = sprintf($user->lang['CONFIRM_CLEAN_PERSONALS_BAD'], implode(', ', $personals_bad_names)) . '<br />' . $user->lang['CLEAN_GALLERY_CONFIRM'];
                    }
                    confirm_box(false, 'CLEAN_GALLERY', $s_hidden_fields);
                }
            }
        }
        $requested_source = array();
        $sql_array = array('SELECT' => 'i.image_id, i.image_name, i.image_filemissing, i.image_filename, i.image_username, u.user_id', 'FROM' => array(GALLERY_IMAGES_TABLE => 'i'), 'LEFT_JOIN' => array(array('FROM' => array(USERS_TABLE => 'u'), 'ON' => 'u.user_id = i.image_user_id')));
        $sql = $db->sql_build_query('SELECT', $sql_array);
        $result = $db->sql_query($sql);
        while ($row = $db->sql_fetchrow($result)) {
            if ($row['image_filemissing']) {
                $template->assign_block_vars('sourcerow', array('IMAGE_ID' => $row['image_id'], 'IMAGE_NAME' => $row['image_name']));
            }
            if (!$row['user_id']) {
                $template->assign_block_vars('authorrow', array('IMAGE_ID' => $row['image_id'], 'AUTHOR_NAME' => $row['image_username']));
            }
            $requested_source[] = $row['image_filename'];
        }
        $db->sql_freeresult($result);
        $check_mode = request_var('check_mode', '');
        if ($check_mode == 'source') {
            $source_missing = array();
            // Reset the status: a image might have been viewed without file but the file is back
            $sql = 'UPDATE ' . GALLERY_IMAGES_TABLE . '
				SET image_filemissing = 0';
            $db->sql_query($sql);
            $sql = 'SELECT image_id, image_filename, image_filemissing
				FROM ' . GALLERY_IMAGES_TABLE;
            $result = $db->sql_query($sql);
            while ($row = $db->sql_fetchrow($result)) {
                if (!file_exists(phpbb_gallery_url::path('upload') . $row['image_filename'])) {
                    $source_missing[] = $row['image_id'];
                }
            }
            $db->sql_freeresult($result);
            if ($source_missing) {
                $sql = 'UPDATE ' . GALLERY_IMAGES_TABLE . "\n\t\t\t\t\tSET image_filemissing = 1\n\t\t\t\t\tWHERE " . $db->sql_in_set('image_id', $source_missing);
                $db->sql_query($sql);
            }
        }
        if ($check_mode == 'entry') {
            $directory = phpbb_gallery_url::path('upload');
            $handle = opendir($directory);
            while ($file = readdir($handle)) {
                if (!is_dir($directory . $file) && (substr(strtolower($file), '-4') == '.png' || substr(strtolower($file), '-4') == '.gif' || substr(strtolower($file), '-4') == '.jpg') && !in_array($file, $requested_source)) {
                    if (strpos($file, 'image_not_exist') !== false || strpos($file, 'not_authorised') !== false || strpos($file, 'no_hotlinking') !== false) {
                        continue;
                    }
                    $template->assign_block_vars('entryrow', array('FILE_NAME' => utf8_encode($file)));
                }
            }
            closedir($handle);
        }
        $sql_array = array('SELECT' => 'c.comment_id, c.comment_image_id, c.comment_username, u.user_id', 'FROM' => array(GALLERY_COMMENTS_TABLE => 'c'), 'LEFT_JOIN' => array(array('FROM' => array(USERS_TABLE => 'u'), 'ON' => 'u.user_id = c.comment_user_id')));
        $sql = $db->sql_build_query('SELECT', $sql_array);
        $result = $db->sql_query($sql);
        while ($row = $db->sql_fetchrow($result)) {
            if (!$row['user_id']) {
                $template->assign_block_vars('commentrow', array('COMMENT_ID' => $row['comment_id'], 'IMAGE_ID' => $row['comment_image_id'], 'AUTHOR_NAME' => $row['comment_username']));
            }
        }
        $db->sql_freeresult($result);
        $sql_array = array('SELECT' => 'a.album_id, a.album_user_id, a.album_name, u.user_id, a.album_images_real', 'FROM' => array(GALLERY_ALBUMS_TABLE => 'a'), 'LEFT_JOIN' => array(array('FROM' => array(USERS_TABLE => 'u'), 'ON' => 'u.user_id = a.album_user_id')), 'WHERE' => 'a.album_user_id <> ' . phpbb_gallery_album::PUBLIC_ALBUM . ' AND a.parent_id = 0');
        $sql = $db->sql_build_query('SELECT', $sql_array);
        $result = $db->sql_query($sql);
        $personalrow = $personal_bad_row = array();
        while ($row = $db->sql_fetchrow($result)) {
            $album = array('user_id' => $row['album_user_id'], 'album_id' => $row['album_id'], 'album_name' => $row['album_name'], 'images' => $row['album_images_real']);
            if (!$row['user_id']) {
                $personalrow[$row['album_user_id']] = $album;
            }
            $personal_bad_row[$row['album_user_id']] = $album;
        }
        $db->sql_freeresult($result);
        $sql = 'SELECT ga.album_user_id, ga.album_images_real
			FROM ' . GALLERY_ALBUMS_TABLE . ' ga
			WHERE ga.album_user_id <> ' . phpbb_gallery_album::PUBLIC_ALBUM . '
				AND ga.parent_id <> 0';
        $result = $db->sql_query($sql);
        while ($row = $db->sql_fetchrow($result)) {
            if (isset($personalrow[$row['album_user_id']])) {
                $personalrow[$row['album_user_id']]['images'] = $personalrow[$row['album_user_id']]['images'] + $row['album_images_real'];
            }
            $personal_bad_row[$row['album_user_id']]['images'] = $personal_bad_row[$row['album_user_id']]['images'] + $row['album_images_real'];
        }
        $db->sql_freeresult($result);
        foreach ($personalrow as $key => $row) {
            $template->assign_block_vars('personalrow', array('USER_ID' => $row['user_id'], 'ALBUM_ID' => $row['album_id'], 'AUTHOR_NAME' => $row['album_name']));
        }
        foreach ($personal_bad_row as $key => $row) {
            $template->assign_block_vars('personal_bad_row', array('USER_ID' => $row['user_id'], 'ALBUM_ID' => $row['album_id'], 'AUTHOR_NAME' => $row['album_name'], 'IMAGES' => $row['images']));
        }
        $template->assign_vars(array('S_GALLERY_MANAGE_RESTS' => true, 'ACP_GALLERY_TITLE' => $user->lang['ACP_GALLERY_CLEANUP'], 'ACP_GALLERY_TITLE_EXPLAIN' => $user->lang['ACP_GALLERY_CLEANUP_EXPLAIN'], 'CHECK_SOURCE' => $this->u_action . '&amp;check_mode=source', 'CHECK_ENTRY' => $this->u_action . '&amp;check_mode=entry', 'S_FOUNDER' => $user->data['user_type'] == USER_FOUNDER ? true : false));
    }
    function main($id, $mode)
    {
        global $cache, $db, $user, $auth, $template;
        phpbb_gallery::init();
        $manage_albums = new phpbb_gallery_album_manage(request_var('user_id', 0), request_var('parent_id', 0), $this->u_action);
        $user->add_lang(array('mods/gallery_acp', 'mods/gallery'));
        $this->tpl_name = 'gallery_albums';
        $this->page_title = 'ACP_GALLERY_MANAGE_ALBUMS';
        $form_key = 'acp_gallery_albums';
        add_form_key($form_key);
        $action = request_var('action', '');
        $update = isset($_POST['update']) ? true : false;
        $album_id = request_var('a', 0);
        $this->parent_id = request_var('parent_id', 0);
        $album_data = $errors = array();
        if ($update && !check_form_key($form_key)) {
            $update = false;
            $errors[] = $user->lang['FORM_INVALID'];
        }
        // Major routines
        if ($update) {
            switch ($action) {
                case 'delete':
                    $action_subalbums = request_var('action_subalbums', '');
                    $subalbums_to_id = request_var('subalbums_to_id', 0);
                    $action_images = request_var('action_images', '');
                    $images_to_id = request_var('images_to_id', 0);
                    $errors = $manage_albums->delete_album($album_id, $action_images, $action_subalbums, $images_to_id, $subalbums_to_id);
                    if (sizeof($errors)) {
                        break;
                    }
                    $cache->destroy('sql', GALLERY_ALBUMS_TABLE);
                    trigger_error($user->lang['ALBUM_DELETED'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
                    break;
                case 'edit':
                    $album_data = array('album_id' => $album_id);
                    // No break; here
                // No break; here
                case 'add':
                    $album_data += array('parent_id' => request_var('album_parent_id', $this->parent_id), 'album_type' => request_var('album_type', phpbb_gallery_album::TYPE_UPLOAD), 'type_action' => request_var('type_action', ''), 'album_status' => request_var('album_status', phpbb_gallery_album::STATUS_OPEN), 'album_parents' => '', 'album_name' => utf8_normalize_nfc(request_var('album_name', '', true)), 'album_desc' => utf8_normalize_nfc(request_var('album_desc', '', true)), 'album_desc_uid' => '', 'album_desc_options' => 7, 'album_desc_bitfield' => '', 'album_image' => request_var('album_image', ''), 'album_watermark' => request_var('album_watermark', false), 'album_sort_key' => request_var('album_sort_key', ''), 'album_sort_dir' => request_var('album_sort_dir', ''), 'display_subalbum_list' => request_var('display_subalbum_list', false), 'display_on_index' => request_var('display_on_index', false), 'display_in_rrc' => request_var('display_in_rrc', false));
                    // Categories are not able to be locked...
                    if ($album_data['album_type'] == phpbb_gallery_album::TYPE_CAT) {
                        $album_data['album_status'] = phpbb_gallery_album::STATUS_OPEN;
                    }
                    // Contests need contest_data, freaky... :-O
                    $contest_data = array('contest_start' => request_var('contest_start', ''), 'contest_rating' => request_var('contest_rating', ''), 'contest_end' => request_var('contest_end', ''));
                    // Get data for album description if specified
                    if ($album_data['album_desc']) {
                        generate_text_for_storage($album_data['album_desc'], $album_data['album_desc_uid'], $album_data['album_desc_bitfield'], $album_data['album_desc_options'], request_var('desc_parse_bbcode', false), request_var('desc_parse_urls', false), request_var('desc_parse_smilies', false));
                    }
                    $errors = $manage_albums->update_album_data($album_data, $contest_data);
                    if (!sizeof($errors)) {
                        $album_perm_from = request_var('album_perm_from', 0);
                        // Copy permissions? You do not need permissions for that in the gallery
                        if ($album_perm_from && $album_perm_from != $album_data['album_id']) {
                            // If we edit a album delete current permissions first
                            if ($action == 'edit') {
                                $sql = 'DELETE FROM ' . GALLERY_PERMISSIONS_TABLE . '
									WHERE perm_album_id = ' . $album_data['album_id'];
                                $db->sql_query($sql);
                                $sql = 'DELETE FROM ' . GALLERY_MODSCACHE_TABLE . '
									WHERE album_id = ' . $album_data['album_id'];
                                $db->sql_query($sql);
                            }
                            $sql = 'SELECT *
								FROM ' . GALLERY_PERMISSIONS_TABLE . '
								WHERE perm_album_id = ' . $album_perm_from;
                            $result = $db->sql_query($sql);
                            while ($row = $db->sql_fetchrow($result)) {
                                $perm_data[] = array('perm_role_id' => $row['perm_role_id'], 'perm_album_id' => $album_data['album_id'], 'perm_user_id' => $row['perm_user_id'], 'perm_group_id' => $row['perm_group_id'], 'perm_system' => $row['perm_system']);
                            }
                            $db->sql_freeresult($result);
                            $modscache_ary = array();
                            $sql = 'SELECT * FROM ' . GALLERY_MODSCACHE_TABLE . '
								WHERE album_id = ' . $album_perm_from;
                            $result = $db->sql_query($sql);
                            while ($row = $db->sql_fetchrow($result)) {
                                $modscache_ary[] = array('album_id' => $album_data['album_id'], 'user_id' => $row['user_id'], 'username' => $row['username'], 'group_id' => $row['group_id'], 'group_name' => $row['group_name'], 'display_on_index' => $row['display_on_index']);
                            }
                            $db->sql_freeresult($result);
                            $db->sql_multi_insert(GALLERY_PERMISSIONS_TABLE, $perm_data);
                            $db->sql_multi_insert(GALLERY_MODSCACHE_TABLE, $modscache_ary);
                        }
                        $cache->destroy('sql', GALLERY_ALBUMS_TABLE);
                        $cache->destroy('sql', GALLERY_MODSCACHE_TABLE);
                        $cache->destroy('sql', GALLERY_PERMISSIONS_TABLE);
                        $cache->destroy('_albums');
                        phpbb_gallery_auth::set_user_permissions('all', '');
                        $acl_url = '&amp;mode=manage&amp;action=v_mask&amp;album_id[]=' . $album_data['album_id'];
                        $message = $action == 'add' ? $user->lang['ALBUM_CREATED'] : $user->lang['ALBUM_UPDATED'];
                        $message .= '<br /><br />' . sprintf($user->lang['REDIRECT_ACL'], '<a href="' . phpbb_gallery_url::append_sid('admin', 'index', 'i=gallery_permissions' . $acl_url) . '">', '</a>');
                        // Redirect directly to permission settings screen
                        if ($action == 'add' && !$album_perm_from) {
                            meta_refresh(5, phpbb_gallery_url::append_sid('admin', 'index', 'i=gallery_permissions' . $acl_url));
                        }
                        trigger_error($message . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
                    }
                    break;
            }
        }
        switch ($action) {
            case 'move_up':
            case 'move_down':
                if (!$album_id) {
                    trigger_error($user->lang['NO_ALBUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
                }
                $sql = 'SELECT *
					FROM ' . GALLERY_ALBUMS_TABLE . "\n\t\t\t\t\tWHERE album_id = {$album_id}";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                if (!$row) {
                    trigger_error($user->lang['NO_ALBUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
                }
                $move_album_name = $manage_albums->move_album_by($row, $action, 1);
                if ($move_album_name !== false) {
                    add_log('admin', 'LOG_ALBUM_' . strtoupper($action), $row['album_name'], $move_album_name);
                    $cache->destroy('sql', GALLERY_ALBUMS_TABLE);
                }
                break;
            case 'sync':
            case 'sync_album':
                if (!$album_id) {
                    trigger_error($user->lang['NO_ALBUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
                }
                $sql = 'SELECT album_name, album_type
					FROM ' . GALLERY_ALBUMS_TABLE . "\n\t\t\t\t\tWHERE album_id = {$album_id}";
                $result = $db->sql_query($sql);
                $row = $db->sql_fetchrow($result);
                $db->sql_freeresult($result);
                if (!$row) {
                    trigger_error($user->lang['NO_ALBUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
                }
                phpbb_gallery_album::update_info($album_id);
                add_log('admin', 'LOG_ALBUM_SYNC', $row['album_name']);
                $template->assign_var('L_ALBUM_RESYNCED', sprintf($user->lang['ALBUM_RESYNCED'], $row['album_name']));
                break;
            case 'add':
            case 'edit':
                // Show form to create/modify a album
                if ($action == 'edit') {
                    $this->page_title = 'EDIT_ALBUM';
                    $row = phpbb_gallery_album::get_info($album_id);
                    $old_album_type = $row['album_type'];
                    if (!$update) {
                        $album_data = $row;
                    } else {
                        $album_data['left_id'] = $row['left_id'];
                        $album_data['right_id'] = $row['right_id'];
                    }
                    if ($row['album_type'] == phpbb_gallery_album::TYPE_CONTEST) {
                        $contest_data = $this->get_contest_info('album', $album_id);
                    } else {
                        // Default values, 3 days later rate and 7 for the end of the contest
                        $contest_data = array('contest_start' => time(), 'contest_rating' => 3 * 86400, 'contest_end' => 7 * 86400);
                    }
                    // Make sure no direct child albums are able to be selected as parents.
                    $exclude_albums = array();
                    foreach (phpbb_gallery_album::get_branch(phpbb_gallery_album::PUBLIC_ALBUM, $album_id, 'children') as $row) {
                        $exclude_albums[] = $row['album_id'];
                    }
                    $parents_list = phpbb_gallery_album::get_albumbox(true, '', $album_data['parent_id'], false, $exclude_albums);
                    /*
                    $album_data['album_password_confirm'] = $album_data['album_password'];
                    */
                } else {
                    $this->page_title = 'CREATE_ALBUM';
                    $album_id = $this->parent_id;
                    $parents_list = phpbb_gallery_album::get_albumbox(true, '', $this->parent_id);
                    // Fill album data with default values
                    if (!$update) {
                        $album_data = array('parent_id' => $this->parent_id, 'album_type' => phpbb_gallery_album::TYPE_UPLOAD, 'album_status' => phpbb_gallery_album::STATUS_OPEN, 'album_name' => utf8_normalize_nfc(request_var('album_name', '', true)), 'album_desc' => '', 'album_image' => '', 'album_watermark' => true, 'album_sort_key' => '', 'album_sort_dir' => '', 'display_subalbum_list' => true, 'display_on_index' => true, 'display_in_rrc' => true);
                        // Default values, 3 days later rate and 7 for the end of the contest
                        $contest_data = array('contest_start' => time(), 'contest_rating' => 3 * 86400, 'contest_end' => 7 * 86400);
                    }
                }
                $album_desc_data = array('text' => $album_data['album_desc'], 'allow_bbcode' => true, 'allow_smilies' => true, 'allow_urls' => true);
                // Parse desciption if specified
                if ($album_data['album_desc']) {
                    if (!isset($album_data['album_desc_uid'])) {
                        // Before we are able to display the preview and plane text, we need to parse our request_var()'d value...
                        $album_data['album_desc_uid'] = '';
                        $album_data['album_desc_bitfield'] = '';
                        $album_data['album_desc_options'] = 0;
                        generate_text_for_storage($album_data['album_desc'], $album_data['album_desc_uid'], $album_data['album_desc_bitfield'], $album_data['album_desc_options'], request_var('desc_allow_bbcode', false), request_var('desc_allow_urls', false), request_var('desc_allow_smilies', false));
                    }
                    // decode...
                    $album_desc_data = generate_text_for_edit($album_data['album_desc'], $album_data['album_desc_uid'], $album_data['album_desc_options']);
                }
                $album_type_options = '';
                $album_type_ary = array(phpbb_gallery_album::TYPE_CAT => 'CAT', phpbb_gallery_album::TYPE_UPLOAD => 'UPLOAD', phpbb_gallery_album::TYPE_CONTEST => 'CONTEST');
                foreach ($album_type_ary as $value => $lang) {
                    $album_type_options .= '<option value="' . $value . '"' . ($value == $album_data['album_type'] ? ' selected="selected"' : '') . '>' . $user->lang['ALBUM_TYPE_' . $lang] . '</option>';
                }
                $album_sort_key_options = '';
                $album_sort_key_options .= '<option' . (!in_array($album_data['album_sort_key'], array('t', 'n', 'vc', 'u', 'ra', 'r', 'c', 'lc')) ? ' selected="selected"' : '') . " value=''>" . $user->lang['SORT_DEFAULT'] . '</option>';
                $album_sort_key_options .= '<option' . ($album_data['album_sort_key'] == 't' ? ' selected="selected"' : '') . " value='t'>" . $user->lang['TIME'] . '</option>';
                $album_sort_key_options .= '<option' . ($album_data['album_sort_key'] == 'n' ? ' selected="selected"' : '') . " value='n'>" . $user->lang['IMAGE_NAME'] . '</option>';
                $album_sort_key_options .= '<option' . ($album_data['album_sort_key'] == 'vc' ? ' selected="selected"' : '') . " value='vc'>" . $user->lang['VIEWS'] . '</option>';
                $album_sort_key_options .= '<option' . ($album_data['album_sort_key'] == 'u' ? ' selected="selected"' : '') . " value='u'>" . $user->lang['USERNAME'] . '</option>';
                $album_sort_key_options .= '<option' . ($album_data['album_sort_key'] == 'ra' ? ' selected="selected"' : '') . " value='ra'>" . $user->lang['RATING'] . '</option>';
                $album_sort_key_options .= '<option' . ($album_data['album_sort_key'] == 'r' ? ' selected="selected"' : '') . " value='r'>" . $user->lang['RATES_COUNT'] . '</option>';
                $album_sort_key_options .= '<option' . ($album_data['album_sort_key'] == 'c' ? ' selected="selected"' : '') . " value='c'>" . $user->lang['COMMENTS'] . '</option>';
                $album_sort_key_options .= '<option' . ($album_data['album_sort_key'] == 'lc' ? ' selected="selected"' : '') . " value='lc'>" . $user->lang['NEW_COMMENT'] . '</option>';
                $album_sort_dir_options = '';
                $album_sort_dir_options .= '<option' . ($album_data['album_sort_dir'] != 'd' && $album_data['album_sort_dir'] != 'a' ? ' selected="selected"' : '') . " value=''>" . $user->lang['SORT_DEFAULT'] . '</option>';
                $album_sort_dir_options .= '<option' . ($album_data['album_sort_dir'] == 'd' ? ' selected="selected"' : '') . " value='d'>" . $user->lang['SORT_DESCENDING'] . '</option>';
                $album_sort_dir_options .= '<option' . ($album_data['album_sort_dir'] == 'a' ? ' selected="selected"' : '') . " value='a'>" . $user->lang['SORT_ASCENDING'] . '</option>';
                $statuslist = '<option value="' . phpbb_gallery_album::STATUS_OPEN . '"' . ($album_data['album_status'] == phpbb_gallery_album::STATUS_OPEN ? ' selected="selected"' : '') . '>' . $user->lang['UNLOCKED'] . '</option><option value="' . phpbb_gallery_album::STATUS_LOCKED . '"' . ($album_data['album_status'] == phpbb_gallery_album::STATUS_LOCKED ? ' selected="selected"' : '') . '>' . $user->lang['LOCKED'] . '</option>';
                $sql = 'SELECT album_id
					FROM ' . GALLERY_ALBUMS_TABLE . '
					WHERE album_type = ' . phpbb_gallery_album::TYPE_UPLOAD . '
						AND album_user_id = ' . phpbb_gallery_album::PUBLIC_ALBUM . "\n\t\t\t\t\t\tAND album_id <> {$album_id}";
                $result = $db->sql_query_limit($sql, 1);
                $uploadable_album_exists = false;
                if ($db->sql_fetchrow($result)) {
                    $uploadable_album_exists = true;
                }
                $db->sql_freeresult($result);
                // Subalbum move options
                if ($action == 'edit' && in_array($album_data['album_type'], array(phpbb_gallery_album::TYPE_UPLOAD, phpbb_gallery_album::TYPE_CONTEST))) {
                    $subalbums_id = array();
                    $subalbums = phpbb_gallery_album::get_branch(phpbb_gallery_album::PUBLIC_ALBUM, $album_id, 'children');
                    foreach ($subalbums as $row) {
                        $subalbums_id[] = $row['album_id'];
                    }
                    $albums_list = phpbb_gallery_album::get_albumbox(true, '', $album_data['parent_id'], false, $subalbums_id);
                    if ($uploadable_album_exists) {
                        $template->assign_vars(array('S_MOVE_ALBUM_OPTIONS' => phpbb_gallery_album::get_albumbox(true, '', $album_data['parent_id'], false, $subalbums_id, phpbb_gallery_album::PUBLIC_ALBUM, phpbb_gallery_album::TYPE_UPLOAD)));
                    }
                    $template->assign_vars(array('S_HAS_SUBALBUMS' => $album_data['right_id'] - $album_data['left_id'] > 1 ? true : false, 'S_ALBUMS_LIST' => $albums_list));
                } elseif ($uploadable_album_exists) {
                    $template->assign_vars(array('S_MOVE_ALBUM_OPTIONS' => phpbb_gallery_album::get_albumbox(true, '', $album_data['parent_id'], false, $album_id, 0, phpbb_gallery_album::TYPE_UPLOAD)));
                }
                /*
                if (strlen($album_data['album_password']) == 32)
                {
                	$errors[] = $user->lang['ALBUM_PASSWORD_OLD'];
                }
                */
                $template->assign_vars(array('S_EDIT_ALBUM' => true, 'S_ERROR' => sizeof($errors) ? true : false, 'S_PARENT_ID' => $this->parent_id, 'S_ALBUM_PARENT_ID' => $album_data['parent_id'], 'S_ADD_ACTION' => $action == 'add' ? true : false, 'U_BACK' => $this->u_action . '&amp;parent_id=' . $this->parent_id, 'U_EDIT_ACTION' => $this->u_action . "&amp;parent_id={$this->parent_id}&amp;action={$action}&amp;a={$album_id}", 'L_COPY_PERMISSIONS_EXPLAIN' => $user->lang['COPY_PERMISSIONS_' . strtoupper($action) . '_EXPLAIN'], 'L_TITLE' => $user->lang[$this->page_title], 'ERROR_MSG' => sizeof($errors) ? implode('<br />', $errors) : '', 'ALBUM_NAME' => $album_data['album_name'], 'ALBUM_IMAGE' => $album_data['album_image'], 'ALBUM_IMAGE_SRC' => $album_data['album_image'] ? phpbb_gallery_url::path('phpbb') . $album_data['album_image'] : '', 'ALBUM_DESC' => $album_desc_data['text'], 'S_DESC_BBCODE_CHECKED' => $album_desc_data['allow_bbcode'] ? true : false, 'S_DESC_SMILIES_CHECKED' => $album_desc_data['allow_smilies'] ? true : false, 'S_DESC_URLS_CHECKED' => $album_desc_data['allow_urls'] ? true : false, 'S_ALBUM_TYPE_OPTIONS' => $album_type_options, 'S_STATUS_OPTIONS' => $statuslist, 'S_PARENT_OPTIONS' => $parents_list, 'S_ALBUM_OPTIONS' => phpbb_gallery_album::get_albumbox(true, '', $action == 'add' ? $album_data['parent_id'] : false, false, $action == 'edit' ? $album_data['album_id'] : false), 'S_ALBUM_ORIG_UPLOAD' => isset($old_album_type) && $old_album_type == phpbb_gallery_album::TYPE_UPLOAD ? true : false, 'S_ALBUM_ORIG_CAT' => isset($old_album_type) && $old_album_type == phpbb_gallery_album::TYPE_CAT ? true : false, 'S_ALBUM_ORIG_CONTEST' => isset($old_album_type) && $old_album_type == phpbb_gallery_album::TYPE_CONTEST ? true : false, 'S_ALBUM_UPLOAD' => $album_data['album_type'] == phpbb_gallery_album::TYPE_UPLOAD ? true : false, 'S_ALBUM_CAT' => $album_data['album_type'] == phpbb_gallery_album::TYPE_CAT ? true : false, 'S_ALBUM_CONTEST' => $album_data['album_type'] == phpbb_gallery_album::TYPE_CONTEST ? true : false, 'ALBUM_UPLOAD' => phpbb_gallery_album::TYPE_UPLOAD, 'ALBUM_CAT' => phpbb_gallery_album::TYPE_CAT, 'ALBUM_CONTEST' => phpbb_gallery_album::TYPE_CONTEST, 'S_CAN_COPY_PERMISSIONS' => true, 'S_ALBUM_WATERMARK' => $album_data['album_watermark'] ? true : false, 'ALBUM_SORT_KEY_OPTIONS' => $album_sort_key_options, 'ALBUM_SORT_DIR_OPTIONS' => $album_sort_dir_options, 'S_DISPLAY_SUBALBUM_LIST' => $album_data['display_subalbum_list'] ? true : false, 'S_DISPLAY_ON_INDEX' => $album_data['display_on_index'] ? true : false, 'S_DISPLAY_IN_RRC' => $album_data['display_in_rrc'] ? true : false, 'S_CONTEST_START' => $user->format_date($contest_data['contest_start'], 'Y-m-d H:i'), 'CONTEST_RATING' => $user->format_date($contest_data['contest_start'] + $contest_data['contest_rating'], 'Y-m-d H:i'), 'CONTEST_END' => $user->format_date($contest_data['contest_start'] + $contest_data['contest_end'], 'Y-m-d H:i')));
                return;
                break;
            case 'delete':
                if (!$album_id) {
                    trigger_error($user->lang['NO_ALBUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
                }
                $album_data = phpbb_gallery_album::get_info($album_id);
                $subalbums_id = array();
                $subalbums = phpbb_gallery_album::get_branch(phpbb_gallery_album::PUBLIC_ALBUM, $album_id, 'children');
                foreach ($subalbums as $row) {
                    $subalbums_id[] = $row['album_id'];
                }
                $albums_list = phpbb_gallery_album::get_albumbox(true, '', $album_data['parent_id'], false, $subalbums_id);
                $sql = 'SELECT album_id
					FROM ' . GALLERY_ALBUMS_TABLE . '
					WHERE album_type = ' . phpbb_gallery_album::TYPE_UPLOAD . "\n\t\t\t\t\t\tAND album_id <> {$album_id}\n\t\t\t\t\t\tAND album_user_id = " . phpbb_gallery_album::PUBLIC_ALBUM;
                $result = $db->sql_query_limit($sql, 1);
                if ($db->sql_fetchrow($result)) {
                    $template->assign_vars(array('S_MOVE_ALBUM_OPTIONS' => phpbb_gallery_album::get_albumbox(true, '', $album_data['parent_id'], false, $subalbums_id, phpbb_gallery_album::PUBLIC_ALBUM, phpbb_gallery_album::TYPE_UPLOAD)));
                }
                $db->sql_freeresult($result);
                $parent_id = $this->parent_id == $album_id ? 0 : $this->parent_id;
                $template->assign_vars(array('S_DELETE_ALBUM' => true, 'U_ACTION' => $this->u_action . "&amp;parent_id={$parent_id}&amp;action=delete&amp;a=" . $album_id, 'U_BACK' => $this->u_action . '&amp;parent_id=' . $this->parent_id, 'ALBUM_NAME' => $album_data['album_name'], 'S_ALBUM_POST' => in_array($album_data['album_type'], array(phpbb_gallery_album::TYPE_UPLOAD, phpbb_gallery_album::TYPE_CONTEST)) ? true : false, 'S_HAS_SUBALBUMS' => $album_data['right_id'] - $album_data['left_id'] > 1 ? true : false, 'S_ALBUMS_LIST' => $albums_list, 'S_ERROR' => sizeof($errors) ? true : false, 'ERROR_MSG' => sizeof($errors) ? implode('<br />', $errors) : ''));
                return;
                break;
        }
        // Default management page
        if (!$this->parent_id) {
            $navigation = $user->lang['GALLERY_INDEX'];
        } else {
            $navigation = '<a href="' . $this->u_action . '">' . $user->lang['GALLERY_INDEX'] . '</a>';
            $albums_nav = phpbb_gallery_album::get_branch(phpbb_gallery_album::PUBLIC_ALBUM, $this->parent_id, 'parents', 'descending');
            foreach ($albums_nav as $row) {
                if ($row['album_id'] == $this->parent_id) {
                    $navigation .= ' -&gt; ' . $row['album_name'];
                } else {
                    $navigation .= ' -&gt; <a href="' . $this->u_action . '&amp;parent_id=' . $row['album_id'] . '">' . $row['album_name'] . '</a>';
                }
            }
        }
        // Jumpbox
        $album_box = phpbb_gallery_album::get_albumbox(true, '', $this->parent_id, false, false);
        if ($action == 'sync' || $action == 'sync_album') {
            $template->assign_var('S_RESYNCED', true);
        }
        $sql = 'SELECT *
			FROM ' . GALLERY_ALBUMS_TABLE . "\n\t\t\tWHERE parent_id = {$this->parent_id}\n\t\t\t\tAND album_user_id = " . phpbb_gallery_album::PUBLIC_ALBUM . '
			ORDER BY left_id';
        $result = $db->sql_query($sql);
        if ($row = $db->sql_fetchrow($result)) {
            do {
                $album_type = $row['album_type'];
                if ($row['album_status'] == phpbb_gallery_album::STATUS_LOCKED) {
                    $folder_image = '<img src="images/icon_folder_lock.gif" alt="' . $user->lang['LOCKED'] . '" />';
                } else {
                    $folder_image = $row['left_id'] + 1 != $row['right_id'] ? '<img src="images/icon_subfolder.gif" alt="' . $user->lang['SUBALBUM'] . '" />' : '<img src="images/icon_folder.gif" alt="' . $user->lang['FOLDER'] . '" />';
                }
                $url = $this->u_action . "&amp;parent_id={$this->parent_id}&amp;a={$row['album_id']}";
                $template->assign_block_vars('albums', array('FOLDER_IMAGE' => $folder_image, 'ALBUM_IMAGE' => $row['album_image'] ? '<img src="' . phpbb_gallery_url::path('phpbb') . $row['album_image'] . '" alt="" />' : '', 'ALBUM_IMAGE_SRC' => $row['album_image'] ? phpbb_gallery_url::path('phpbb') . $row['album_image'] : '', 'ALBUM_NAME' => $row['album_name'], 'ALBUM_DESCRIPTION' => generate_text_for_display($row['album_desc'], $row['album_desc_uid'], $row['album_desc_bitfield'], $row['album_desc_options']), 'ALBUM_IMAGES' => $row['album_images'], 'S_ALBUM_POST' => $album_type != phpbb_gallery_album::TYPE_CAT ? true : false, 'U_ALBUM' => $this->u_action . '&amp;parent_id=' . $row['album_id'], 'U_MOVE_UP' => $url . '&amp;action=move_up', 'U_MOVE_DOWN' => $url . '&amp;action=move_down', 'U_EDIT' => $url . '&amp;action=edit', 'U_DELETE' => $url . '&amp;action=delete', 'U_SYNC' => $url . '&amp;action=sync'));
            } while ($row = $db->sql_fetchrow($result));
        } else {
            if ($this->parent_id) {
                $row = get_album_info($this->parent_id);
                $url = $this->u_action . '&amp;parent_id=' . $this->parent_id . '&amp;a=' . $row['album_id'];
                $template->assign_vars(array('S_NO_ALBUMS' => true, 'U_EDIT' => $url . '&amp;action=edit', 'U_DELETE' => $url . '&amp;action=delete', 'U_SYNC' => $url . '&amp;action=sync'));
            }
        }
        $db->sql_freeresult($result);
        $template->assign_vars(array('ERROR_MSG' => sizeof($errors) ? implode('<br />', $errors) : '', 'NAVIGATION' => $navigation, 'ALBUM_BOX' => $album_box, 'U_SEL_ACTION' => $this->u_action, 'U_ACTION' => $this->u_action . '&amp;parent_id=' . $this->parent_id, 'U_PROGRESS_BAR' => $this->u_action . '&amp;action=progress_bar', 'UA_PROGRESS_BAR' => addslashes($this->u_action . '&amp;action=progress_bar')));
    }
    function delete_album()
    {
        global $cache, $db, $template, $user;
        $s_hidden_fields = build_hidden_fields(array('album_id' => request_var('album_id', 0)));
        if (confirm_box(true)) {
            $album_id = request_var('album_id', 0);
            $left_id = $right_id = 0;
            $deleted_images_na = '';
            $deleted_albums = array();
            // Check for owner
            $sql = 'SELECT album_id, left_id, right_id, parent_id
				FROM ' . GALLERY_ALBUMS_TABLE . '
				WHERE album_user_id = ' . $user->data['user_id'] . '
				ORDER BY left_id ASC';
            $result = $db->sql_query($sql);
            while ($row = $db->sql_fetchrow($result)) {
                $album[] = $row;
                if ($row['album_id'] == $album_id) {
                    $left_id = $row['left_id'];
                    $right_id = $row['right_id'];
                    $parent_id = $row['parent_id'];
                }
            }
            $db->sql_freeresult($result);
            for ($i = 0, $end = count($album); $i < $end; $i++) {
                if ($left_id <= $album[$i]['left_id'] && $album[$i]['left_id'] <= $right_id) {
                    $deleted_albums[] = $album[$i]['album_id'];
                }
            }
            // $deleted_albums is the array of albums we are going to delete.
            // Now get the images in $deleted_images
            $sql = 'SELECT image_id, image_filename
				FROM ' . GALLERY_IMAGES_TABLE . '
				WHERE ' . $db->sql_in_set('image_album_id', $deleted_albums) . '
				ORDER BY image_id ASC';
            $result = $db->sql_query($sql);
            $deleted_images = $filenames = array();
            while ($row = $db->sql_fetchrow($result)) {
                $deleted_images[] = $row['image_id'];
                $filenames[(int) $row['image_id']] = $row['image_filename'];
            }
            // We have all image_ids in $deleted_images which are deleted.
            // Aswell as the album_ids in $deleted_albums.
            // So now drop the comments, ratings, images and albums.
            if (!empty($deleted_images)) {
                $sql = 'DELETE FROM ' . GALLERY_COMMENTS_TABLE . '
					WHERE ' . $db->sql_in_set('comment_image_id', $deleted_images);
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . GALLERY_REPORTS_TABLE . '
					WHERE ' . $db->sql_in_set('report_image_id', $deleted_images);
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . GALLERY_FAVORITES_TABLE . '
					WHERE ' . $db->sql_in_set('image_id', $deleted_images);
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . GALLERY_WATCH_TABLE . '
					WHERE ' . $db->sql_in_set('image_id', $deleted_images);
                $db->sql_query($sql);
                phpbb_gallery_image_base::delete_images($deleted_images, $filenames);
            }
            $sql = 'DELETE FROM ' . GALLERY_ALBUMS_TABLE . '
				WHERE ' . $db->sql_in_set('album_id', $deleted_albums);
            $db->sql_query($sql);
            // Make sure the overall image & comment count is correct...
            $sql = 'SELECT COUNT(image_id) AS num_images, SUM(image_comments) AS num_comments
				FROM ' . GALLERY_IMAGES_TABLE . '
				WHERE image_status <> ' . phpbb_gallery_image::STATUS_UNAPPROVED;
            $result = $db->sql_query($sql);
            $row = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);
            phpbb_gallery_config::set('num_images', $row['num_images']);
            phpbb_gallery_config::set('num_comments', $row['num_comments']);
            $num_images = sizeof($deleted_images);
            if ($num_images) {
                phpbb_gallery_hookup::add_image($user->data['user_id'], 0 - $num_images);
                phpbb_gallery::$user->update_images(0 - $num_images);
            }
            // Maybe we deleted all, so we have to empty phpbb_gallery::$user->get_data('personal_album_id')
            if (in_array(phpbb_gallery::$user->get_data('personal_album_id'), $deleted_albums)) {
                phpbb_gallery::$user->update_data(array('personal_album_id' => 0));
                phpbb_gallery_config::dec('num_pegas', 1);
                if (phpbb_gallery_config::get('newest_pega_album_id') == phpbb_gallery::$user->get_data('personal_album_id')) {
                    // Update the config for the statistic on the index
                    if (phpbb_gallery_config::get('num_pegas') > 0) {
                        $sql_array = array('SELECT' => 'a.album_id, u.user_id, u.username, u.user_colour', 'FROM' => array(GALLERY_ALBUMS_TABLE => 'a'), 'LEFT_JOIN' => array(array('FROM' => array(USERS_TABLE => 'u'), 'ON' => 'u.user_id = a.album_user_id')), 'WHERE' => 'a.album_user_id <> ' . phpbb_gallery_album::PUBLIC_ALBUM . ' AND a.parent_id = 0', 'ORDER_BY' => 'a.album_id DESC');
                        $sql = $db->sql_build_query('SELECT', $sql_array);
                        $result = $db->sql_query_limit($sql, 1);
                        $newest_pgallery = $db->sql_fetchrow($result);
                        $db->sql_freeresult($result);
                        phpbb_gallery_config::set('newest_pega_user_id', $newest_pgallery['user_id']);
                        phpbb_gallery_config::set('newest_pega_username', $newest_pgallery['username']);
                        phpbb_gallery_config::set('newest_pega_user_colour', $newest_pgallery['user_colour']);
                        phpbb_gallery_config::set('newest_pega_album_id', $newest_pgallery['album_id']);
                    } else {
                        phpbb_gallery_config::set('newest_pega_user_id', 0);
                        phpbb_gallery_config::set('newest_pega_username', '');
                        phpbb_gallery_config::set('newest_pega_user_colour', '');
                        phpbb_gallery_config::set('newest_pega_album_id', 0);
                    }
                }
            } else {
                // Solve the left_id right_id problem
                $delete_id = $right_id - ($left_id - 1);
                $sql = 'UPDATE ' . GALLERY_ALBUMS_TABLE . "\n\t\t\t\t\tSET left_id = left_id - {$delete_id}\n\t\t\t\t\tWHERE left_id > {$left_id}\n\t\t\t\t\t\tAND album_user_id = " . $user->data['user_id'];
                $db->sql_query($sql);
                $sql = 'UPDATE ' . GALLERY_ALBUMS_TABLE . "\n\t\t\t\t\tSET right_id = right_id - {$delete_id}\n\t\t\t\t\tWHERE right_id > {$right_id}\n\t\t\t\t\t\tAND album_user_id = " . $user->data['user_id'];
                $db->sql_query($sql);
            }
            $cache->destroy('sql', GALLERY_ALBUMS_TABLE);
            $cache->destroy('sql', GALLERY_COMMENTS_TABLE);
            $cache->destroy('sql', GALLERY_FAVORITES_TABLE);
            $cache->destroy('sql', GALLERY_IMAGES_TABLE);
            $cache->destroy('sql', GALLERY_RATES_TABLE);
            $cache->destroy('sql', GALLERY_REPORTS_TABLE);
            $cache->destroy('sql', GALLERY_WATCH_TABLE);
            $cache->destroy('_albums');
            phpbb_gallery_auth::set_user_permissions('all', '');
            trigger_error($user->lang['DELETED_ALBUMS'] . '<br /><br />
				<a href="' . ($parent_id ? phpbb_gallery_url::append_sid('phpbb', 'ucp', 'i=gallery&amp;mode=manage_albums&amp;action=manage&amp;parent_id=' . $parent_id) : append_sid('phpbb', 'ucp', 'i=gallery&amp;mode=manage_albums')) . '">' . $user->lang['BACK_TO_PREV'] . '</a>');
        } else {
            $album_id = request_var('album_id', 0);
            phpbb_gallery_album::check_user($album_id);
            confirm_box(false, 'DELETE_ALBUM', $s_hidden_fields);
        }
    }
    /**
     * Remove complete album
     *
     * borrowed from phpBB3
     * @author: phpBB Group
     * @function: delete_forum
     */
    public function delete_album($album_id, $action_images = 'delete', $action_subalbums = 'delete', $images_to_id = 0, $subalbums_to_id = 0)
    {
        global $db, $user, $cache;
        $album_data = phpbb_gallery_album::get_info($album_id);
        $errors = array();
        $log_action_images = $log_action_albums = $images_to_name = $subalbums_to_name = '';
        $album_ids = array($album_id);
        if ($action_images == 'delete') {
            $log_action_images = 'IMAGES';
            $errors = array_merge($errors, $this->delete_album_content($album_id));
        } else {
            if ($action_images == 'move') {
                if (!$images_to_id) {
                    $errors[] = $user->lang['NO_DESTINATION_ALBUM'];
                } else {
                    $log_action_images = 'MOVE_IMAGES';
                    $sql = 'SELECT album_name
					FROM ' . GALLERY_ALBUMS_TABLE . '
					WHERE album_id = ' . $images_to_id;
                    $result = $db->sql_query($sql);
                    $row = $db->sql_fetchrow($result);
                    $db->sql_freeresult($result);
                    if (!$row) {
                        $errors[] = $user->lang['NO_ALBUM'];
                    } else {
                        $images_to_name = $row['album_name'];
                        $errors = array_merge($errors, $this->move_album_content($album_id, $images_to_id));
                    }
                }
            }
        }
        if (sizeof($errors)) {
            return $errors;
        }
        if ($action_subalbums == 'delete') {
            $log_action_albums = 'ALBUMS';
            $rows = phpbb_gallery_album::get_branch($this->user_id, $album_id, 'children', 'descending', false);
            foreach ($rows as $row) {
                $album_ids[] = $row['album_id'];
                $errors = array_merge($errors, $this->delete_album_content($row['album_id']));
            }
            if (sizeof($errors)) {
                return $errors;
            }
            $diff = sizeof($album_ids) * 2;
            $sql = 'DELETE FROM ' . GALLERY_ALBUMS_TABLE . '
				WHERE ' . $db->sql_in_set('album_id', $album_ids);
            $db->sql_query($sql);
        } else {
            if ($action_subalbums == 'move') {
                if (!$subalbums_to_id) {
                    $errors[] = $user->lang['NO_DESTINATION_ALBUM'];
                } else {
                    $log_action_albums = 'MOVE_ALBUMS';
                    $sql = 'SELECT album_name
					FROM ' . GALLERY_ALBUMS_TABLE . '
					WHERE album_id = ' . $subalbums_to_id;
                    $result = $db->sql_query($sql);
                    $row = $db->sql_fetchrow($result);
                    $db->sql_freeresult($result);
                    if (!$row) {
                        $errors[] = $user->lang['NO_ALBUM'];
                    } else {
                        $subalbums_to_name = $row['album_name'];
                        $sql = 'SELECT album_id
						FROM ' . GALLERY_ALBUMS_TABLE . "\n\t\t\t\t\t\tWHERE parent_id = {$album_id}";
                        $result = $db->sql_query($sql);
                        while ($row = $db->sql_fetchrow($result)) {
                            $this->move_album($row['album_id'], $subalbums_to_id);
                        }
                        $db->sql_freeresult($result);
                        // Grab new album data for correct tree updating later
                        $album_data = phpbb_gallery_album::get_info($album_id);
                        $sql = 'UPDATE ' . GALLERY_ALBUMS_TABLE . "\n\t\t\t\t\t\tSET parent_id = {$subalbums_to_id}\n\t\t\t\t\t\tWHERE parent_id = {$album_id}\n\t\t\t\t\t\t\tAND album_user_id = " . $this->user_id;
                        $db->sql_query($sql);
                        $diff = 2;
                        $sql = 'DELETE FROM ' . GALLERY_ALBUMS_TABLE . "\n\t\t\t\t\t\tWHERE album_id = {$album_id}";
                        $db->sql_query($sql);
                    }
                }
                if (sizeof($errors)) {
                    return $errors;
                }
            } else {
                $diff = 2;
                $sql = 'DELETE FROM ' . GALLERY_ALBUMS_TABLE . "\n\t\t\t\tWHERE album_id = {$album_id}";
                $db->sql_query($sql);
            }
        }
        // Resync tree
        $sql = 'UPDATE ' . GALLERY_ALBUMS_TABLE . "\n\t\t\tSET right_id = right_id - {$diff}\n\t\t\tWHERE left_id < {$album_data['right_id']} AND right_id > {$album_data['right_id']}\n\t\t\t\tAND album_user_id = " . $this->user_id;
        $db->sql_query($sql);
        $sql = 'UPDATE ' . GALLERY_ALBUMS_TABLE . "\n\t\t\tSET left_id = left_id - {$diff}, right_id = right_id - {$diff}\n\t\t\tWHERE left_id > {$album_data['right_id']}\n\t\t\t\tAND album_user_id = " . $this->user_id;
        $db->sql_query($sql);
        $log_action = implode('_', array($log_action_images, $log_action_albums));
        /**
         * Log what we did
         */
        switch ($log_action) {
            case 'MOVE_IMAGES_MOVE_ALBUMS':
                add_log('admin', 'LOG_ALBUM_DEL_MOVE_IMAGES_MOVE_ALBUMS', $images_to_name, $subalbums_to_name, $album_data['album_name']);
                break;
            case 'MOVE_IMAGES_ALBUMS':
                add_log('admin', 'LOG_ALBUM_DEL_MOVE_IMAGES_ALBUMS', $images_to_name, $album_data['album_name']);
                break;
            case 'IMAGES_MOVE_ALBUMS':
                add_log('admin', 'LOG_ALBUM_DEL_IMAGES_MOVE_ALBUMS', $subalbums_to_name, $album_data['album_name']);
                break;
            case '_MOVE_ALBUMS':
                add_log('admin', 'LOG_ALBUM_DEL_MOVE_ALBUMS', $subalbums_to_name, $album_data['album_name']);
                break;
            case 'MOVE_IMAGES_':
                add_log('admin', 'LOG_ALBUM_DEL_MOVE_IMAGES', $images_to_name, $album_data['album_name']);
                break;
            case 'IMAGES_ALBUMS':
                add_log('admin', 'LOG_ALBUM_DEL_IMAGES_ALBUMS', $album_data['album_name']);
                break;
            case '_ALBUMS':
                add_log('admin', 'LOG_ALBUM_DEL_ALBUMS', $album_data['album_name']);
                break;
            case 'IMAGES_':
                add_log('admin', 'LOG_ALBUM_DEL_IMAGES', $album_data['album_name']);
                break;
            default:
                add_log('admin', 'LOG_ALBUM_DEL_ALBUM', $album_data['album_name']);
                break;
        }
        phpbb_gallery_auth::set_user_permissions('all', '');
        return $errors;
    }
 /**
  * Remove a user/s from a given group.
  */
 public static function group_user_del($group_id, $user_id_ary)
 {
     phpbb_gallery_auth::set_user_permissions($user_id_ary);
 }
    /**
     * Handles copying permissions from one album to others
     */
    function copy_album_permissions()
    {
        global $cache, $db, $template, $user;
        $submit = isset($_POST['submit']) ? true : false;
        if ($submit) {
            $src = request_var('src_album_id', 0);
            $dest = request_var('dest_album_ids', array(0));
            $sql = 'SELECT album_id
				FROM ' . GALLERY_ALBUMS_TABLE . '
				WHERE album_id = ' . $src;
            $result = $db->sql_query($sql);
            $src = (int) $db->sql_fetchfield('album_id');
            $db->sql_freeresult($result);
            if (!$src) {
                trigger_error($user->lang['SELECTED_ALBUM_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING);
            }
            if (!sizeof($dest)) {
                trigger_error($user->lang['SELECTED_ALBUM_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING);
            }
            if (confirm_box(true)) {
                $sql = 'SELECT *
					FROM ' . GALLERY_PERMISSIONS_TABLE . '
					WHERE perm_album_id = ' . $src;
                $result = $db->sql_query($sql);
                while ($row = $db->sql_fetchrow($result)) {
                    foreach ($dest as $album_id) {
                        $perm_data[] = array('perm_role_id' => $row['perm_role_id'], 'perm_album_id' => $album_id, 'perm_user_id' => $row['perm_user_id'], 'perm_group_id' => $row['perm_group_id'], 'perm_system' => $row['perm_system']);
                    }
                }
                $db->sql_freeresult($result);
                $modscache_ary = array();
                $sql = 'SELECT * FROM ' . GALLERY_MODSCACHE_TABLE . '
					WHERE album_id = ' . $src;
                $result = $db->sql_query($sql);
                while ($row = $db->sql_fetchrow($result)) {
                    foreach ($dest as $album_id) {
                        $modscache_ary[] = array('album_id' => $album_id, 'user_id' => $row['user_id'], 'username' => $row['username'], 'group_id' => $row['group_id'], 'group_name' => $row['group_name'], 'display_on_index' => $row['display_on_index']);
                    }
                }
                $db->sql_freeresult($result);
                $sql = 'DELETE FROM ' . GALLERY_PERMISSIONS_TABLE . '
					WHERE ' . $db->sql_in_set('perm_album_id', $dest);
                $db->sql_query($sql);
                $sql = 'DELETE FROM ' . GALLERY_MODSCACHE_TABLE . '
					WHERE ' . $db->sql_in_set('album_id', $dest);
                $db->sql_query($sql);
                $db->sql_multi_insert(GALLERY_PERMISSIONS_TABLE, $perm_data);
                $db->sql_multi_insert(GALLERY_MODSCACHE_TABLE, $modscache_ary);
                $cache->destroy('sql', GALLERY_MODSCACHE_TABLE);
                $cache->destroy('sql', GALLERY_PERMISSIONS_TABLE);
                phpbb_gallery_auth::set_user_permissions('all', '');
                trigger_error($user->lang['COPY_PERMISSIONS_SUCCESSFUL'] . adm_back_link($this->u_action));
            } else {
                $s_hidden_fields = array('submit' => $submit, 'src_album_id' => $src, 'dest_album_ids' => $dest);
                $s_hidden_fields = build_hidden_fields($s_hidden_fields);
                confirm_box(false, $user->lang['COPY_PERMISSIONS_CONFIRM'], $s_hidden_fields);
            }
        }
        $template->assign_vars(array('S_ALBUM_OPTIONS' => phpbb_gallery_album::get_albumbox(true, ''), 'S_COPY_PERMISSIONS' => true));
    }