菜鳥學編程:爲teamtoy添加todo任務重複設置功能

續上篇:http://lazycai.blog.51cto.com/690494/765860

其實發現做hacking這種活兒,只要思路順了,寫起來還是挺快的··

1、數據庫添加一個cycle字段,類型爲int,不同的數值分別代表0【不重複】1【每日重複(工作日)】2【每週重複】3【每月重複】。
默認值爲0
 
2、進入 code/mod/todo.class.php 。這一次,我們不僅要修改 update (save先不改了,這個週期設置的功能無需在添加任務時設定),還要修改 check 這個功能。首先是update,思路跟之前添加due_date的思路類似,添加
$cycle = z(v('cycle'));
以及
`cycle` = '" . $cycle . "'
的字段在相應的位置。然後進入 view/layout/ajax/todo/modify.tpl.html 進行測試,添加radio buttons:

<div id="todo_cycle">
     重複週期:<input type="radio" name="cycle" value="0">不重複&nbsp;&nbsp;<input type="radio" name="cycle" value="1">每日&nbsp;&nbsp;<input type="radio" name="cycle" value="2">每週&nbsp;&nbsp;<input type="radio" name="cycle" value="3">每月
</div>
這樣就可以輸入了,不過這個頁面現在默認打開是啥項都沒選,我們需要讓他默認選擇了正確的項,讓正確的項處於默認checked的狀態。
這個可能可以用一個變量的方式來處理,不過具體怎麼傳值沒想好,所以下面就用了一個笨辦法,倒是也管用:

重複週期:<input type="radio" name="cycle" value="0" <?php if( $tinfo['cycle'] == 0 ){ echo 'checked'; } ?>>不重複&nbsp;&nbsp;<input type="radio" name="cycle" value="1" <?php if( $tinfo['cycle'] == 1 ){ echo 'checked'; } ?>>每日&nbsp;&nbsp;<input type="radio" name="cycle" value="2" <?php if( $tinfo['cycle'] == 2 ){ echo 'checked'; } ?>>每週&nbsp;&nbsp;<input type="radio" name="cycle" value="3" <?php if( $tinfo['cycle'] == 3 ){ echo 'checked'; } ?>>每月
ok,這樣數值輸入的部分就搞定了,接下來去修改check功能。
 
3、我們需要的修改,說穿了是在 check 這個動作的同時,將之前的todo複製一份,把一份check掉,另一份改個due_date(以及id)。那麼,首先考慮複製的實現。
直接帖代碼吧:
首先在check函數中添加如下代碼,我直接放在$todo定義那行的後面了:

          if( $todo['cycle'] != 0 )
          {
               //如果todo設置了重複週期,則複製該todo
               $this->copy_todo($tid);
          }
(話說一開始不知道$this->的用法,函數調用折騰我半天,最後還是靠龍飛的指點~)
然後在check函數後面加一個copy_todo函數:

     public function copy_todo($tid)
     {
          if( $tid < 1 ) return ajax_box('錯誤的TODO ID');
         
          $todo = get_line("SELECT * FROM `todo` WHERE `id` = '" . intval( $tid ) . "' LIMIT 1");
          $name = $todo['name'];
          $link = $todo['link'];
          $desp = $todo['desp'];
          $uid = $todo['uid'];
          $creator_uid = $todo['creator_uid'];
          $pid = $todo['pid'];
          $follow_uids = $todo['follow_uids'];
          $due_date = $todo['due_date'];
          $cycle = $todo['cycle'];
          switch($cycle) {
               case 0:
                    //0的話就不該進來這裏吧
                    break;
               case 1:
                    $due_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime($due_date)) . " +1 day"));
                    break;
               case 2:
                    $due_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime($due_date)) . " +1 week"));
                    break;
               case 3:
                    $due_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime($due_date)) . " +1 month"));
                    break;
          }
         
          $sql = "INSERT INTO `todo` (  `name` , `link` , `desp`  , `uid` , `creator_uid` , `pid` , `is_done` , `follow_uids` ,  `timeline` , `check_time`, `due_date`, `cycle` ) VALUES (    '" . $name . "'  ,  '" . $link . "',  '" . $desp . "' , '" . $uid . "'  , '" . $creator_uid . "'  ,  '" . $pid . "' , '" . 0 . "'  , '" . $follow_uids . "' , NOW() , NOW() , '" . $due_date . "' , '" . $cycle . "' )";
         
          run_sql( $sql );

     }
 
這樣就完成了。

 

目前的感覺是,自己對異常沒做什麼處理,可能有隱患,但暫時也想不到那麼多,反正是內部人員使用的系統,能用就行啦。

還有個管理員更改成員密碼的功能也做好了,見下篇說明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章