且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

菜鸟学编程:为teamtoy添加todo任务重复设置功能

更新时间:2021-11-23 03:11:25

续上篇: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 );

     }
 
这样就完成了。

 

目前的感觉是,自己对异常没做什么处理,可能有隐患,但暂时也想不到那么多,反正是内部人员使用的系统,能用就行啦。

还有个管理员更改成员密码的功能也做好了,见下篇说明。



     本文转自shenleigang 51CTO博客,原文链接:http://blog.51cto.com/lazycai/770305,如需转载请自行联系原作者