diff --git a/phpBB/adm/admin_attachments.php b/phpBB/adm/admin_attachments.php index a4e6ecfed1..b47f4a0e17 100644 --- a/phpBB/adm/admin_attachments.php +++ b/phpBB/adm/admin_attachments.php @@ -36,9 +36,6 @@ $submit = (isset($_POST['submit'])) ? true : false; $error = $notify = array(); -// Adjust the Upload Directory. Relative or absolute, this is the question here. -$upload_dir = ($config['upload_dir'][0] == '/' || ($config['upload_dir'][0] != '/' && $config['upload_dir'][1] == ':')) ? $config['upload_dir'] : $phpbb_root_path . $config['upload_dir']; - switch ($mode) { case 'extensions': @@ -310,7 +307,8 @@ if ($submit && $mode == 'orphan') foreach ($delete_files as $delete) { - phpbb_unlink($upload_dir . '/' . $delete); + phpbb_unlink($config['upload_dir'] . '/' . $delete); + phpbb_unlink($config['upload_dir'] . '/thumb_' . $delete); } if (sizeof($delete_files)) @@ -362,7 +360,7 @@ if ($submit && $mode == 'orphan') } else { - upload_file($row['post_id'], $row['topic_id'], $row['forum_id'], $upload_dir, $upload_list[$row['post_id']]); + upload_file($row['post_id'], $row['topic_id'], $row['forum_id'], $config['upload_dir'], $upload_list[$row['post_id']]); } } } @@ -467,20 +465,14 @@ if ($mode == 'ext_groups') - - - - - - - - - - - - - + + + + + + + - - - - - - - + + + + + + + = 1048576) ? 'mb' : (($row['max_filesize'] >= 1024) ? 'kb' : 'b'); @@ -552,7 +544,7 @@ if ($mode == 'ext_groups') $selected = ($edit_img == $img) ? ' selected="selected"' : ''; } - $filename_list .= ''; + $filename_list .= ''; } ?> @@ -583,7 +575,7 @@ if ($mode == 'ext_groups') if ($viewgroup && $viewgroup == $row['group_id']) { - $sql = 'SELECT comment, extension + $sql = 'SELECT extension FROM ' . EXTENSIONS_TABLE . " WHERE group_id = $viewgroup"; $e_result = $db->sql_query($sql); @@ -604,7 +596,7 @@ if ($mode == 'ext_groups') } ?> - +
lang['EXTENSION_GROUPS_TITLE']; ?>
 lang['EXTENSION_GROUP']; ?>  lang['SPECIAL_CATEGORY']; ?>  lang['ALLOWED']; ?>  lang['DOWNLOAD_MODE']; ?>  lang['UPLOAD_ICON']; ?>  lang['MAX_EXTGROUP_FILESIZE']; ?>  lang['ADD']; ?>  lang['EXTENSION_GROUP']; ?>  lang['SPECIAL_CATEGORY']; ?>  lang['ALLOWED']; ?>  lang['DOWNLOAD_MODE']; ?>  lang['UPLOAD_ICON']; ?>  lang['MAX_EXTGROUP_FILESIZE']; ?>  lang['ADD']; ?> 
@@ -509,13 +501,13 @@ if ($mode == 'ext_groups')
 lang['EXTENSION_GROUP']; ?>  lang['SPECIAL_CATEGORY']; ?>  lang['ALLOWED']; ?>  lang['DOWNLOAD_MODE']; ?>  lang['UPLOAD_ICON']; ?>  lang['MAX_EXTGROUP_FILESIZE']; ?>  lang['DELETE']; ?>  lang['EXTENSION_GROUP']; ?>  lang['SPECIAL_CATEGORY']; ?>  lang['ALLOWED']; ?>  lang['DOWNLOAD_MODE']; ?>  lang['UPLOAD_ICON']; ?>  lang['MAX_EXTGROUP_FILESIZE']; ?>  lang['DELETE']; ?> 
    
- - - - - - @@ -675,7 +661,7 @@ if ($mode == 'extensions') } ?> - +
lang['MANAGE_EXTENSIONS']; ?>
 lang['EXTENSION']; ?>   lang['EXTENSION_GROUP']; ?> 
    
- - - - - - - - - - - + + + + + = 1048576) ? $user->lang['MB'] : ( ($filesize >= 1024) ? $user->lang['KB'] : $user->lang['BYTES'] ); $filesize = ($filesize >= 1048576) ? round((round($filesize / 1048576 * 100) / 100), 2) : (($filesize >= 1024) ? round((round($filesize / 1024 * 100) / 100), 2) : $filesize); ?> - - - - - - - + + + + + + + affected_rows()); + set_config('num_users', $config['num_users'] + $db->affected_rows(), true); } $log_action = ($activate) ? 'log_index_activate' : 'log_index_delete'; @@ -224,8 +224,8 @@ elseif ($pane == 'right') trigger_error($user->lang['NO_ADMIN']); } - set_config('record_online_users', 1); - set_config('record_online_date', time()); + set_config('record_online_users', 1, true); + set_config('record_online_date', time(), true); add_log('admin', 'LOG_RESET_ONLINE'); break; @@ -242,7 +242,7 @@ elseif ($pane == 'right') $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); - set_config('num_posts', $row['stat']); + set_config('num_posts', (int) $row['stat'], true); $sql = 'SELECT COUNT(topic_id) AS stat FROM ' . TOPICS_TABLE . ' @@ -251,7 +251,7 @@ elseif ($pane == 'right') $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); - set_config('num_topics', $row['stat']); + set_config('num_topics', (int) $row['stat'], true); $sql = 'SELECT COUNT(user_id) AS stat FROM ' . USERS_TABLE . ' @@ -260,7 +260,21 @@ elseif ($pane == 'right') $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); - set_config('num_users', $row['stat']); + set_config('num_users', (int) $row['stat'], true); + + $sql = 'SELECT COUNT(attach_id) as stat + FROM ' . ATTACHMENTS_TABLE; + $result = $db->sql_query($sql); + + set_config('num_files', (int) $db->sql_fetchfield('stat', 0, $result), true); + $db->sql_freeresult($result); + + $sql = 'SELECT SUM(filesize) as stat + FROM ' . ATTACHMENTS_TABLE; + $result = $db->sql_query($sql); + + set_config('upload_dir_size', (int) $db->sql_fetchfield('stat', 0, $result), true); + $db->sql_freeresult($result); add_log('admin', 'LOG_RESYNC_STATS'); break; @@ -271,7 +285,7 @@ elseif ($pane == 'right') trigger_error($user->lang['NO_ADMIN']); } - set_config('board_startdate', time() - 1); + set_config('board_startdate', time() - 1, true); add_log('admin', 'LOG_RESET_DATE'); break; } @@ -280,6 +294,7 @@ elseif ($pane == 'right') $total_posts = $config['num_posts']; $total_topics = $config['num_topics']; $total_users = $config['num_users']; + $total_files = $config['num_files']; $start_date = $user->format_date($config['board_startdate']); @@ -288,6 +303,9 @@ elseif ($pane == 'right') $posts_per_day = sprintf('%.2f', $total_posts / $boarddays); $topics_per_day = sprintf('%.2f', $total_topics / $boarddays); $users_per_day = sprintf('%.2f', $total_users / $boarddays); + $files_per_day = sprintf('%.2f', $total_files / $boarddays); + + $upload_dir_size = ($config['upload_dir_size'] >= 1048576) ? sprintf('%.2f ' . $user->lang['MB'], ($config['upload_dir_size'] / 1048576)) : (($config['upload_dir_size'] >= 1024) ? sprintf('%.2f ' . $user->lang['KB'], ($config['upload_dir_size'] / 1024)) : sprintf('%.2f ' . $user->lang['BYTES'], $config['upload_dir_size'])); $avatar_dir_size = 0; @@ -305,19 +323,7 @@ elseif ($pane == 'right') // This bit of code translates the avatar directory size into human readable format // Borrowed the code from the PHP.net annoted manual, origanally written by: // Jesse (jesse@jess.on.ca) - if ($avatar_dir_size >= 1048576) - { - $avatar_dir_size = round($avatar_dir_size / 1048576 * 100) / 100 . ' MB'; - } - else if ($avatar_dir_size >= 1024) - { - $avatar_dir_size = round($avatar_dir_size / 1024 * 100) / 100 . ' KB'; - } - else - { - $avatar_dir_size = $avatar_dir_size . ' Bytes'; - } - + $avatar_dir_size = ($avatar_dir_size >= 1048576) ? sprintf('%.2f ' . $user->lang['MB'], ($avatar_dir_size / 1048576)) : (($avatar_dir_size >= 1024) ? sprintf('%.2f ' . $user->lang['KB'], ($avatar_dir_size / 1024)) : sprintf('%.2f ' . $user->lang['BYTES'], $avatar_dir_size)); } else { @@ -340,6 +346,11 @@ elseif ($pane == 'right') $users_per_day = $total_users; } + if ($files_per_day > $total_files) + { + $files_per_day = $total_files; + } + // DB size ... MySQL only // This code is heavily influenced by a similar routine // in phpMyAdmin 2.2.0 @@ -403,7 +414,7 @@ elseif ($pane == 'right') if (is_int($dbsize)) { - $dbsize = ($dbsize >= 1048576) ? sprintf('%.2f MB', ($dbsize / 1048576)) : (($dbsize >= 1024) ? sprintf('%.2f KB', ($dbsize / 1024)) : sprintf('%.2f Bytes', $dbsize)); + $dbsize = ($dbsize >= 1048576) ? sprintf('%.2f ' . $user->lang['MB'], ($dbsize / 1048576)) : (($dbsize >= 1024) ? sprintf('%.2f ' . $user->lang['KB'], ($dbsize / 1024)) : sprintf('%.2f ' . $user->lang['BYTES'], $dbsize)); } adm_page_header($user->lang['ADMIN_INDEX']); @@ -453,6 +464,12 @@ elseif ($pane == 'right') + + + + + + @@ -462,8 +479,14 @@ elseif ($pane == 'right') + + + + + + diff --git a/phpBB/common.php b/phpBB/common.php index 36cc0f9833..bd595b65c5 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -256,6 +256,9 @@ if (time() - $config['cache_interval'] >= $config['cache_last_gc']) } */ +// Adjust storage path's +$config['upload_dir'] = ($config['upload_dir']{0} == '/' || ($config['upload_dir']{0} != '/' && $config['upload_dir']{1} == ':')) ? $config['upload_dir'] : $phpbb_root_path . $config['upload_dir']; + // Handle email/cron queue. if (time() - $config['queue_interval'] >= $config['last_queue_run'] && !defined('IN_ADMIN')) { diff --git a/phpBB/download.php b/phpBB/download.php index c728777d02..ad82f0534c 100644 --- a/phpBB/download.php +++ b/phpBB/download.php @@ -78,11 +78,10 @@ if (!in_array($attachment['extension'], $extensions['_allowed_'])) } $download_mode = (int) $extensions[$attachment['extension']]['download_mode']; -$upload_dir = ($config['upload_dir'][0] == '/' || ($config['upload_dir'][0] != '/' && $config['upload_dir'][1] == ':')) ? $config['upload_dir'] : $phpbb_root_path . $config['upload_dir']; if ($thumbnail) { - $attachment['physical_filename'] = 'thumbs/t_' . $attachment['physical_filename']; + $attachment['physical_filename'] = 'thumb_' . $attachment['physical_filename']; } else { @@ -96,16 +95,16 @@ else // Determine the 'presenting'-method if ($download_mode == PHYSICAL_LINK) { - if (!@is_dir($upload_dir)) + if (!@is_dir($config['upload_dir'])) { trigger_error($user->lang['PHYSICAL_DOWNLOAD_NOT_POSSIBLE']); } - redirect($upload_dir . '/' . $attachment['physical_filename']); + redirect($config['upload_dir'] . '/' . $attachment['physical_filename']); } else { - send_file_to_browser($attachment, $upload_dir, $extensions[$attachment['extension']]['display_cat']); + send_file_to_browser($attachment, $config['upload_dir'], $extensions[$attachment['extension']]['display_cat']); exit; } diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 7e0abc37cf..53317d5448 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -514,7 +514,7 @@ function delete_posts($where_type, $where_ids, $auto_sync = TRUE) // resync => set this to false if you are deleting posts or topics... function delete_attachments($mode, $ids, $resync = TRUE) { - global $db; + global $db, $config; if (is_array($ids)) { @@ -533,7 +533,7 @@ function delete_attachments($mode, $ids, $resync = TRUE) // Collect post and topics ids for later use if ($mode == 'attach' || $mode == 'user' || ($mode == 'topic' && $resync)) { - $sql = 'SELECT post_id, topic_id, physical_filename, thumbnail + $sql = 'SELECT post_id, topic_id, physical_filename, thumbnail, filesize FROM ' . ATTACHMENTS_TABLE . ' WHERE ' . $sql_id . ' IN (' . implode(', ', $ids) . ')'; $result = $db->sql_query($sql); @@ -542,14 +542,14 @@ function delete_attachments($mode, $ids, $resync = TRUE) { $post_ids[] = $row['post_id']; $topic_ids[] = $row['topic_id']; - $physical[] = array('filename' => $row['physical_filename'], 'thumbnail' => $row['thumbnail']); + $physical[] = array('filename' => $row['physical_filename'], 'thumbnail' => $row['thumbnail'], 'filesize' => $row['filesize']); } $db->sql_freeresult($result); } if ($mode == 'post') { - $sql = 'SELECT topic_id, physical_filename, thumbnail + $sql = 'SELECT topic_id, physical_filename, thumbnail, filesize FROM ' . ATTACHMENTS_TABLE . ' WHERE post_id IN (' . implode(', ', $ids) . ')'; $result = $db->sql_query($sql); @@ -557,7 +557,7 @@ function delete_attachments($mode, $ids, $resync = TRUE) while ($row = $db->sql_fetchrow($result)) { $topic_ids[] = $row['topic_id']; - $physical[] = array('filename' => $row['physical_filename'], 'thumbnail' => $row['thumbnail']); + $physical[] = array('filename' => $row['physical_filename'], 'thumbnail' => $row['thumbnail'], 'filesize' => $row['filesize']); } $db->sql_freeresult($result); } @@ -567,14 +567,22 @@ function delete_attachments($mode, $ids, $resync = TRUE) $num_deleted = $db->sql_affectedrows(); // Delete attachments from filesystem + $space_removed = $files_removed = 0; foreach ($physical as $file_ary) { - phpbb_unlink($file_ary['filename'], 'file'); + if (phpbb_unlink($file_ary['filename'], 'file')) + { + $space_removed += $file_ary['filesize']; + $files_removed++; + } + if ($file_ary['thumbnail']) { phpbb_unlink($file_ary['filename'], 'thumbnail'); } } + set_config('upload_dir_size', $config['upload_dir_size'] - $space_removed, true); + set_config('num_files', $config['num_files'] - $files_removed, true); if ($mode == 'topic' && !$resync) { @@ -712,9 +720,7 @@ function phpbb_unlink($filename, $mode = 'file') { global $config, $user, $phpbb_root_path; - $upload_dir = ($config['upload_dir'][0] == '/' || ($config['upload_dir'][0] != '/' && $config['upload_dir'][1] == ':')) ? $config['upload_dir'] : $phpbb_root_path . $config['upload_dir']; - - $filename = ($mode == 'thumbnail') ? $upload_dir . '/thumbs/t_' . $filename : $upload_dir . '/' . $filename; + $filename = ($mode == 'thumbnail') ? $config['upload_dir'] . '/thumb_' . $filename : $config['upload_dir'] . '/' . $filename; $deleted = @unlink($filename); if (file_exists($filename)) @@ -724,6 +730,7 @@ function phpbb_unlink($filename, $mode = 'file') if (file_exists($filename)) { + $filename = realpath($filename); @chmod($filename, 0777); if (!($deleted = @unlink($filename))) { diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index e1308311c4..a8a0a80244 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -295,7 +295,6 @@ function display_attachments($blockname, $attachment_data, &$update_count, $forc // $starttime = explode(' ', microtime()); // $starttime = $starttime[1] + $starttime[0]; - $upload_dir = ($config['upload_dir'][0] == '/' || ($config['upload_dir'][0] != '/' && $config['upload_dir'][1] == ':')) ? $config['upload_dir'] : $phpbb_root_path . $config['upload_dir']; $blocks = array(WM_CAT => 'WM_STREAM', RM_CAT => 'RM_STREAM', THUMB_CAT => 'THUMBNAIL', IMAGE_CAT => 'IMAGE'); if (!isset($attachment_tpl)) @@ -349,8 +348,8 @@ function display_attachments($blockname, $attachment_data, &$update_count, $forc { // Some basics... $attachment['extension'] = strtolower(trim($attachment['extension'])); - $filename = $upload_dir . '/' . $attachment['physical_filename']; - $thumbnail_filename = $upload_dir . '/thumbs/t_' . $attachment['physical_filename']; + $filename = $config['upload_dir'] . '/' . $attachment['physical_filename']; + $thumbnail_filename = $config['upload_dir'] . '/thumb_' . $attachment['physical_filename']; $upload_image = ''; diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 6468a15508..db8bf52973 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -140,8 +140,7 @@ function update_last_post_information($type, $id) switch ($type) { case 'forum': - // Anyone having any ideas how to optimize this? - // This query is very time consuming on large boards (already optimized this by 50%) + // Splitted query - performance gain $sql = 'SELECT MAX(post_time) AS max_post_time FROM ' . POSTS_TABLE . ' WHERE post_approved = 1 AND forum_id = ' . $id; @@ -210,7 +209,7 @@ function upload_attachment($filename, $local = false, $local_storage = '') $file = (!$local) ? $_FILES['fileupload']['tmp_name'] : $local_storage; $filedata['mimetype'] = (!$local) ? $_FILES['fileupload']['type'] : 'application/octet-stream'; - // Opera add the name to the mime type + // Opera adds the name to the mime type $filedata['mimetype'] = ( strstr($filedata['mimetype'], '; name') ) ? str_replace(strstr($filedata['mimetype'], '; name'), '', $filedata['mimetype']) : $filedata['mimetype']; $filedata['extension'] = array_pop(explode('.', strtolower($filename))); $filedata['filesize'] = (!@filesize($file)) ? intval($_FILES['size']) : @filesize($file); @@ -254,7 +253,7 @@ function upload_attachment($filename, $local = false, $local_storage = '') { if ($width > $config['img_max_width'] || $height > $config['img_max_height']) { - $filedata['error'][] = sprintf($user->lang['Error_imagesize'], $config['img_max_width'], $config['img_max_height']); + $filedata['error'][] = sprintf($user->lang['ERROR_IMAGESIZE'], $config['img_max_width'], $config['img_max_height']); $filedata['post_attach'] = FALSE; return $filedata; } @@ -262,7 +261,7 @@ function upload_attachment($filename, $local = false, $local_storage = '') } // check Filesize - if ($allowed_filesize != 0 && $filedata['filesize'] > $allowed_filesize && !$auth->acl_gets('m_', 'a_')) + if ($allowed_filesize && $filedata['filesize'] > $allowed_filesize && !$auth->acl_gets('m_', 'a_')) { $size_lang = ($allowed_filesize >= 1048576) ? $user->lang['MB'] : ( ($allowed_filesize >= 1024) ? $user->lang['KB'] : $user->lang['BYTES'] ); @@ -274,9 +273,9 @@ function upload_attachment($filename, $local = false, $local_storage = '') } // Check our complete quota - if ($config['attachment_quota'] != 0) + if ($config['attachment_quota']) { - if ($config['total_filesize'] + $filedata['filesize'] > $config['attachment_quota']) + if ($config['upload_dir_size'] + $filedata['filesize'] > $config['attachment_quota']) { $filedata['error'][] = $user->lang['ATTACH_QUOTA_REACHED']; $filedata['post_attach'] = FALSE; @@ -284,6 +283,20 @@ function upload_attachment($filename, $local = false, $local_storage = '') } } +/* + // TODO + // Check Free Disk Space - need testing under windows [commented out] + if ($free_space = disk_free_space($config['upload_dir'])) + { + if ($free_space <= $filedata['filesize']) + { + $filedata['error'][] = $user->lang['ATTACH_QUOTA_REACHED']; + $filedata['post_attach'] = FALSE; + return $filedata; + } + } +*/ + $filedata['thumbnail'] = 0; // Prepare Values @@ -321,52 +334,51 @@ function move_uploaded_attachment($upload_mode, $source_filename, &$filedata) { global $user, $config, $phpbb_root_path; - $upload_dir = ($config['upload_dir'][0] == '/' || ($config['upload_dir'][0] != '/' && $config['upload_dir'][1] == ':')) ? $config['upload_dir'] : $phpbb_root_path . $config['upload_dir']; $destination_filename = $filedata['destination_filename']; $thumbnail = (isset($filedata['thumbnail'])) ? $filedata['thumbnail'] : FALSE; switch ($upload_mode) { case 'copy': - if ( !@copy($source_filename, $upload_dir . '/' . $destination_filename) ) + if ( !@copy($source_filename, $config['upload_dir'] . '/' . $destination_filename) ) { - if ( !@move_uploaded_file($source_filename, $upload_dir . '/' . $destination_filename) ) + if ( !@move_uploaded_file($source_filename, $config['upload_dir'] . '/' . $destination_filename) ) { - return sprintf($user->lang['GENERAL_UPLOAD_ERROR'], $upload_dir . '/' . $destination_filename); + return sprintf($user->lang['GENERAL_UPLOAD_ERROR'], $config['upload_dir'] . '/' . $destination_filename); } } - @chmod($upload_dir . '/' . $destination_filename, 0666); + @chmod($config['upload_dir'] . '/' . $destination_filename, 0666); break; case 'move': - if ( !@move_uploaded_file($source_filename, $upload_dir . '/' . $destination_filename) ) + if ( !@move_uploaded_file($source_filename, $config['upload_dir'] . '/' . $destination_filename) ) { - if ( !@copy($source_file, $upload_dir . '/' . $destination_filename) ) + if ( !@copy($source_filename, $config['upload_dir'] . '/' . $destination_filename) ) { - return sprintf($user->lang['GENERAL_UPLOAD_ERROR'], $upload_dir . '/' . $destination_filename); + return sprintf($user->lang['GENERAL_UPLOAD_ERROR'], $config['upload_dir'] . '/' . $destination_filename); } } - @chmod($upload_dir . '/' . $destination_filename, 0666); + @chmod($config['upload_dir'] . '/' . $destination_filename, 0666); break; case 'local': - if (!@copy($source_filename, $upload_dir . '/' . $destination_filename)) + if (!@copy($source_filename, $config['upload_dir'] . '/' . $destination_filename)) { - return sprintf($user->lang['GENERAL_UPLOAD_ERROR'], $upload_dir . '/' . $destination_filename); + return sprintf($user->lang['GENERAL_UPLOAD_ERROR'], $config['upload_dir'] . '/' . $destination_filename); } - @chmod($upload_dir . '/' . $destination_filename, 0666); + @chmod($config['upload_dir'] . '/' . $destination_filename, 0666); @unlink($source_filename); break; } if ($filedata['thumbnail']) { - $source = $upload_dir . '/' . $destination_filename; - $destination = $upload_dir . '/thumbs/t_' . $destination_filename; + $source = $config['upload_dir'] . '/' . $destination_filename; + $destination = $config['upload_dir'] . '/thumb_' . $destination_filename; - if (!create_thumbnail($source, $destination, $filedata['mimetype'])) + if (!create_thumbnail($source_filename, $destination_filename, $filedata['mimetype'])) { - if (!create_thumbnail($source_filename, $destination_filename, $filedata['mimetype'])) + if (!create_thumbnail($source, $destination, $filedata['mimetype'])) { $filedata['thumbnail'] = 0; } @@ -518,8 +530,9 @@ function create_thumbnail($source, $new_file, $mimetype) return FALSE; } - @chmod($new_file, 0666); + @chmod($new_file, 0666); + return TRUE; } diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index 2de8b424c3..83518123b6 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -741,7 +741,7 @@ class parse_message if ($this->attachment_data[$index]['thumbnail']) { - phpbb_unlink('t_' . $this->attachment_data[$index]['physical_filename'], 'thumbnail'); + phpbb_unlink($this->attachment_data[$index]['physical_filename'], 'thumbnail'); } } else diff --git a/phpBB/includes/ucp/ucp_main.php b/phpBB/includes/ucp/ucp_main.php index bcaabdceb8..e5a566e9d0 100644 --- a/phpBB/includes/ucp/ucp_main.php +++ b/phpBB/includes/ucp/ucp_main.php @@ -506,13 +506,13 @@ class ucp_main extends module $draft_id = ($edit) ? intval($_REQUEST['edit']) : 0; $s_hidden_fields = ($edit) ? '' : ''; - $draft_title = $post_subject = $post_message = ''; + $draft_subject = $draft_message = ''; if ($_POST['delete']) { - $drafts = (isset($_POST['d'])) ? implode(', ', array_map('intval', array_keys($_POST['d']))) : false; + $drafts = (isset($_POST['d'])) ? implode(', ', array_map('intval', array_keys($_POST['d']))) : ''; - if ($drafts) + if (!empty($drafts)) { $sql = 'DELETE FROM ' . DRAFTS_TABLE . " WHERE draft_id IN ($drafts) @@ -528,16 +528,15 @@ class ucp_main extends module if ($submit && $edit) { - $draft_title = (isset($_POST['draft_title'])) ? trim(htmlspecialchars($_POST['draft_title'])) : ''; - $post_subject = (isset($_POST['subject'])) ? trim(htmlspecialchars($_POST['subject'])) : ''; - $post_message = (isset($_POST['message'])) ? trim(str_replace(array('\\\'', '\\"', '\\0', '\\\\'), array('\'', '"', '\0', '\\'), htmlspecialchars($_POST['message']))) : ''; + $draft_subject = preg_replace('#&(\#[0-9]+;)#', '&\1', request_var('subject', '')); + $draft_message = (isset($_POST['message'])) ? htmlspecialchars(trim(str_replace(array('\\\'', '\\"', '\\0', '\\\\'), array('\'', '"', '\0', '\\'), $_POST['message']))) : ''; + $draft_message = preg_replace('#&(\#[0-9]+;)#', '&\1', $draft_message); - if ($post_message != '' && $draft_title != '') + if ($draft_message != '' && $draft_subject != '') { $draft_row = array( - 'title' => $draft_title, - 'post_subject' => $post_subject, - 'post_message' => $post_message + 'draft_subject' => $draft_subject, + 'draft_message' => $draft_message ); $sql = 'UPDATE ' . DRAFTS_TABLE . ' @@ -553,18 +552,19 @@ class ucp_main extends module } else { - $template->assign_var('ERROR', ($post_message == '') ? $user->lang['EMPTY_DRAFT'] : (($draft_title == '') ? $user->lang['EMPTY_DRAFT_TITLE'] : '')); + $template->assign_var('ERROR', ($draft_message == '') ? $user->lang['EMPTY_DRAFT'] : (($draft_subject == '') ? $user->lang['EMPTY_DRAFT_TITLE'] : '')); } } - $sql = 'SELECT * - FROM ' . DRAFTS_TABLE . ' - WHERE user_id = ' . $user->data['user_id'] . ' ' . - (($edit) ? "AND draft_id = $draft_id" : '') . ' + $sql = 'SELECT d.*, f.forum_name + FROM ' . DRAFTS_TABLE . ' d, ' . FORUMS_TABLE . ' f + WHERE d.user_id = ' . $user->data['user_id'] . ' ' . + (($edit) ? "AND d.draft_id = $draft_id" : '') . ' + AND f.forum_id = d.forum_id ORDER BY save_time DESC'; $result = $db->sql_query($sql); - $draftrows = $topic_ids = $topic_rows = array(); + $draftrows = $topic_ids = array(); while ($row = $db->sql_fetchrow($result)) { @@ -601,42 +601,41 @@ class ucp_main extends module $row_count = 0; foreach ($draftrows as $draft) { - $title = $draft['title']; - if (strlen($title) > 30) + $link_topic = $link_forum = 0; + $insert_url = $view_url = $title = ''; + + if (isset($topic_rows[$draft['topic_id']]) && $auth->acl_get('f_read', $topic_rows[$draft['topic_id']]['forum_id'])) { - $title = substr($title, 0, 27) . '...'; + $link_topic = true; + $view_url = "viewtopic.$phpEx$SID&f=" . $topic_rows[$draft['topic_id']]['forum_id'] . "&t=" . $draft['topic_id']; + $title = $topic_rows[$draft['topic_id']]['topic_title']; + + $insert_url = "posting.$phpEx$SID&f=" . $topic_rows[$draft['topic_id']]['forum_id'] . '&t=' . $draft['topic_id'] . '&mode=reply&d=' . $draft['draft_id']; + } + else if ($auth->acl_get('f_read', $draft['forum_id'])) + { + $link_forum = true; + $view_url = "viewforum.$phpEx$SID&f=" . $draft['forum_id']; + $title = $draft['forum_name']; + + $insert_url = "posting.$phpEx$SID&f=" . $draft['forum_id'] . '&mode=post&d=' . $draft['draft_id']; } - if (isset($topic_rows[$draft['topic_id']])) - { - $view_topic_url = ($auth->acl_get('f_read', $topic_rows[$draft['topic_id']]['forum_id'])) ? "viewtopic.$phpEx$SID&f=" . $topic_rows[$draft['topic_id']]['forum_id'] . "&t=" . $draft['topic_id'] : ''; - } - else - { - $view_topic_url = ''; - } - $topic_title = ($view_topic_url != '') ? $topic_rows[$draft['topic_id']]['topic_title'] : ''; - - if (strlen($topic_title) > 30) - { - $topic_title = substr($topic_title, 0, 27) . '...'; - } - $template_row = array( 'DRAFT_ID' => $draft['draft_id'], 'DATE' => $user->format_date($draft['save_time']), + 'DRAFT_MESSAGE' => ($submit) ? $draft_message : $draft['draft_message'], + 'DRAFT_SUBJECT' => ($submit) ? $draft_subject : $draft['draft_subject'], + 'TITLE' => $title, - 'TOPIC_TITLE' => ($view_topic_url != '') ? $topic_title : '', - - 'DRAFT_TITLE' => ($submit) ? $draft_title : $draft['title'], - 'POST_MESSAGE' => ($submit) ? $post_message : $draft['post_message'], - 'POST_SUBJECT' => ($submit) ? $post_subject : $draft['post_subject'], - - 'U_VIEW_TOPIC' => $view_topic_url, + 'U_VIEW' => $view_url, 'U_VIEW_EDIT' => "ucp.$phpEx$SID&i=$id&mode=$mode&edit=" . $draft['draft_id'], + 'U_INSERT' => $insert_url, 'S_ROW_COUNT' => $row_count++, - 'S_HIDDEN_FIELDS' => $s_hidden_fields + 'S_HIDDEN_FIELDS' => $s_hidden_fields, + 'S_LINK_TOPIC' => $link_topic, + 'S_LINK_FORUM' => $link_forum ); if ($edit) @@ -659,7 +658,7 @@ class ucp_main extends module 'S_DISPLAY_MARK_ALL' => ($mode == 'watched' || ($mode == 'drafts' && !isset($_GET['edit']))) ? true : false, 'S_HIDDEN_FIELDS' => $s_hidden_fields, - 'S_UCP_ACTION' => "ucp.$phpEx$SID&i=$id&mode=$mode") + 'S_UCP_ACTION' => $phpbb_root_path . "ucp.$phpEx$SID&i=$id&mode=$mode") ); $this->display($user->lang['UCP_MAIN'], 'ucp_main_' . $mode . '.html'); diff --git a/phpBB/install/schemas/mysql_schema.sql b/phpBB/install/schemas/mysql_schema.sql index 288e2ab5ab..64af877777 100644 --- a/phpBB/install/schemas/mysql_schema.sql +++ b/phpBB/install/schemas/mysql_schema.sql @@ -4,7 +4,7 @@ # $Id$ # -# Table: phpbb_attachments_desc +# Table: phpbb_attachments CREATE TABLE phpbb_attachments ( attach_id mediumint(8) UNSIGNED NOT NULL auto_increment, post_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, @@ -146,12 +146,12 @@ CREATE TABLE phpbb_drafts ( draft_id mediumint(8) UNSIGNED NOT NULL auto_increment, user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, topic_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, + forum_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, save_time int(11) UNSIGNED DEFAULT '0' NOT NULL, - title varchar(60) DEFAULT '' NOT NULL, - post_subject varchar(60), - post_message text DEFAULT '' NOT NULL, + draft_subject varchar(60), + draft_message text DEFAULT '' NOT NULL, PRIMARY KEY (draft_id), - KEY user_id (user_id,save_time) + KEY save_time (save_time) ); # Table: 'phpbb_extensions' diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 705ecb799a..fa48031312 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -157,6 +157,8 @@ INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('newest INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('num_users', '1', 1); INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('num_posts', '1', 1); INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('num_topics', '1', 1); +INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('num_files', '0', 1); +INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('upload_dir_size', '0', 1); INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('session_last_gc', '0', 1); INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('search_last_gc', '0', 1); INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('last_queue_run', '0', 1); diff --git a/phpBB/language/en/lang_admin.php b/phpBB/language/en/lang_admin.php index 8725545e10..88ac92c295 100644 --- a/phpBB/language/en/lang_admin.php +++ b/phpBB/language/en/lang_admin.php @@ -248,8 +248,11 @@ $lang += array( 'TOPICS_PER_DAY'=> 'Topics per day', 'NUMBER_USERS' => 'Number of users', 'USERS_PER_DAY' => 'Users per day', + 'NUMBER_FILES' => 'Number of Attachments', + 'FILES_PER_DAY' => 'Attachments per day', 'BOARD_STARTED' => 'Board started', 'AVATAR_DIR_SIZE' => 'Avatar directory size', + 'UPLOAD_DIR_SIZE' => 'Upload directory size', 'DATABASE_SIZE' => 'Database size', 'GZIP_COMPRESSION' => 'Gzip compression', 'NOT_AVAILABLE' => 'Not available', diff --git a/phpBB/language/en/lang_main.php b/phpBB/language/en/lang_main.php index af693f441d..e291195f3d 100644 --- a/phpBB/language/en/lang_main.php +++ b/phpBB/language/en/lang_main.php @@ -638,18 +638,19 @@ $lang += array( 'SAVE' => 'Save', 'LOAD' => 'Load', - 'DRAFT_SAVED' => 'Post contents successfully saved as draft.
You are able to load this draft to posts you make, or view and edit them within your User Control Panel.', - 'ENTER_DRAFT_TITLE' => 'Enter draft title', - 'DRAFT_TITLE_EXPLAIN' => 'Now you are able to change the draft title directly. At the moment the draft title is similar to the post subject.', - 'UPDATE' => 'Update', + 'LOAD_DRAFT' => 'Load Draft', + 'LOAD_DRAFT_EXPLAIN'=> 'Here you are able to select the draft you want to continue writing. Your current post will be canceled, all current post contents will be deleted. View, edit and delete drafts within your User Control Panel.', + 'DRAFT_SAVED' => 'Draft successfully saved.', + 'DRAFT_LOADED' => 'Draft loaded into posting area, you may want to finish your post now.
Your Draft will be deleted after submitting this post.', + 'CURRENT_TOPIC' => 'Current Topic', + 'POST_STORED' => 'Your message has been posted successfully', 'POST_STORED_MOD' => 'Your message has been saved but requires approval', 'POST_DELETED' => 'Your message has been deleted successfully', 'TOPIC_BUMPED' => 'Topic has been bumped successfully', - 'Poll_delete' => 'Your poll has been deleted successfully', - 'Topic_reply_notification' => 'Topic Reply Notification', + 'POLL_DELETED' => 'Your poll has been deleted successfully', 'TOO_FEW_POLL_OPTIONS' => 'You must enter at least two poll options', 'TOO_MANY_POLL_OPTIONS' => 'You have tried to enter too many poll options', @@ -664,13 +665,14 @@ $lang += array( 'ALLOWED' => 'Allowed', 'ATTACHMENT_PHP_SIZE_NA' => 'The attachment is too big.
Could not get determine the maximum size defined by PHP in php.ini.', 'ATTACHMENT_PHP_SIZE_OVERRUN'=> 'The attachment is too big, maximum upload size is %d MB.
Please note this is set in php.ini and cannot be overriden.', - 'ATTACHMENT_TOO_BIG' => 'The attachment is too big, maximum size is %1d %2s', + 'ATTACHMENT_TOO_BIG' => 'The attachment is too big, maximum allowed size is %1d %2s', 'ATTACH_QUOTA_REACHED' => 'Sorry, the board attachment quota has been reached.', 'BYTES' => 'Bytes', 'KB' => 'KB', 'MB' => 'MB', 'DOWNLOAD_NOTICE' => 'You do not have the required permissions to view the files attached to this post.', // Differate the case more? - + 'ERROR_IMAGESIZE' => 'The Image you tried to attach is too big, maximum allowed dimensions are %1d px X %2d px.', + 'EXTENSION_DISABLED_AFTER_POSTING' => 'The extension %s has been deactivated and can no longer be displayed.', // used in Posts and PM's, replace %s with extension 'DESCRIPTION' => 'Description', 'DOWNLOAD' => 'Download', @@ -726,7 +728,6 @@ $lang += array( 'VIEW_EDIT' => 'View/Edit', 'DRAFT_TITLE' => 'Draft Title', 'SAVE_DATE' => 'Saved at', - 'NEW_OR_DELETED_TOPIC' => 'New topic or deleted', 'EDIT_DRAFT_EXPLAIN' => 'Here you are able to edit your draft.', 'DRAFTS_DELETED' => 'All selected drafts were successfully deleted.', 'DRAFT_UPDATED' => 'Draft successfully updated.', @@ -1380,8 +1381,10 @@ $lang += array( 'NO_SUBJECT' => '<No subject>', - 'logm_lock' => 'Locked topic', - 'logm_unlock' => 'Unlocked topic', + 'LOGM_LOCK' => 'Locked topic
» %s', + 'LOGM_UNLOCK' => 'Unlocked topic
» %s', + 'LOGM_USER_LOCK' => 'Poster Locked topic
» %s', + 'LOGM_USER_UNLOCK' => 'Poster Unlocked topic
» %s', 'logm_move' => 'Moved topic from %s', 'logm_fork' => 'Copied topic from %s', 'logm_split' => 'Split topic from topic %s', diff --git a/phpBB/posting.php b/phpBB/posting.php index d1905a8f86..708f2fc7eb 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -30,16 +30,18 @@ $mode = request_var('mode', ''); $post_id = request_var('p', 0); $topic_id = request_var('t', 0); $forum_id = request_var('f', 0); +$draft_id = request_var('d', 0); $lastclick = request_var('lastclick', 0); $submit = (isset($_POST['post'])) ? TRUE : FALSE; $preview = (isset($_POST['preview'])) ? TRUE : FALSE; $save = (isset($_POST['save'])) ? TRUE : FALSE; +$load = (isset($_POST['load'])) ? TRUE : FALSE; $cancel = (isset($_POST['cancel'])) ? TRUE : FALSE; $confirm = (isset($_POST['confirm'])) ? TRUE : FALSE; $delete = (isset($_POST['delete'])) ? TRUE : FALSE; -$refresh = isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['edit_comment']) || isset($_POST['cancel_unglobalise']) || isset($_POST['draft_save']) || $save; +$refresh = isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['edit_comment']) || isset($_POST['cancel_unglobalise']) || $save || $load; if ($delete && !$preview && !$refresh && $submit) { @@ -219,13 +221,16 @@ if ($sql) $enable_magic_url = $drafts = FALSE; - // User owns some drafts? + // User own some drafts? if ($user->data['user_id'] != ANONYMOUS && $auth->acl_get('u_savedrafts')) { $sql = 'SELECT draft_id FROM ' . DRAFTS_TABLE . ' - WHERE user_id = ' . $user->data['user_id']; + WHERE (forum_id = ' . $forum_id . (($topic_id) ? " OR topic_id = $topic_id" : '') . ') + AND user_id = ' . $user->data['user_id'] . + (($draft_id) ? " AND draft_id <> $draft_id" : ''); $result = $db->sql_query_limit($sql, 1); + if ($db->sql_fetchrow($result)) { $drafts = TRUE; @@ -412,55 +417,74 @@ else if ($mode == 'bump') trigger_error('BUMP_ERROR'); } - // Save Draft -if (($save || isset($_POST['draft_save'])) && $user->data['user_id'] != ANONYMOUS && $auth->acl_get('u_savedrafts')) +if ($save && $user->data['user_id'] != ANONYMOUS && $auth->acl_get('u_savedrafts')) { - $draft_id = request_var('draft_id', 0); - $draft_title = request_var('draft_title', ''); + $subject = preg_replace('#&(\#[0-9]+;)#', '&\1', request_var('subject', '')); + $subject = ($subject == '' && $mode != 'post') ? $topic_title : $subject; + $message = (isset($_POST['message'])) ? htmlspecialchars(trim(str_replace(array('\\\'', '\\"', '\\0', '\\\\'), array('\'', '"', '\0', '\\'), $_POST['message']))) : ''; + $message = preg_replace('#&(\#[0-9]+;)#', '&\1', $message); - if (isset($_POST['draft_title_update']) && $draft_id && $draft_title != '') + if ($subject != '' && $message != '') { - $sql = 'UPDATE ' . DRAFTS_TABLE . " - SET title = '" . $db->sql_escape($draft_title) . "' - WHERE draft_id = $draft_id - AND user_id = " . $user->data['user_id']; + $sql = 'INSERT INTO ' . DRAFTS_TABLE . ' ' . $db->sql_build_array('INSERT', array( + 'user_id' => $user->data['user_id'], + 'topic_id' => $topic_id, + 'forum_id' => $forum_id, + 'save_time' => $current_time, + 'draft_subject' => $subject, + 'draft_message' => $message)); $db->sql_query($sql); - } - else - { - $subject = preg_replace('#&(\#[0-9]+;)#', '&\1', request_var('subject', '')); - $message = (isset($_POST['message'])) ? htmlspecialchars(trim(str_replace(array('\\\'', '\\"', '\\0', '\\\\'), array('\'', '"', '\0', '\\'), $_POST['message']))) : ''; - $message = preg_replace('#&(\#[0-9]+;)#', '&\1', $message); - - if ($message != '') + + if ($mode == 'post') { - $sql = 'INSERT INTO ' . DRAFTS_TABLE . ' ' . $db->sql_build_array('INSERT', array( - 'user_id' => $user->data['user_id'], - 'topic_id' => $topic_id, - 'save_time' => $current_time, - 'title' => $subject, - 'post_subject' => $subject, - 'post_message' => $message)); - $db->sql_query($sql); - - $drafts = TRUE; - - $template->assign_var('DRAFT_ID', $db->sql_nextid()); + $meta_info = "viewforum.$phpEx$SID&f=$forum_id"; } else { - $save = FALSE; + $meta_info = "viewtopic.$phpEx$SID&f=$forum_id&t=$topic_id"; } - unset($subject); - unset($message); + meta_refresh(3, $meta_info); + + $message = $user->lang['DRAFT_SAVED'] . '

'; + $message .= ($mode != 'post') ? sprintf($user->lang['RETURN_TOPIC'], '', '') . '

' : ''; + $message .= sprintf($user->lang['RETURN_FORUM'], '', ''); + + trigger_error($message); } - unset($draft_id); - unset($draft_title); + unset($subject); + unset($message); } +// Load Draft +if ($draft_id && $user->data['user_id'] != ANONYMOUS && $auth->acl_get('u_savedrafts')) +{ + $sql = 'SELECT draft_subject, draft_message + FROM ' . DRAFTS_TABLE . " + WHERE draft_id = $draft_id + AND user_id = " . $user->data['user_id']; + $result = $db->sql_query_limit($sql, 1); + + if ($row = $db->sql_fetchrow($result)) + { + $_REQUEST['subject'] = $row['draft_subject']; + $_POST['message'] = $row['draft_message']; + $refresh = true; + $template->assign_var('S_DRAFT_LOADED', true); + } + else + { + $draft_id = 0; + } +} + +// Load Drafts +if ($load && $drafts) +{ + load_drafts($topic_id, $forum_id); +} if ($submit || $preview || $refresh) { @@ -533,7 +557,7 @@ if ($submit || $preview || $refresh) // If replying/quoting and last post id has changed // give user option to continue submit or return to post // notify and show user the post made between his request and the final submit - if (($mode == 'reply' || $mode == 'quote') && $topic_cur_post_id != $topic_last_post_id) + if (($mode == 'reply' || $mode == 'quote') && $topic_cur_post_id && $topic_cur_post_id != $topic_last_post_id) { if (topic_review($topic_id, $forum_id, 'post_review', $topic_cur_post_id)) { @@ -706,7 +730,8 @@ if ($submit || $preview || $refresh) AND topic_moved_id = 0"; $db->sql_query($sql); - add_log('mod', $forum_id, $topic_id, 'logm_' . (($change_topic_status == ITEM_LOCKED) ? 'lock' : 'unlock')); + $user_lock = ($auth->acl_get('f_user_lock', $forum_id) && $user->data['user_id'] != ANONYMOUS && $user->data['user_id'] == $topic_poster) ? 'USER_' : ''; + add_log('mod', $forum_id, $topic_id, sprintf($user->lang['LOGM_' . $user_lock . (($change_topic_status == ITEM_LOCKED) ? 'LOCK' : 'UNLOCK')], '' . $topic_title . '')); } // Lock/Unlock Post Edit @@ -734,6 +759,7 @@ if ($submit || $preview || $refresh) 'enable_html' => (bool) $enable_html, 'enable_smilies' => (bool) $enable_smilies, 'enable_urls' => (bool) $enable_urls, + 'enable_indexing' => (bool) $enable_indexing, 'message_md5' => (int) $message_md5, 'post_checksum' => (int) $post_checksum, 'forum_parents' => $forum_parents, @@ -744,6 +770,7 @@ if ($submit || $preview || $refresh) 'post_edit_locked' => (int) $post_edit_locked, 'bbcode_bitfield' => (int) $message_parser->bbcode_bitfield ); + submit_post($mode, $message_parser->message, $subject, $username, $topic_type, $message_parser->bbcode_uid, $poll, $message_parser->attachment_data, $message_parser->filename_data, $post_data); } } @@ -962,6 +989,7 @@ generate_forum_nav($forum_data); $s_hidden_fields = ($mode == 'reply' || $mode == 'quote') ? '' : ''; $s_hidden_fields .= ''; $s_hidden_fields .= (isset($check_value)) ? '' : ''; +$s_hidden_fields .= ($draft_id || isset($_REQUEST['draft_loaded'])) ? '' : ''; $form_enctype = (@ini_get('file_uploads') == '0' || strtolower(@ini_get('file_uploads')) == 'off' || @ini_get('file_uploads') == '0' || !$config['allow_attachments'] || !$auth->acl_gets('f_attach', 'u_attach', $forum_id)) ? '' : 'enctype="multipart/form-data"'; @@ -1017,7 +1045,6 @@ $template->assign_vars(array( 'S_TYPE_TOGGLE' => $topic_type_toggle, 'S_SAVE_ALLOWED' => ($auth->acl_get('u_savedrafts') && $user->data['user_id'] != ANONYMOUS) ? TRUE : FALSE, 'S_HAS_DRAFTS' => ($auth->acl_get('u_savedrafts') && $user->data['user_id'] != ANONYMOUS && $drafts) ? TRUE : FALSE, - 'S_DRAFT_SAVED' => $save, 'S_FORM_ENCTYPE' => $form_enctype, 'S_POST_ACTION' => $s_action, @@ -1923,6 +1950,7 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ // Submit Attachments if (count($attach_data) && !empty($data['post_id']) && in_array($mode, array('post', 'reply', 'quote', 'edit'))) { + $space_taken = $files_added = 0; foreach ($attach_data as $attach_row) { if ($attach_row['attach_id']) @@ -1953,9 +1981,12 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ $sql = 'INSERT INTO ' . ATTACHMENTS_TABLE . ' ' . $db->sql_build_array('INSERT', $attach_sql); $db->sql_query($sql); + + $space_taken += $attach_row['filesize']; + $files_added++; } } - + if (count($attach_data)) { $sql = 'UPDATE ' . POSTS_TABLE . ' @@ -1969,6 +2000,8 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ $db->sql_query($sql); } + set_config('upload_dir_size', $config['upload_dir_size'] + $space_taken, TRUE); + set_config('num_files', $config['num_files'] + $files_added, TRUE); } $db->sql_transaction('commit'); @@ -2004,10 +2037,10 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ $sql_data['topic']['stat'] = implode(', ', update_last_post_information('topic', $data['topic_id'])); } - // Update total post count, even if the topic/post has to be approved - // Mental Note: adjust Resync Stats in admin index if you delete this comments. -// if (!$auth->acl_get('f_moderate', $data['forum_id'])) -// { + // Update total post count, do not consider moderated posts/topics + // Mental Note: adjust Resync Stats in admin index if you delete these comments. + if (!$auth->acl_get('f_moderate', $data['forum_id'])) + { if ($post_mode == 'post') { set_config('num_topics', $config['num_topics'] + 1, TRUE); @@ -2018,7 +2051,7 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ { set_config('num_posts', $config['num_posts'] + 1, TRUE); } -// } + } // Update forum stats $db->sql_transaction(); @@ -2052,15 +2085,21 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ } // Fulltext parse - if ($data['message_md5'] != $data['post_checksum'] && $enable_indexing) + if ($data['message_md5'] != $data['post_checksum'] && $data['enable_indexing']) { - echo "HERE"; $search = new fulltext_search(); $result = $search->add($mode, $data['post_id'], $message, $subject); } $db->sql_transaction('commit'); + // Delete draft if post was loaded... + $draft_id = request_var('draft_loaded', 0); + if ($draft_id) + { + $db->sql_query('DELETE FROM ' . DRAFTS_TABLE . " WHERE draft_id = $draft_id AND user_id = " . $user->data['user_id']); + } + // Topic Notification if (!$data['notify_set'] && $data['notify']) { @@ -2093,6 +2132,90 @@ function submit_post($mode, $message, $subject, $username, $topic_type, $bbcode_ trigger_error($message); } +// Load Drafts +function load_drafts($topic_id = 0, $forum_id = 0) +{ + global $user, $db, $template, $phpEx, $SID, $auth; + + // Only those fitting into this forum... + $sql = 'SELECT d.draft_id, d.topic_id, d.forum_id, d.draft_subject, d.save_time, f.forum_name + FROM ' . DRAFTS_TABLE . ' d, ' . FORUMS_TABLE . ' f + WHERE d.user_id = ' . $user->data['user_id'] . ' + AND f.forum_id = d.forum_id ' . + (($forum_id) ? " AND f.forum_id = $forum_id" : '') . ' + ORDER BY save_time DESC'; + $result = $db->sql_query($sql); + + $draftrows = $topic_ids = array(); + + while ($row = $db->sql_fetchrow($result)) + { + if ($row['topic_id']) + { + $topic_ids[] = (int) $row['topic_id']; + } + $draftrows[] = $row; + } + $db->sql_freeresult($result); + + if (sizeof($topic_ids)) + { + $sql = 'SELECT topic_id, forum_id, topic_title + FROM ' . TOPICS_TABLE . ' + WHERE topic_id IN (' . implode(',', array_unique($topic_ids)) . ')'; + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + $topic_rows[$row['topic_id']] = $row; + } + $db->sql_freeresult($result); + } + unset($topic_ids); + + if (sizeof($draftrows)) + { + $row_count = 0; + $template->assign_var('S_SHOW_DRAFTS', true); + + foreach ($draftrows as $draft) + { + $link_topic = $link_forum = 0; + $insert_url = $view_url = $title = ''; + + if (isset($topic_rows[$draft['topic_id']]) && $auth->acl_get('f_read', $topic_rows[$draft['topic_id']]['forum_id'])) + { + $link_topic = true; + $view_url = "viewtopic.$phpEx$SID&f=" . $topic_rows[$draft['topic_id']]['forum_id'] . "&t=" . $draft['topic_id']; + $title = ($draft['topic_id'] == $topic_id && $topic_id) ? $user->lang['CURRENT_TOPIC'] : $topic_rows[$draft['topic_id']]['topic_title']; + + $insert_url = "posting.$phpEx$SID&f=" . $topic_rows[$draft['topic_id']]['forum_id'] . '&t=' . $draft['topic_id'] . '&mode=reply&d=' . $draft['draft_id']; + } + else if ($auth->acl_get('f_read', $draft['forum_id'])) + { + $link_forum = true; + $view_url = "viewforum.$phpEx$SID&f=" . $draft['forum_id']; + $title = $draft['forum_name']; + + $insert_url = "posting.$phpEx$SID&f=" . $draft['forum_id'] . '&mode=post&d=' . $draft['draft_id']; + } + + $template->assign_block_vars('draftrow', array( + 'DRAFT_ID' => $draft['draft_id'], + 'DATE' => $user->format_date($draft['save_time']), + 'DRAFT_SUBJECT' => $draft['draft_subject'], + + 'TITLE' => $title, + 'U_VIEW' => $view_url, + 'U_INSERT' => $insert_url, + + 'S_ROW_COUNT' => $row_count++, + 'S_LINK_TOPIC' => $link_topic, + 'S_LINK_FORUM' => $link_forum) + ); + } + } +} function prepare_data(&$variable, $change = FALSE) { diff --git a/phpBB/styles/subSilver/template/posting_body.html b/phpBB/styles/subSilver/template/posting_body.html index 51fce73f93..ec0b4834aa 100644 --- a/phpBB/styles/subSilver/template/posting_body.html +++ b/phpBB/styles/subSilver/template/posting_body.html @@ -54,24 +54,44 @@ function checkForm()
Orphan Attachments
 lang['FILENAME']; ?>  lang['FILESIZE']; ?>  lang['ATTACH_POST_ID']; ?>  lang['ATTACH_TO_POST']; ?>  lang['DELETE']; ?>  lang['FILENAME']; ?>  lang['FILESIZE']; ?>  lang['ATTACH_POST_ID']; ?>  lang['ATTACH_TO_POST']; ?>  lang['DELETE']; ?> 
ID:
ID:
lang['USERS_PER_DAY']; ?>:
lang['NUMBER_FILES']; ?>:lang['FILES_PER_DAY']; ?>:
lang['BOARD_STARTED']; ?>:
lang['DATABASE_SIZE']; ?>: lang['UPLOAD_DIR_SIZE']; ?>:
lang['GZIP_COMPRESSION']; ?>: lang['ON'] : $user->lang['OFF']; ?>  
 
- + - + + +
{L_INFORMATION}
{L_DRAFT_SAVED}{L_DRAFT_LOADED}
+
+ + + + + + + + + - - - - + + + + + + + + + + + + + + + +
{L_LOAD_DRAFT}
{L_LOAD_DRAFT_EXPLAIN}
{L_DRAFT_TITLE_EXPLAIN}

{L_ENTER_DRAFT_TITLE}  


- - - -
{L_SAVE_DATE}{L_DRAFT_TITLE}{L_OPTIONS}
{draftrow.DATE}{draftrow.DRAFT_SUBJECT}
{L_TOPIC}: {draftrow.TITLE}
{L_FORUM}: {draftrow.TITLE}
{L_NO_TOPIC_FORUM}
{L_LOAD_DRAFT}

@@ -366,7 +386,7 @@ function checkForm() -         +         @@ -381,7 +401,7 @@ function checkForm() - {S_HIDDEN_FIELDS}        + {S_HIDDEN_FIELDS}        diff --git a/phpBB/styles/subSilver/template/ucp_main_drafts.html b/phpBB/styles/subSilver/template/ucp_main_drafts.html index 03762d0d85..65acd15170 100644 --- a/phpBB/styles/subSilver/template/ucp_main_drafts.html +++ b/phpBB/styles/subSilver/template/ucp_main_drafts.html @@ -1,15 +1,17 @@ + + - + - - + + - - + + @@ -19,7 +21,6 @@ - @@ -34,29 +35,24 @@ - - - + + - + - + - - - - - + @@ -90,11 +86,11 @@ - +
{L_UCP}{L_UCP}
{L_DRAFTS_EXPLAIN}
{L_DRAFTS_EXPLAIN}
{ERROR}
{ERROR}
{L_SAVE_DATE} {L_DRAFT_TITLE}{L_TOPIC} {L_OPTIONS} {L_DELETE}
{draftrow.DATE}{draftrow.TITLE}{L_CURRENT_TOPIC}{draftrow.TOPIC_TITLE}{L_NEW_OR_DELETED_TOPIC}{L_INSERT}
{L_VIEW_EDIT}
{draftrow.DRAFT_SUBJECT}
{L_TOPIC}: {draftrow.TITLE}
{L_FORUM}: {draftrow.TITLE}
{L_NO_TOPIC_FORUM}
{L_LOAD_DRAFT}
{L_VIEW_EDIT}
{L_NO_SAVED_DRAFTS}{L_NO_SAVED_DRAFTS}
  
{L_DRAFT_TITLE}:
{L_SUBJECT}:
{L_MESSAGE}:
{L_EDIT_DRAFT_EXPLAIN}
- + {L_BACK_TO_DRAFTS}