Changeset 4615

Show
Ignore:
Timestamp:
10/24/07 23:06:21 (13 months ago)
Author:
inureyes
Message:

#719

  • draft를 핸들링하도록 소스 수정
  • 테스트와 인터페이스가 남았음~
Location:
trunk
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/blog/owner/entry/add/index.php

    r3845 r4615  
    1717        'acceptComment' => array(array('0', '1'), 'default' => '0'), 
    1818        'acceptTrackback' => array(array('0', '1'), 'default' => '0'), 
    19         'published' => array('int', 0, 'default' => 1) 
     19        'published' => array('int', 0, 'default' => 1), 
     20        'draft' => array(array('0', '1'), 'default' => '0') 
    2021        ) 
    2122    ); 
     
    2425 
    2526requireStrictRoute(); 
     27$entry = array(); 
    2628$entry['visibility'] = $_POST['visibility']; 
    2729$entry['category'] = empty($_POST['category']) ? 0 : $_POST['category']; 
     
    3840$entry['acceptTrackback'] = empty($_POST['acceptTrackback']) ? 0 : 1; 
    3941$entry['published'] = empty($_POST['published']) ? 1 : $_POST['published']; 
     42$entry['draft'] = empty($_POST['draft']) ? 0 : $_POST['draft']; 
    4043if ($id = addEntry($blogid, $entry)) { 
    4144    fireEvent('AddPost', $id, $entry); 
  • trunk/blog/owner/entry/edit/item.php

    r4606 r4615  
    2929    $suri['id'] = 0; 
    3030 
    31 $entry = getEntry(getBlogId(), $suri['id'], false); 
     31if($_GET['draft']) { 
     32    $entry = getEntry(getBlogId(), $suri['id'], true); 
     33} else { 
     34    $entry = getEntry(getBlogId(), $suri['id'], false); 
     35} 
    3236if (!$entry) { 
    3337    respondErrorPage(_t('포스트 정보가 존재하지 않습니다.')); 
     
    295299                                            return false; 
    296300                                        } 
     301                                        data = data+"&draft=1"; 
    297302                                        if(entryManager.isSaved == true) { 
    298303                                            var request = new HTTPRequest("POST", "<?php echo $blogURL;?>/owner/entry/update/"+entryManager.entryId); 
     
    354359                                        if (data == null) 
    355360                                            return false; 
    356  
     361                                        data = data+"&draft=0"; 
    357362                                        if(entryManager.isSaved == true) { 
    358363                                            var request = new HTTPRequest("POST", "<?php echo $blogURL;?>/owner/entry/update/"+entryManager.entryId); 
  • trunk/blog/owner/entry/update/item.php

    r4606 r4615  
    1717        'acceptComment' => array(array('0', '1'), 'default' => '0'), 
    1818        'acceptTrackback' => array(array('0', '1'), 'default' => '0'), 
    19         'published' => array('int', 0, 'default' => 1) 
     19        'published' => array('int', 0, 'default' => 1), 
     20        'draft' => array(array('0', '1'), 'default' => '0') 
    2021    ) 
    2122); 
     
    2425 
    2526requireStrictRoute(); 
    26 if ($entry = getEntry($blogid, $suri['id'])) { 
     27$entry = array(); 
     28$isDraft = empty($_POST['draft']) ? 0 : $_POST['draft']; 
     29if($isDraft) { // Prepare for draft saving. 
     30    $entry['id'] = $suri['id']; 
    2731    $entry['visibility'] = $_POST['visibility']; 
    2832    $entry['category'] = $_POST['category']; 
     
    3741    $entry['acceptTrackback'] = empty($_POST['acceptTrackback']) ? 0 : 1; 
    3842    $entry['published'] = empty($_POST['published']) ? 0 : $_POST['published']; 
     43    $entry['draft'] = empty($_POST['draft']) ? 0 : $_POST['draft']; 
     44} else if ($entry = getEntry($blogid, $suri['id'], $isDraft)) { // Non-draft saving. 
     45    $entry['visibility'] = $_POST['visibility']; 
     46    $entry['category'] = $_POST['category']; 
     47    $entry['location'] = empty($_POST['location']) ? '/' : $_POST['location']; 
     48    $entry['tag'] = empty($_POST['tag']) ? '' : $_POST['tag']; 
     49    $entry['title'] = $_POST['title']; 
     50    $entry['content'] = $_POST['content']; 
     51    $entry['contentFormatter'] = $_POST['contentFormatter']; 
     52    $entry['contentEditor'] = $_POST['contentEditor']; 
     53    $entry['slogan'] = $_POST['permalink']; 
     54    $entry['acceptComment'] = empty($_POST['acceptComment']) ? 0 : 1; 
     55    $entry['acceptTrackback'] = empty($_POST['acceptTrackback']) ? 0 : 1; 
     56    $entry['published'] = empty($_POST['published']) ? 0 : $_POST['published']; 
     57    $entry['draft'] = empty($_POST['draft']) ? 0 : $_POST['draft']; 
     58} 
     59if(!empty($entry)) { 
    3960    setBlogSetting('LatestEditedEntry_user'.getUserId(),$suri['id']); 
    4061    if($id = updateEntry($blogid, $entry)) { 
  • trunk/lib/config.php

    r4606 r4615  
    1818} 
    1919// Define global variable. 
    20 global $database, $service; 
     20global $database, $service, $blog; 
    2121$database['server'] = 'localhost'; 
    2222$database['database'] = ''; 
  • trunk/lib/model/blog.entry.php

    r4578 r4615  
    421421    $entry['location'] = UTF8::lessenAsEncoding(trim($entry['location']), 255); 
    422422    $entry['slogan'] = array_key_exists('slogan', $entry) ? trim($entry['slogan']) : ''; 
     423     
     424    $isDraft = empty($entry['draft']) ? 0 : $entry['draft']; 
     425     
    423426    if((empty($entry['slogan']))||($entry['category'] == -1)) { 
    424427        $slogan = $slogan0 = getSlogan($entry['title']); 
     
    445448    } 
    446449 
    447     $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' LIMIT 1"); 
     450    $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' AND draft = $isDraft LIMIT 1"); 
    448451    for ($i = 1; $result > 0; $i++) { 
    449452        if ($i > 1000) 
    450453            return false; 
    451454        $slogan = tc_escape_string(UTF8::lessenAsEncoding($slogan0, 245) . '-' . $i); 
    452         $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' LIMIT 1"); 
     455        $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' AND draft = $isDraft LIMIT 1"); 
    453456    } 
    454457    $userid = $entry['userid']; 
     
    464467        $published = 'UNIX_TIMESTAMP()'; 
    465468    } 
    466     $currentMaxId = DBQuery::queryCell("SELECT MAX(id) FROM {$database['prefix']}Entries WHERE blogid = $blogid and draft = 0"); 
    467     if(!empty($currentMaxId) && $currentMaxId > 0) { 
    468         $id = $currentMaxId + 1; 
     469     
     470    if(isset($entry['id'])) { // entry id가 있는 경우 (주로 updateEntry에 의하여 draft를 생성하는 경우가 될 것이다) 
     471        if(DBQuery::queryCell("SELECT count(*) FROM {$database['prefix']}Entries WHERE blogid = $blogid AND id = {$entry['id']} AND draft = $isDraft") != 0) { // 이미 원하는 draft에 같은 id가 다 존재한다. 이 경우 저장할 수 없음. 
     472            return false; 
     473        } else { 
     474            $id = $entry['id']; 
     475        } 
    469476    } else { 
    470         $id = 1; 
     477        $currentMaxId = DBQuery::queryCell("SELECT MAX(id) FROM {$database['prefix']}Entries WHERE blogid = $blogid AND draft = 0"); 
     478        if(!empty($currentMaxId) && $currentMaxId > 0) { 
     479            $id = $currentMaxId + 1; 
     480        } else { 
     481            $id = 1; 
     482        } 
    471483    } 
    472484    $result = DBQuery::query("INSERT INTO {$database['prefix']}Entries  
     
    478490            $userid, 
    479491            $id, 
    480             0, 
     492            $isDraft, 
    481493            {$entry['visibility']}, 
    482494            {$entry['category']}, 
     
    497509    if (!$result) 
    498510        return false; 
    499     DBQuery::query("DELETE FROM {$database['prefix']}Entries WHERE blogid = $blogid AND id = $id AND draft = 1"); 
    500511    DBQuery::query("UPDATE {$database['prefix']}Attachments SET parent = $id WHERE blogid = $blogid AND parent = 0"); 
    501     updateEntriesOfCategory($blogid, $entry['category']); 
    502     if ($entry['visibility'] == 3) 
    503         syndicateEntry($id, 'create'); 
    504     if ($entry['visibility'] >= 2) 
    505         clearRSS(); 
    506     if (!empty($entry['tag'])) { 
    507         $tags = getTagsWithEntryString($entry['tag']); 
    508         addTagsWithEntryId($blogid, $id, $tags); 
     512    if(!$isDraft) { 
     513        DBQuery::query("DELETE FROM {$database['prefix']}Entries WHERE blogid = $blogid AND id = $id AND draft = 1"); 
     514        updateEntriesOfCategory($blogid, $entry['category']); 
     515        if ($entry['visibility'] == 3) 
     516            syndicateEntry($id, 'create'); 
     517        if ($entry['visibility'] >= 2) 
     518            clearRSS(); 
     519        if (!empty($entry['tag'])) { 
     520            $tags = getTagsWithEntryString($entry['tag']); 
     521            addTagsWithEntryId($blogid, $id, $tags); 
     522        } 
    509523    } 
    510524    return $id; 
     
    521535 
    522536    if($entry['id'] == 0) return false; 
    523  
     537    $isDraft = empty($entry['draft']) ? 0 : $entry['draft']; 
     538 
     539    // entry가 draft가 없으면서(draft = 1인 글이 없는 경우) 저장하려는 요구사항이 draft인 경우는 addEntry로 글을 더한다. 
     540    $draftCount = DBQuery::queryCell("SELECT count(*) FROM {$database['prefix']}Entries 
     541        WHERE blogid = $blogid 
     542            AND id = ".$entry['id']." 
     543            AND draft = 1"); 
     544    if(($draftCount == 0) && ($isDraft == 1)) { 
     545        return addEntry($blogid, $entry); 
     546    } 
     547    // draft가 없으면서 정상적인 글을 저장하려는 경우, (이 경우는 현재 글을 update한다.) 
     548    // draft가 있으면서 정상적인 글을 저장하려는 경우, (이 경우는 draft를 update한다.) 
     549    // draft가 있으면서 draft를 저장하려는 경우가 남음. (이 경우도 draft를 update한다.) 
     550     
    524551    if(empty($entry['userid'])) $entry['userid'] = getUserId();  
    525552    $entry['title'] = UTF8::lessenAsEncoding(trim($entry['title'])); 
     
    537564        if($entry['visibility'] == 1 || $entry['visibility'] == 3) 
    538565            return false; 
    539         if(DBQuery::queryCell("SELECT count(*) FROM {$database['prefix']}Entries WHERE blogid = $blogid AND id <> {$entry['id']} AND draft = 0 AND title = '$title' AND category = -1") > 0) 
     566        if(DBQuery::queryCell("SELECT count(*)  
     567            FROM {$database['prefix']}Entries  
     568            WHERE blogid = $blogid  
     569                AND id <> {$entry['id']}  
     570                AND draft = 0  
     571                AND title = '$title'  
     572                AND category = -1") > 0) 
    540573            return false; 
    541574    } 
     
    549582    } 
    550583     
    551     $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' AND id = {$entry['id']} LIMIT 1"); 
     584    $result = DBQuery::queryCount("SELECT slogan  
     585        FROM {$database['prefix']}Entries  
     586        WHERE blogid = $blogid  
     587        AND slogan = '$slogan'  
     588        AND id = {$entry['id']}  
     589        AND draft = $isDraft LIMIT 1"); 
    552590    if ($result == 0) { // if changed 
    553         $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' LIMIT 1"); 
     591        $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' AND draft = $isDraft LIMIT 1"); 
    554592        for ($i = 1; $result > 0; $i++) { 
    555593            if ($i > 1000) 
    556594                return false; 
    557595            $slogan = tc_escape_string(UTF8::lessenAsEncoding($slogan0, 245) . '-' . $i); 
    558             $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' LIMIT 1"); 
     596            $result = DBQuery::queryCount("SELECT slogan FROM {$database['prefix']}Entries WHERE blogid = $blogid AND slogan = '$slogan' AND draft = $isDraft LIMIT 1"); 
    559597        } 
    560598    } 
     
    578616            break; 
    579617    } 
     618     
     619    // draft가 없으면서 정상적인 글을 저장하려는 경우, (이 경우는 현재 글을 update한다.) 
     620    if(($draftCount == 0) && ($isDraft == 0)) $draftSign = 0; 
     621    else $draftSign = 1; 
     622 
    580623    $result = DBQuery::query("UPDATE {$database['prefix']}Entries 
    581624            SET 
     
    583626                visibility         = {$entry['visibility']}, 
    584627                category           = {$entry['category']}, 
     628                draft              = $isDraft, 
    585629                location           = '$location', 
    586630                title              = '$title', 
     
    593637                published          = $published, 
    594638                modified           = UNIX_TIMESTAMP() 
    595             WHERE blogid = $blogid AND id = {$entry['id']} AND draft = 0"); 
    596     if ($result) 
    597         DBQuery::query("DELETE FROM {$database['prefix']}Entries WHERE blogid = $blogid AND id = {$entry['id']} AND draft = 1"); 
    598     updateEntriesOfCategory($blogid, $entry['category']); 
    599     if ($entry['visibility'] == 3) 
    600         syndicateEntry($entry['id'], 'modify'); 
    601     DBQuery::query("UPDATE {$database['prefix']}Attachments SET parent = {$entry['id']} WHERE blogid = $blogid AND parent = 0"); 
    602     if ($entry['visibility'] >= 2) 
    603         clearRSS(); 
     639            WHERE blogid = $blogid AND id = {$entry['id']} AND draft = $draftSign"); 
     640    if($isDraft == 0) {  // Publishing phase. 
     641        if ($result) // 정상적인 글을 저장하려는 경우 draft는 날린다. 
     642            DBQuery::query("DELETE FROM {$database['prefix']}Entries WHERE blogid = $blogid AND id = {$entry['id']} AND draft = 1"); 
     643        updateEntriesOfCategory($blogid, $entry['category']); 
     644        if ($entry['visibility'] == 3) 
     645            syndicateEntry($entry['id'], 'modify'); 
     646        DBQuery::query("UPDATE {$database['prefix']}Attachments SET parent = {$entry['id']} WHERE blogid = $blogid AND parent = 0"); 
     647        if ($entry['visibility'] >= 2) 
     648            clearRSS(); 
     649    } 
    604650    return $result ? $entry['id'] : false; 
    605651}