Sida 2 av 3
Re: Låst under redigering?
Postat: 2008-08-26 13:48
av tumba25
Om den första klickar på bakåt i sin webbläsare så får nästa som försöker ändra upptaget i 5 minuter.
Jag testade lite och det verkar fungera som tänkt, men om jag missat något så skyller jag på hunden.
Först SQL
Kod: Markera allt
ALTER TABLE `phpbb_posts` ADD `upptagen` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0';
Öppna lang_main.php i dina språk-kataloger.
Find
Kod: Markera allt
// Posting/Replying (Not private messaging!)
//
After add
Kod: Markera allt
$lang['To_late'] = 'Långnäsa, någon hann före.';
$lang['Post_upptagen'] = 'Det är redan någon som grottar med denna.';
Öppna posting.php
Find
Kod: Markera allt
$sid = (isset($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : 0;
After add
Kod: Markera allt
$to_late = (isset($HTTP_POST_VARS['upptagen'])) ? $HTTP_POST_VARS['upptagen'] : 0;
Find
Kod: Markera allt
$sql = "SELECT f.*, t.topic_id, t.topic_status, t.topic_type, t.topic_first_post_id, t.topic_last_post_id, t.topic_vote, p.post_id, p.poster_id" . $select_sql . "
Inline find
Inline after add
Find
Kod: Markera allt
if ( ($result = $db->sql_query($sql)) && ($post_info = $db->sql_fetchrow($result)) )
{
$db->sql_freeresult($result);
After add
Kod: Markera allt
if($to_late && !$post_info['upptagen'])
{
message_die(GENERAL_MESSAGE, $lang['To_late']);
}
$upptagen = time();
if($post_info['upptagen'] > $upptagen - 300 && !$submit)
{
message_die(GENERAL_MESSAGE, $lang['Post_upptagen']);
}
if($mode == 'editpost' && !$submit)
{
$sql = "UPDATE " . POSTS_TABLE . " SET upptagen = $upptagen WHERE post_id = $post_id";
$db->sql_query($sql);
$post_info['upptagen'] = $upptagen;
}
else if($mode == 'editpost' && $submit)
{
$sql = "UPDATE " . POSTS_TABLE . " SET upptagen = 0 WHERE post_id = $post_id";
$db->sql_query($sql);
$post_info['upptagen'] = 0;
}
Find
Kod: Markera allt
'S_POST_ACTION' => append_sid("posting.$phpEx"),
After add
Öppna posting_body.tpl
Find
Inline after add
Kod: Markera allt
<input type="hidden" name="upptagen" value="{S_UPPTAGEN}" />
Detta kommer från en omodifierad phpBB 2.0.23, om du har någon annan version så kan hitta-strängarna skilja.
Happy testing.
/J
Re: Låst under redigering?
Postat: 2008-08-26 14:31
av Holger
TACK! Ska testa detta! Hör av mig med resultatet!
Re: Låst under redigering?
Postat: 2008-08-26 21:57
av tumba25
Så kan du lägga till i viewtopic.php
Find
Kod: Markera allt
$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
Add after
Kod: Markera allt
$upptagen = ($postrow[$i]['upptagen'] > time() - 300) ? TRUE : FALSE;
Find
Replace with
Kod: Markera allt
'EDIT_IMG' => ($upptagen) ? '' : $edit_img,
Så visas inte knappen under dom 5 minuterna heller.
Re: Låst under redigering?
Postat: 2008-08-26 21:59
av Holger
Ojojoj, nu bli det komplett.
Tack för detta!
Har precis slutat jobba, ögonen "brinner".
Ska ta detta imorron!
Re: Låst under redigering?
Postat: 2008-08-30 19:01
av Holger
Hm, ledsen, men det verkar inte funka!
Jag får inga felmeddelanden.
Men knappen syns fortfarande.
Det här avsnittet:
Kod: Markera allt
if ( ($result = $db->sql_query($sql)) && ($post_info = $db->sql_fetchrow($result)) )
{
$db->sql_freeresult($result);
ser ut så här hos mig:
Kod: Markera allt
if ( ($result = $db->sql_query($sql)) && ($post_info = $db->sql_fetchrow($result)) )
{
$forum_id = $post_info['forum_id'];
$forum_name = $post_info['forum_name'];
$is_auth = auth(AUTH_ALL, $forum_id, $userdata, $post_info);
// close forum by daytime
if ($forum_id == '39')
{
$current_fc_time = date('Gi',time());
if ($current_fc_time >= '700' && $current_fc_time <= '1800')
{
$post_info['forum_status'] = FORUM_LOCKED;
}
}
// close forum by daytime
if ( $post_info['forum_status'] == FORUM_LOCKED && !$is_auth['auth_mod'])
{
message_die(GENERAL_MESSAGE, $lang['Forum_locked']);
}
else if (($mode == 'archive' || $mode == 'newtopic') && $post_info['forum_status'] == FORUM_ARCHIVE)
{
message_die(GENERAL_MESSAGE, $lang['Archive_not_supported']);
}
else if ( $mode != 'newtopic' && $post_info['topic_status'] == TOPIC_LOCKED && !$is_auth['auth_mod'])
{
message_die(GENERAL_MESSAGE, $lang['Topic_locked']);
}
else if (($mode == 'restore' && $post_info['forum_status'] != FORUM_ARCHIVE) || ($mode == 'delete' && $post_info['forum_enable_archive']) || ($mode == 'archive' && !$post_info['forum_enable_archive']))
{
message_die(GENERAL_MESSAGE, $lang['Forum_not_supported']);
}
$post_data['post_in_archive'] = ($post_info['forum_status'] == FORUM_ARCHIVE);
if ( $mode == 'editpost' || $mode == 'delete' || $mode == 'archive' || $mode == 'restore' || $mode == 'poll_delete' )
{
$topic_id = $post_info['topic_id'];
$post_data['poster_post'] = ( $post_info['poster_id'] == $userdata['user_id'] ) ? true : false;
$post_data['first_post'] = ( $post_info['topic_first_post_id'] == $post_id ) ? true : false;
$post_data['last_post'] = ( $post_info['topic_last_post_id'] == $post_id ) ? true : false;
$post_data['last_topic'] = ( $post_info['forum_last_post_id'] == $post_id ) ? true : false;
$post_data['has_poll'] = ( $post_info['topic_vote'] ) ? true : false;
$post_data['topic_type'] = $post_info['topic_type'];
$post_data['poster_id'] = $post_info['poster_id'];
// News-Forums
$post_data['news_type'] = $post_info['news_type'];
$post_data['news_post_ori'] = $post_info['news_post_ori'];
$post_data['news_post_hin'] = $post_info['news_post_hin'];
$post_data['news_post_dis'] = $post_info['news_post_dis'];
$post_data['news_post_new_post'] = (!empty($HTTP_POST_VARS['new_post'])) ? true : 0;
$post_data['topic_quiz'] = !empty($post_info['topic_quiz']); // ADDED BY Quiz Hack
if ( $post_data['first_post'] && $post_data['has_poll'] )
{
$sql = "SELECT *
FROM " . VOTE_DESC_TABLE . " vd, " . VOTE_RESULTS_TABLE . " vr
WHERE vd.topic_id = $topic_id
AND vr.vote_id = vd.vote_id
ORDER BY vr.vote_option_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain vote data for this topic', '', __LINE__, __FILE__, $sql);
}
$poll_options = array();
$poll_results_sum = 0;
if ( $row = $db->sql_fetchrow($result) )
{
$poll_title = $row['vote_text'];
$poll_id = $row['vote_id'];
$poll_length = $row['vote_length'] / 86400;
do
{
$poll_options[$row['vote_option_id']] = $row['vote_option_text'];
$poll_results_sum += $row['vote_result'];
}
while ( $row = $db->sql_fetchrow($result) );
}
// Some code was removed here for 2.0.7
$db->sql_freeresult($result);
Jag bör kanske tillägga att vi var två admins som testade ... gör det något?
Re: Låst under redigering?
Postat: 2008-08-30 20:39
av tumba25
Jag testade som admin.
Lägg den stora delen som ska in i posting.php precis före
Re: Låst under redigering?
Postat: 2008-08-31 15:52
av Holger
Funkar PERFEKT!
Tack!
(Kan någon med behörighet anpassa mitt inlägg ovan? code-taggen!
Re: Låst under redigering?
Postat: 2008-09-01 12:59
av Holger
En lite grej som dykt upp ändå:
Om två personer tittar på ett inlägg samtidigt så ser de ju båda "ändra"-knappen.
De kan då båda trycka på den och editera.
Den som trycker på knappen SIST får dock felmeddelandet när det ändrade meddelandet skickas.
Skulle man kunna få till det så att felmeddelandet visas redan när "ändra"-knappen trycks?
Som det är nu så kanske de skriver och fixar en massa och när de klickar på "skicka" så blir de ganska frustrerade.
Re: Låst under redigering?
Postat: 2008-09-01 13:10
av tumba25
Har för mig att den andra ska få felmeddelande redan när den klickar på knappen, om dom inte klickar exakt i samma ögonblick.
Jag ska installera det igen och kolla.
Re: Låst under redigering?
Postat: 2008-09-01 14:43
av tumba25
Nu har jag installerat enligt instruktionerna i den här tråden. Den andra som klickar på "Edit" får
Det är redan någon som grottar med denna.
Jag satt med två datorer och försökte klicka exakt samtidigt. Den ena fick varje gång (ca 20 försök) reda på att den var lite sen.
Säker på att du inte råkat missa någon liten detalj?
Den här snutten finns i den stora delen som ska in i posting.php. Det är här det kollas om inlägget redan är upptaget.
Kod: Markera allt
$upptagen = time();
if($post_info['upptagen'] > $upptagen - 300 && !$submit)
{
message_die(GENERAL_MESSAGE, $lang['Post_upptagen']);
}
Re: Låst under redigering?
Postat: 2008-09-01 14:56
av Holger
Det handlar inte om att de klickar samtidigt ...
De tittar på ett inlägg samtidigt.
Klockan 12:00:00 Autorn bestämmer sig för att ändra något.
Klockan 12:00:15 Moderatorn vill korrigera ett citat i samma inlägg.
Båda ser ju "ändra"-knappen.
Båda klickar på den.
Båda får upp meddelandet i Edit-läge.
Moderatorn får ett felmeddelande först när han skickar det ändrade inlägget. Inte innan.
Re: Låst under redigering?
Postat: 2008-09-01 15:47
av tumba25
Precis det har jag också testat. Oavsett om moderatorn eller skribenten klickar på ändraknappen först så får den som är sist ett felmeddelande och kommer inte till edit-läget.
Det enda jag kan komma på är antingen någon liten miss vid installationen eller att någon annan modifikation krockar.
Jag utgår från att du inte missat ändringen i databasen. Fast då skulle nog båda få felmess.
Vågar du pm'a en titt i din posting.php?
Re: Låst under redigering?
Postat: 2008-09-01 16:01
av Holger
Mysko!
Laddar upp den ikväll. Tack.
Re: Låst under redigering?
Postat: 2008-09-01 20:21
av Holger
Här kommer min fil.
Den ena är omoddad, den andra med ändringarna.
En av moderatorerna säger att han inte kan ändra inlägg alls mer.
När jag lade tillbaka backupfilerna funkade allt igen ...
Re: Låst under redigering?
Postat: 2008-09-02 11:04
av tumba25
Det borde fungera. Jag har testat detta både på min lokala testserver och webbservern. Fungerar precis som planerat på båda två.
Vad får "en av moderatorerna" för meddelande när h*n försöker editera inlägg? Ser h*n knappen?
Har du php5? äldre, nyare?
MySQL 5?
Är det en Linux-server? Om inte, vad?