"tl_id", "date"=>"tl_date", "title"=>"tl_title", "desc"=>"tl_desc", "owner"=>"use_login", "is_public"=>"is_public"); private $cn; private $tl_id,$tl_date,$tl_title,$use_login,$is_public; function __construct ($p_init) { $this->cn=$p_init; $this->tl_id=0; $this->tl_desc=""; $this->use_login=$_SESSION['g_user']; $this->is_public="N"; } public function get_parameter($p_string) { if ( array_key_exists($p_string,self::$variable) ) { $idx=self::$variable[$p_string]; return $this->$idx; } else throw new Exception("Attribut inexistant $p_string"); } public function check($p_idx,&$p_value) { if ( strcmp ($p_idx, 'tl_id') == 0 ) { if ( strlen($p_value) > 6 || isNumber ($p_value) == false) return false; } if ( strcmp ($p_idx, 'tl_date') == 0 ) { if ( strlen(trim($p_value)) ==0 ||strlen($p_value) > 12 || isDate ($p_value) == false) return false; } if ( strcmp ($p_idx, 'tl_title') == 0 ) { $p_value=mb_substr($p_value,0,120) ; return true; } if ( strcmp ($p_idx, 'tl_desc') == 0 ) { $p_value=mb_substr($p_value,0,400) ; return true; } return true; } public function set_parameter($p_string,$p_value) { if ( array_key_exists($p_string,self::$variable) ) { $idx=self::$variable[$p_string]; if ($this->check($idx,$p_value) == true ) $this->$idx=$p_value; } else throw new Exception("Attribut inexistant $p_string"); } public function get_info() { return var_export(self::$variable,true); } public function verify() { if ( isDate($this->tl_date) == false ) { $this->tl_date=date('d.m.Y'); } return 0; } public function save() { if ( $this->get_parameter("id") == 0 ) $this->insert(); else $this->update(); } public function insert() { if ( $this->verify() != 0 ) return; if (trim($this->tl_title)=='') $this->tl_title=mb_substr(trim($this->tl_desc),0,30); if (trim($this->tl_title)=='') { alert('La note est vide'); return; } /* limit the title to 35 char */ $this->tl_title=mb_substr(trim($this->tl_title),0,30); $sql="insert into todo_list (tl_date,tl_title,tl_desc,use_login,is_public) ". " values (to_date($1,'DD.MM.YYYY'),$2,$3,$4,$5) returning tl_id"; $res=$this->cn->exec_sql( $sql, array($this->tl_date, $this->tl_title, $this->tl_desc, $this->use_login, $this->is_public) ); $this->tl_id=Database::fetch_result($res,0,0); } public function update() { if ( $this->verify() != 0 ) return; if (trim($this->tl_title)=='') $this->tl_title=mb_substr(trim($this->tl_desc),0,40); if (trim($this->tl_title)=='') { return; } /* limit the title to 35 char */ $this->tl_title=mb_substr(trim($this->tl_title),0,40); $sql="update todo_list set tl_title=$1,tl_date=to_date($2,'DD.MM.YYYY'),tl_desc=$3,is_public=$5 ". " where tl_id = $4"; $res=$this->cn->exec_sql( $sql, array($this->tl_title, $this->tl_date, $this->tl_desc, $this->tl_id, $this->is_public) ); } /*!\brief load all the task *\return an array of the existing tasks of the current user */ public function load_all() { $sql="select tl_id, tl_title, tl_desc, to_char( tl_date,'DD.MM.YYYY') as tl_date, is_public, use_login from todo_list where use_login=$1 or is_public = 'Y' or tl_id in (select todo_list_id from todo_list_shared where use_login=$1) order by tl_date::date desc"; $res=$this->cn->exec_sql( $sql, array($this->use_login)); $array=Database::fetch_all($res); return $array; } public function load() { $sql="select tl_id,tl_title,tl_desc,to_char( tl_date,'DD.MM.YYYY') as tl_date,is_public,use_login from todo_list where tl_id=$1 "; $res=$this->cn->exec_sql( $sql, array($this->tl_id) ); if ( Database::num_row($res) == 0 ) return; $row=Database::fetch_array($res,0); foreach ($row as $idx=>$value) { $this->$idx=$value; } } public function delete() { global $g_user; if ( $this->use_login != $_SESSION['g_user'] && $g_user->check_action(SHARENOTEREMOVE)==0) return; $sql="delete from todo_list where tl_id=$1 "; $res=$this->cn->exec_sql($sql,array($this->tl_id)); } /** *@brief transform into xml for ajax answer */ public function toXML() { $id=''.$this->tl_id.''; $title=''.escape_xml($this->tl_title).''; $desc=''.escape_xml($this->tl_desc).''; $date=''.$this->tl_date.''; $ret=''.$id.$title.$desc.$date.''; return $ret; } /** * @brief set a note public * @param $p_value is Y or N */ public function set_is_public($p_value) { global $g_user; if ($g_user->check_action(SHARENOTEPUBLIC) == 1 ) { $this->is_public=$p_value; } } /** * @brief Insert a share for current note * in the table todo_list_shared * @param string (use_login) */ public function save_shared_with($p_array) { global $g_user; if ($g_user->check_action(SHARENOTE) == 1 ) { $this->cn->exec_sql('insert into todo_list_shared (todo_list_id,use_login) values ($1,$2)', array($this->tl_id,$p_array)); } } /** * @brief Insert a share for current note * in the table todo_list_shared * The public shared note cannot be removed * @param string (use_login) */ public function remove_shared_with($p_array) { $this->cn->exec_sql('delete from todo_list_shared where todo_list_id = $1 and use_login=$2', array($this->tl_id,$p_array)); } /** * Display the note * @return html string */ function display() { ob_start(); $this->load(); include 'template/todo_list_display.php'; $ret=ob_get_clean(); return $ret; } /** * Highlight today * @return string */ function get_class() { $p_odd=""; $a=date('d.m.Y'); if ($a == $this->tl_date) $p_odd='highlight'; return $p_odd; } function display_row($p_odd,$with_tag='Y') { $r=""; $highlight=$this->get_class(); $p_odd=($highlight == "")?$p_odd:$highlight; if ( $with_tag == 'Y') $r = ''; $r.= ''. $this->tl_date. ''. ''. ''. htmlspecialchars($this->tl_title). ''. ''; if ( $this->is_public == 'Y' && $this->use_login != $_SESSION['g_user'] ) { // This is a public note, cannot be removed $r.= ''; } elseif ($this->use_login == $_SESSION['g_user'] ) { // This a note the user owns $r.= ''. HtmlInput::button('del','X','onClick="todo_list_remove('.$this->tl_id.')"','smallbutton'). ''; } else { // this is a note shared by someone else $r.= ''. HtmlInput::button('del','X','onClick="todo_list_remove_share('.$this->tl_id.',\''.$this->use_login.'\','.Dossier::id().')"','smallbutton'). ''; } if ( $with_tag == 'Y') $r .= ''; return $r; } static function to_object ($p_cn,$p_array) { $end=count($p_array); $ret=array(); for ($i=0;$i < $end;$i++) { $t=new Todo_List($p_cn); $t->tl_id=$p_array[$i]['tl_id']; $t->tl_date=$p_array[$i]['tl_date']; $t->tl_title=$p_array[$i]['tl_title']; $t->tl_desc=$p_array[$i]['tl_desc']; $t->is_public=$p_array[$i]['is_public']; $t->use_login=$p_array[$i]['use_login']; $ret[$i]=clone $t; } return $ret; } /** * @brief display all the user to select the user with who we want to share * the connected user is not shown * @global type $g_user */ function display_user() { global $g_user; // Get array of user $p_array=User::get_list(Dossier::id()); $dossier=Dossier::id(); include 'template/todo_list_list_user.php'; } /** * return the todo_list_shared.id of the note, if nothing is found then * return 0 * @param $p_login * @return int */ function is_shared_with($p_login) { $ret=$this->cn->get_value("select id from todo_list_shared where use_login=$1 and todo_list_id=$2",array($p_login,$this->tl_id)); if ($ret == "")return 0; return $ret; } /** * @brief Add a share with someone * @param type $p_login */ function add_share($p_login) { $this->cn->exec_sql("insert into todo_list_shared(todo_list_id,use_login) values ($1,$2)",array($this->tl_id,$p_login)); } /** * @brief remove the share with someone * @param type $p_login */ function remove_share($p_login) { $this->cn->exec_sql("delete from todo_list_shared where todo_list_id = $1 and use_login = $2 ",array($this->tl_id,$p_login)); } /*!\brief static testing function */ static function test_me() { } }