Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tubes 3 - Ranger Enemy #60

Open
wants to merge 111 commits into
base: master
Choose a base branch
from
Open
Changes from 4 commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
c5ae16e
Kerangka Dashboard
edwardsamuel Feb 16, 2013
27d21b8
Halaman profile v0.1 dan antek-anteknya
abrahamks Feb 16, 2013
4a550dd
halaman pembuatan tugas v0.1
abrahamks Feb 20, 2013
5d9e1b8
CSS + javascript create tugas
abrahamks Feb 20, 2013
1db67a1
Halaman Dashboard + Rincian Tugas
edwardsamuel Feb 20, 2013
6ffbb53
Halaman Utama (dengan CSS+JS)
sthobis Feb 20, 2013
1aaffef
Update src/default.css
abrahamks Feb 22, 2013
6dd1e1d
createtugas.html FINAL
abrahamks Feb 22, 2013
166450c
index.js + index.css
sthobis Feb 22, 2013
6071344
mediaqueries.css v0.2
abrahamks Feb 22, 2013
81f7568
Merge branch 'master' of https://github.com/edwardsamuel/IF3038-2013
abrahamks Feb 22, 2013
f96da80
Update index.html
sthobis Feb 22, 2013
9079c7b
dashboard.html --> penyelesaian modul
edwardsamuel Feb 22, 2013
9fca188
mediaqueries.css final
abrahamks Feb 22, 2013
c99cdad
Validasi dengan validator.w3.org dan Perbaikan Minor
edwardsamuel Feb 22, 2013
d0d41df
mediaqueries.css FINAL 720pz
abrahamks Feb 22, 2013
fe099b8
Validasi Registrasi dan Penambahan MEMBER.md
edwardsamuel Feb 22, 2013
d8a3c46
Merge branch 'master' of https://github.com/edwardsamuel/IF3038-2013
edwardsamuel Feb 22, 2013
b852516
Update form login index.html
sthobis Feb 22, 2013
b4f00df
Merge branch 'master' of https://github.com/edwardsamuel/IF3038-2013
sthobis Feb 22, 2013
e7becd1
Update index.js (validasi login)
sthobis Feb 22, 2013
a33d64b
mediaqueries.css 320px v0.1
abrahamks Feb 22, 2013
58fd42f
Upload image index.html
sthobis Feb 22, 2013
4d77fac
Update index.html index.css (image deskripsi website)
sthobis Feb 22, 2013
b59f286
Merge branch 'master' of https://github.com/edwardsamuel/IF3038-2013
abrahamks Feb 22, 2013
59025c5
Datetimepicker
edwardsamuel Feb 22, 2013
daad0a3
Merge branch 'master' of https://github.com/edwardsamuel/IF3038-2013
abrahamks Feb 22, 2013
a0707d4
Perbaikan Minor
edwardsamuel Feb 22, 2013
e35a650
Final
edwardsamuel Feb 22, 2013
9c387b7
ganti member, mulai tubes 2
wilsonf Mar 7, 2013
12c4b35
prototype database
wilsonf Mar 7, 2013
76550ff
Perbaikan dari Tubes 1
edwardsamuel Mar 9, 2013
d61ce4c
Migrasi ke PHP + Pembuatan Halaman index.php + Perbaikan pada SQL
edwardsamuel Mar 12, 2013
b36e262
perubahan :
wilsonf Mar 13, 2013
8e6b0bc
Penambahan Header/Footer yang terpisah + Penambahan Fungsi ajax
edwardsamuel Mar 14, 2013
a14993b
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
edwardsamuel Mar 14, 2013
a9a3621
Pembuatan profile.php + minor update default.css
13510039 Mar 14, 2013
74a1afc
Pembuatan halaman dashboard
wilsonf Mar 14, 2013
248ce7f
Perbaikan Basis Data
edwardsamuel Mar 16, 2013
c8a650b
Perbaikan Basis Data + Penyelesaian index.php + Perbaikan models/tuga…
edwardsamuel Mar 16, 2013
b1c323c
penyesuaian dengan perubahan sql dan penambahan fungsi mengubah status
wilsonf Mar 17, 2013
60de6b8
halaman penambahan tugas sudah tersambung dengan sql
wilsonf Mar 19, 2013
28ce6f5
penambahan fungsional tombol delete kategori
wilsonf Mar 19, 2013
fabc483
penambahan halaman profile, query belum benar karena akan ada perubah…
13510039 Mar 20, 2013
7949966
penambahan method update pada user.php
13510039 Mar 20, 2013
d5f21f0
finishing dashboard
wilsonf Mar 20, 2013
4384f9d
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
13510039 Mar 20, 2013
3fa4dfb
Restore Basis Data
edwardsamuel Mar 20, 2013
f31e29f
pembetulan basis data dan peyelesaian dashboard
wilsonf Mar 20, 2013
2a3c5ef
Penambahan Halaman Detail Tugas
edwardsamuel Mar 20, 2013
2f739cb
Perbaikan Dashboard
edwardsamuel Mar 20, 2013
9dc8628
Perubahan Minor Basis Data + Halaman Rincian Tugas agar compatible de…
edwardsamuel Mar 20, 2013
0b60bb0
impleentasi fungsional pembuatan tugas baru
wilsonf Mar 20, 2013
18e5294
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
wilsonf Mar 20, 2013
d7f1d23
Halaman Detail Tugas degan AJAX
edwardsamuel Mar 21, 2013
21e423c
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
edwardsamuel Mar 21, 2013
da334da
penambahan fungsional delete tugas oleh pemilik
wilsonf Mar 21, 2013
0a621f3
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
wilsonf Mar 21, 2013
8b30191
Komentar pada Rincian Tugas
edwardsamuel Mar 21, 2013
cb0478c
penambahan session user pada dashboard.php agar bisa dilakukan penget…
wilsonf Mar 21, 2013
9e0d2a6
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
wilsonf Mar 21, 2013
78c8982
pembenaran show kategori pada saat membuat tugas baru
wilsonf Mar 21, 2013
ae4869a
pembetulan terhadap ajax/kategori.php
wilsonf Mar 21, 2013
1d64467
pembenaran terhadap createkategori.php
wilsonf Mar 21, 2013
06674e5
Perbaikan Halaman Register + Rincian Tugas
edwardsamuel Mar 22, 2013
4f48096
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
edwardsamuel Mar 22, 2013
c895e96
sinkronisasi basisdata dan perbaikan rincian tugas
edwardsamuel Mar 22, 2013
3cc54d6
Perbaikan Minor createtugas.php
edwardsamuel Mar 22, 2013
d73e4fd
penampilan kategori bila hanya menjadi assignee
wilsonf Mar 22, 2013
157dc4f
pengubahan header halaman dashboard dan createtugas
wilsonf Mar 22, 2013
36d934d
Final Rincian Tugas
edwardsamuel Mar 23, 2013
3ab0d03
Penghapusab create.php
edwardsamuel Mar 23, 2013
777bd8e
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
edwardsamuel Mar 23, 2013
d9189e8
Perbaikan mediaqueries.css + Minor dashboard.js
edwardsamuel Mar 23, 2013
f54b133
finishing Profile dan search.
13510039 Mar 23, 2013
dbe5263
Merge branch 'tubes2' of https://github.com/edwardsamuel/IF3038-2013 …
edwardsamuel Mar 23, 2013
14b8be3
Perbaikan Bug
13510039 Mar 23, 2013
2d733c2
Perbaikan Bug pada profilecategory.php
13510039 Mar 23, 2013
60de754
Mulai Tubes 3 + Struktur Dasar + Halaman Index
edwardsamuel Apr 4, 2013
fb1948b
penambahan library
wilsonf Apr 4, 2013
a9d8f91
mulai pengerjaan dashboard
wilsonf Apr 4, 2013
96fe02e
Penambahan Connector MySQL + Pembuatan JSON Writer + Perbaikan .gitig…
edwardsamuel Apr 4, 2013
df2f894
penambahan dashboard awal
wilsonf Apr 4, 2013
c637f7d
Pelengkapan DetilTugas + Pembuatan UpdateTugas + Penambahan Konstrukt…
edwardsamuel Apr 5, 2013
2c3bb72
pembenaran header dan dashboard
wilsonf Apr 5, 2013
00e1c7b
Merge branch 'tubes3' of https://github.com/edwardsamuel/IF3038-2013 …
13510039 Apr 5, 2013
b043825
penyelesaian halaman dashboard
wilsonf Apr 7, 2013
2271876
Perbaikan JSON + Updater Tugas + View Tugas + Perbaikan Register
edwardsamuel Apr 7, 2013
bbe6795
Merge branch 'tubes3' of https://github.com/edwardsamuel/IF3038-2013 …
edwardsamuel Apr 7, 2013
a40e941
Perbaikan Header + Penyelesaian Detil Tugas + Penyesuaian File Berkaitan
edwardsamuel Apr 7, 2013
9f588f4
menyelesaikan halaman dashboard dan create tugas
wilsonf Apr 9, 2013
c034f83
profile (-upload avatar) dan search (belum selesai)
13510039 Apr 10, 2013
99d56c4
profile ( - upload avatar ) dan search (belum selesai)
13510039 Apr 10, 2013
9f37411
Merge branch 'tubes3' of https://github.com/edwardsamuel/IF3038-2013 …
13510039 Apr 10, 2013
294f2a5
finalisasi profile
13510039 Apr 10, 2013
deaa80c
fix bug header, updating search(belum sempurna), profile belum sempurna
13510039 Apr 10, 2013
33fd054
pembetulan create tugas saat tidak ada file yang diupload
wilsonf Apr 11, 2013
d0b1c3d
Penyempurnaan profile, penyempurnaan search
13510039 Apr 11, 2013
53dfc0e
Merge branch 'tubes3' of https://github.com/edwardsamuel/IF3038-2013 …
13510039 Apr 11, 2013
0edff2c
perbaikan bug search
13510039 Apr 11, 2013
c8354e0
autocomplete search dan search berdasarkan tag
13510039 Apr 11, 2013
f1e6758
autocomplete search dan search berdasarkan tag (Not Versioned Files)
13510039 Apr 11, 2013
f22c600
perbaikan bug minor pada search
13510039 Apr 11, 2013
bf67b76
minor bug pada profile dan search
13510039 Apr 12, 2013
c4c2e33
Perbaikan minor Autocomplete
edwardsamuel Apr 12, 2013
ccef49e
pembetulan dashboard
wilsonf Apr 12, 2013
f670f56
Merge branch 'tubes3' of https://github.com/edwardsamuel/IF3038-2013 …
wilsonf Apr 12, 2013
70e73a1
pembetulan
wilsonf Apr 12, 2013
43b859f
fix bug href assignee pada rincianTugas
13510039 Apr 13, 2013
0012c13
pengubahan database properties sesuai spek progin_471_13510039
13510039 Apr 13, 2013
ccae927
penambahan file progin_471_13510039.sql
13510039 Apr 13, 2013
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/ajax/AssigneeList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package id.ac.itb.todolist.ajax;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import id.ac.itb.todolist.dao.UserDao;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "AssigneeList", urlPatterns = {"/ajax/AssigneeList"})
public class AssigneeList extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
UserDao user = new UserDao();
try {
ArrayList<String> result=user.getUsers();
for (int i = 0; i < result.size(); i++)
{
out.println("<option value='"+result.get(i)+"'>");
}
} finally {
out.close();
}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
98 changes: 98 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/ajax/Create.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@

package id.ac.itb.todolist.ajax;

import id.ac.itb.todolist.dao.TugasDao;
import id.ac.itb.todolist.dao.UserDao;
import id.ac.itb.todolist.model.User;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet(name = "Create", urlPatterns = {"/ajax/Create"})
public class Create extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
UserDao userDao = new UserDao();
User currentUser = (User) session.getAttribute("user");
TugasDao tugas = new TugasDao();
try {
tugas.AddTask(request.getParameter("namatask"), Date.valueOf(request.getParameter("deadline")), currentUser.getUsername(), Integer.parseInt(request.getParameter("namakategori")));
String[] assigneeArr= request.getParameter("assigneeI").split("[ ,]+");
for (int i = 0; i < assigneeArr.length; i++)
{
if(!assigneeArr[i].equals(currentUser.getUsername()) && userDao.isAvailableUsername(assigneeArr[i]))
{
tugas.addAssignee(tugas.getNewestId(),assigneeArr[i]);
}
}
String[] tags= request.getParameter("tag").split("[ ,]+");
for (int i = 0; i < tags.length; i++)
{
tugas.addTag(tugas.getNewestId(),tags[i]);
}
} finally {
out.close();
}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
93 changes: 93 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/ajax/CreateKategori.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@

package id.ac.itb.todolist.ajax;

import java.io.IOException;
import java.io.PrintWriter;
import id.ac.itb.todolist.dao.CategoryDao;
import id.ac.itb.todolist.dao.UserDao;
import id.ac.itb.todolist.model.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet(name = "CreateKategori", urlPatterns = {"/ajax/CreateKategori"})
public class CreateKategori extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("user");
String q = request.getParameter("q");
String[] Arr = request.getParameter("Arr").split("[ ,]+");
try {
CategoryDao category = new CategoryDao();
UserDao user = new UserDao();
category.NewKategori(q,currentUser.getUsername());
for (int i = 0; i < Arr.length; i++)
{
if(!Arr[i].equals(currentUser.getUsername()) && user.isAvailableUsername(Arr[i]))
{
category.addNewestCoordinator(Arr[i]);
}
}
} finally {
out.close();
}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
101 changes: 101 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/ajax/DeleteCat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package id.ac.itb.todolist.ajax;

import id.ac.itb.todolist.dao.CategoryDao;
import id.ac.itb.todolist.model.User;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*
* @author User
*/
@WebServlet(name = "DeleteCat", urlPatterns = {"/ajax/DeleteCat"})
public class DeleteCat extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("user");
String q = request.getParameter("q");
try {
CategoryDao category = new CategoryDao();
ArrayList<String> users = new ArrayList<String>();
users = category.getUser(Integer.parseInt(q));
int i=0;
while(i<users.size())
{
if(users.get(i).equals(currentUser.getUsername())){
category.DeleteKategori(Integer.parseInt(q));
break;
}
i++;
}
} finally {
out.close();
}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
79 changes: 79 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/ajax/DeleteTask.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@

package id.ac.itb.todolist.ajax;

import java.io.IOException;
import java.io.PrintWriter;
import id.ac.itb.todolist.dao.TugasDao;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "DeleteTask", urlPatterns = {"/ajax/DeleteTask"})
public class DeleteTask extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String q = request.getParameter("q");
TugasDao tugas = new TugasDao();
tugas.deleteTask(Integer.parseInt(q));
} finally {
out.close();
}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
115 changes: 115 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/ajax/KategoriN.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package id.ac.itb.todolist.ajax;

import id.ac.itb.todolist.dao.CategoryDao;
import id.ac.itb.todolist.model.Category;
import id.ac.itb.todolist.model.User;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*
* @author User
*/
@WebServlet(name = "kategoriN", urlPatterns = {"/ajax/KategoriN"})
public class KategoriN extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.setContentType("application/json");

PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
User currentUser = (User) session.getAttribute("user");
try {
CategoryDao category =new CategoryDao();
ArrayList<Category> result ;
ArrayList<Category> result2 ;
result=category.getAllCategory();
result2=category.getAssigneeCat(currentUser.getUsername());
for (int i = 0; i < result.size(); i++){
ArrayList<String> users= category.getUser(result.get(i).getId());
for (int n = 0; n < users.size(); n++){
if(users.get(n) == null ? currentUser.getUsername() == null : users.get(n).equals(currentUser.getUsername()))
{
int id_kategori=result.get(i).getId();
out.println("<li><a name='"+id_kategori+"' href=\"\" onclick=\"loadtugas('"+id_kategori+"');setChosen('"+id_kategori+"'); return false;\" >");
out.println(result.get(i).getNama());
out.println("</a></li>");
break;
}
}
}
for(int i=0;i < result2.size(); i++){
int id_kategori=result2.get(i).getId();
out.println("<li><a name='"+id_kategori+"' href=\"\" onclick=\"loadtugas('"+id_kategori+"');setChosen('"+id_kategori+"'); return false;\" >");
out.println(result2.get(i).getNama());
out.println("</a></li>");
}
} finally {
out.close();
}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
230 changes: 230 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/ajax/TugasA.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package id.ac.itb.todolist.ajax;

import id.ac.itb.todolist.dao.TugasDao;
import id.ac.itb.todolist.model.Tugas;
import id.ac.itb.todolist.model.User;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*
* @author User
*/
@WebServlet(name = "TugasA", urlPatterns = {"/ajax/TugasA"})
public class TugasA extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.setContentType("application/json");

PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String q = request.getParameter("q");
User currentUser = (User) session.getAttribute("user");
ArrayList<Tugas> result;
TugasDao tugasDao=new TugasDao();
try {
if("".equals(q) || "0".equals(q))
{
result = tugasDao.getAllTugas();
for (int i = 0; i < result.size(); i++)
{
if(result.get(i).getPemilik().getUsername() == null ? currentUser.getUsername() == null : result.get(i).getPemilik().getUsername().equals(currentUser.getUsername()))
{
out.println("<h2>"+result.get(i).getKategori().getNama()+"</h2>");
out.println("<div class=\"tugas\">");
out.println("<div><a href=\"tugas.php?id="+result.get(i).getId()+"\">"+result.get(i).getNama()+"</a></div>");
out.println("<div>Deadline: <strong>"+result.get(i).getTglDeadline()+"</strong></div>");
out.println("<div>");
out.println("Tags: ");
out.println("<ul class=\"tag\">");
for (int n = 0; n < result.get(i).getTags().size(); n++)
{
out.println("<li>"+result.get(i).getTags().toArray()[n].toString()+"</li>");
}
out.println("</ul>");
out.println("</div>");
if(!result.get(i).isStatus())
{
out.println("<div>Status : <input id=\"stats\" type=\"checkbox\" onchange=\"updateStatus(this.value,"+result.get(i).getId()+")\" value=\""+0 +"\"></div>");
}
else if(result.get(i).isStatus())
{
out.println("<div>Status : <input id=\"stats\" type=\"checkbox\" onchange=\"updateStatus(this.value,"+result.get(i).getId()+")\" value=\""+1+"\" checked></div>");
}
out.println("<button id='deleteTugas' onclick='setChosenT(\""+result.get(i).getId()+"\");deleteTask()'>Delete Tugas</button>");
out.println("</div>");
}
else
{
ArrayList<User> assignees=new ArrayList<User>(result.get(i).getAssignees());
for (int x = 0; x < assignees.size(); x++)
{
if(assignees.get(x).getUsername() == null ? currentUser.getUsername() == null : assignees.get(x).getUsername().equals(currentUser.getUsername()))
{
out.println("<h2>"+result.get(i).getKategori().getNama()+"</h2>");
out.println("<div class=\"tugas\">");
out.println("<div><a href=\"tugas.php?id="+result.get(i).getId()+"\">"+result.get(i).getNama()+"</a></div>");
out.println("<div>Deadline: <strong>"+result.get(i).getTglDeadline()+"</strong></div>");
out.println("<div>");
out.println("Tags: ");
out.println("<ul class=\"tag\">");
for (int n = 0; n < result.get(i).getTags().size(); n++)
{
out.println("<li>"+result.get(i).getTags().toArray()[n].toString()+"</li>");
}
out.println("</ul>");
out.println("</div>");
if(!result.get(i).isStatus())
{
out.println("<div>Status : <input id=\"stats\" type=\"checkbox\" onchange=\"updateStatus(this.value,"+result.get(i).getId()+")\" value=\""+0+"\"></div>");
}
else if(result.get(i).isStatus())
{
out.println("<div>Status : <input id=\"stats\" type=\"checkbox\" onchange=\"updateStatus(this.value,"+result.get(i).getId()+")\" value=\""+1+"\" checked></div>");
}
out.println("<button id='deleteTugas' onclick='setChosenT(\""+result.get(i).getId()+"\");deleteTask()'>Delete Tugas</button>");
out.println("</div>");
}
}
}
}
}
else
{
result = tugasDao.getAllTugas();
for (int i = 0; i < result.size(); i++)
{
if(result.get(i).getKategori().getId()==Integer.parseInt(q))
{
if(result.get(i).getPemilik().getUsername() == null ? currentUser.getUsername() == null : result.get(i).getPemilik().getUsername().equals(currentUser.getUsername()))
{
out.println("<h2>"+result.get(i).getKategori().getNama()+"</h2>");
out.println("<div class=\"tugas\">");
out.println("<div><a href=\"tugas.php?id="+result.get(i).getId()+"\">"+result.get(i).getNama()+"</a></div>");
out.println("<div>Deadline: <strong>"+result.get(i).getTglDeadline()+"</strong></div>");
out.println("<div>");
out.println("Tags: ");
out.println("<ul class=\"tag\">");
for (int n = 0; n < result.get(i).getTags().size(); n++)
{
out.println("<li>"+result.get(i).getTags().toArray()[n].toString()+"</li>");
}
out.println("</ul>");
out.println("</div>");
if(!result.get(i).isStatus())
{
out.println("<div>Status : <input id=\"stats\" type=\"checkbox\" onchange=\"updateStatus(this.value,"+result.get(i).getId()+")\" value=\""+0+"\"></div>");
}
else if(result.get(i).isStatus())
{
out.println("<div>Status : <input id=\"stats\" type=\"checkbox\" onchange=\"updateStatus(this.value,"+result.get(i).getId()+")\" value=\""+1+"\" checked></div>");
}
out.println("<button id='deleteTugas' onclick='setChosenT(\""+result.get(i).getId()+"\");deleteTask()'>Delete Tugas</button>");
out.println("</div>");
}
else
{
ArrayList<User> assignees=new ArrayList<User>(result.get(i).getAssignees());
for (int x = 0; x < assignees.size(); x++)
{
if(assignees.get(x).getUsername() == null ? currentUser.getUsername() == null : assignees.get(x).getUsername().equals(currentUser.getUsername()))
{
out.println("<h2>"+result.get(i).getKategori().getNama()+"</h2>");
out.println("<div class=\"tugas\">");
out.println("<div><a href=\"tugas.php?id="+result.get(i).getId()+"\">"+result.get(i).getNama()+"</a></div>");
out.println("<div>Deadline: <strong>"+result.get(i).getTglDeadline()+"</strong></div>");
out.println("<div>");
out.println("Tags: ");
out.println("<ul class=\"tag\">");
for (int n = 0; n < result.get(i).getTags().size(); n++)
{
out.println("<li>"+result.get(i).getTags().toArray()[n].toString()+"</li>");
}
out.println("</ul>");
out.println("</div>");
if(!result.get(i).isStatus())
{
out.println("<div>Status : <input id=\"stats\" type=\"checkbox\" onchange=\"updateStatus(this.value,"+result.get(i).getId()+")\" value=\""+0+"\"></div>");
}
else if(result.get(i).isStatus())
{
out.println("<div>Status : <input id=\"stats\" type=\"checkbox\" onchange=\"updateStatus(this.value,"+result.get(i).getId()+")\" value=\""+1+"\" checked></div>");
}
out.println("<button id='deleteTugas' onclick='setChosenT(\""+result.get(i).getId()+"\");deleteTask()'>Delete Tugas</button>");
out.println("</div>");
}
}
}
}
}
}

} finally {
out.close();
}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
89 changes: 89 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/ajax/UpdateStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@

package id.ac.itb.todolist.ajax;

import id.ac.itb.todolist.dao.TugasDao;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "UpdateStatus", urlPatterns = {"/ajax/UpdateStatus"})
public class UpdateStatus extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String q = request.getParameter("q");
String n = request.getParameter("n");
TugasDao tugasDao=new TugasDao();
try {
if(Integer.parseInt(n)==0)
{
out.println(Integer.parseInt(n));
tugasDao.setStats(Integer.parseInt(q), 1);
}
else if(Integer.parseInt(n)==1)
{
out.println(Integer.parseInt(n));
tugasDao.setStats(Integer.parseInt(q), 0);
}
} finally {
out.close();
}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package id.ac.itb.todolist.controller;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*
* @author User
*/
@WebServlet(name = "createTugas", urlPatterns = {"/CreateTugas"})
public class CreateTugas extends HttpServlet {

/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();

//if (session.getAttribute("user") != null)
//{
// user sudah login, dialihkan ke halaman lain

request.setAttribute("title", "Todolist | Create Tugas");
request.setAttribute("headTags", "<script src=\"scripts/formtugas.js\" type=\"application/javascript\"><script src=\"scripts/tugas.js\" type=\"application/javascript\"></script><script src=\"scripts/createtugas.js\" type=\"application/javascript\"></script>");
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/create/createtugas.jsp");
view.forward(request, response);
//}
//else
//{
// response.sendRedirect("./index");
//}
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP
* <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Handles the HTTP
* <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
41 changes: 24 additions & 17 deletions TodolistJava/src/java/id/ac/itb/todolist/controller/Dashboard.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package id.ac.itb.todolist.controller;

import com.google.gson.JsonObject;
import id.ac.itb.todolist.dao.UserDao;
import id.ac.itb.todolist.model.User;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*
* @author User
*/
@WebServlet(name = "Dashboard", urlPatterns = {"/Dashboard"})
public class Dashboard extends HttpServlet {

/**
@@ -33,20 +31,29 @@ protected void processRequest(HttpServletRequest request, HttpServletResponse re
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();

//if (session.getAttribute("user") != null)
//{
JsonObject jObject = new JsonObject();
UserDao userDao = new UserDao();
User user = userDao.getUserLogin("edwardsp", "lalala");
if (user != null) {
session.setAttribute("user", user);
jObject.addProperty("status", 200);
} else {
jObject.addProperty("status", 401);
jObject.addProperty("message", "Login failed, username/password does not correct.");
}
if (session.getAttribute("user") != null)
{
// user sudah login, dialihkan ke halaman lain
request.setAttribute("title", "Todolist | Dashboard");
request.setAttribute("headTags", "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles/default.css\" /><link rel=\"stylesheet\" type=\"text/css\" href=\"styles/mediaqueries.css\" /><script src=\"scripts/helper.js\" type=\"application/javascript\"></script><script src=\"scripts/popup.js\" type=\"application/javascript\"></script><script src=\"scripts/dashboard.js\" type=\"application/javascript\"></script><script src=\"scripts/kategori.js\" type=\"application/javascript\"></script>");
request.setAttribute("headTags", "<script src=\"scripts/dashboard.js\" type=\"application/javascript\"></script><script type=\"application/javascript\" src=\"scripts/helper/popup.js\"></script><script src=\"scripts/kategori.js\" type=\"application/javascript\"></script>");
request.setAttribute("bodyAttrs", "<body onload=\"updateAddButtonVisibility();updateDelButtonVisibility();loadtugas(\'\');\"><div id=\"blanket\"></div><div id=\"popUpDiv\"><h1>Create new category</h1><div class=\"padding12px\"><label for=\"txtNewKategori\">Name</label>:<br /><input id=\"txtNewKategori\" type=\"text\" placeholder=\"eg: IF40XX\" /></div><br /><div class=\"padding12px\">Priviledge users:<br /><ul id=\"userList\" class=\"tag\"></ul><br><input id=\"userL\" name=\"userL\" onfocus=\"showCoordinator()\" type=\"text\" tabindex=\"4\" list=\"user\" /><datalist id=\"user\" ></datalist><button onclick=\"return addCoordinator();\">Add</button></div><br /><div class=\"rightalign padding12px\"><button onclick=\"popup(\'popUpDiv\',\'blanket\',300,600); NewKategori()\">OK</button> <button onclick=\"popup(\'popUpDiv\',\'blanket\',300,600)\">Cancel</button></div><br /></div>");
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/dashboard/dashboard.jsp");
view.forward(request, response);
//}
//else
//{
// response.sendRedirect("./dashboard.jsp");
//}
}
else
{
response.sendRedirect("./index");
}
}


160 changes: 160 additions & 0 deletions TodolistJava/src/java/id/ac/itb/todolist/dao/CategoryDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@

package id.ac.itb.todolist.dao;

import id.ac.itb.todolist.model.Category;
import id.ac.itb.todolist.model.User;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

public class CategoryDao extends DataAccessObject {

public Category getCategory(int idKategori){
Category category=null;
try{
PreparedStatement preparedStatement = connection.
prepareStatement("SELECT * FROM categories WHERE id=? ;");
preparedStatement.setInt(1, idKategori);
ResultSet rs = preparedStatement.executeQuery();

if (rs.next()) {
category=new Category();
category.setId(rs.getInt("id"));
category.setNama(rs.getString("nama"));
category.setLastMod(rs.getTimestamp("last_mod"));

}
}catch (SQLException e) {
e.printStackTrace();
}
return category;
}

public ArrayList<Category> getAllCategory(){
ArrayList<Category> result = null;
try {
PreparedStatement preparedStatement = connection.
prepareStatement("SELECT * FROM categories ;");

ResultSet rs = preparedStatement.executeQuery();

result = new ArrayList<Category>();
while (rs.next()) {
Category item = new Category();
item.setId(rs.getInt("id"));
item.setNama(rs.getString("nama"));
item.setLastMod(rs.getTimestamp("last_mod"));

result.add(item);
}

} catch (SQLException e) {
e.printStackTrace();
}
return result;
}

public int NewKategori(String nama,String pembuat){
try {
PreparedStatement preparedStatement = connection
.prepareStatement("INSERT INTO categories(id,nama) VALUES (0,?);");
// Parameters start with 1
preparedStatement.setString(1, nama);
preparedStatement.executeUpdate();
return addNewestCoordinator(pembuat);
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}

public int DeleteKategori(int id){
try {
PreparedStatement preparedStatement = connection
.prepareStatement("DELETE FROM categories WHERE id=?");
// Parameters start with 1
preparedStatement.setInt(1, id);
return preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}

public int addCoordinator(int id,String pembuat) {
try {
PreparedStatement preparedStatement = connection
.prepareStatement("INSERT INTO coordinator(id_kategori,user) VALUES (?,?);");
// Parameters start with 1
preparedStatement.setInt(1, id);
preparedStatement.setString(2, pembuat);
return preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}

public int addNewestCoordinator(String pembuat) {
try {
PreparedStatement preparedStatement = connection
.prepareStatement("SELECT id FROM categories ORDER BY last_mod DESC LIMIT 1;");
ResultSet rs = preparedStatement.executeQuery();

int x=-1;
if (rs.next()) {
x= addCoordinator(rs.getInt("id"),pembuat);
}
return x;
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}

public ArrayList<Category> getAssigneeCat(String username){
ArrayList<Category> result = null;
try {
PreparedStatement preparedStatement = connection.
prepareStatement("SELECT t.id AS id, t.nama AS nama, tgl_deadline, `status` , t.last_mod AS last_mod, pemilik, id_kategori,username, c.nama AS nama_kategori FROM categories c, tugas t, assignees s WHERE id_kategori NOT IN (SELECT id_kategori FROM coordinator WHERE user=? ) AND username=? AND t.id=s.id_tugas AND t.id_kategori=c.id");
preparedStatement.setString(1, username);
ResultSet rs = preparedStatement.executeQuery();

result = new ArrayList<Category>();
while (rs.next()) {
Category item = new Category();
item.setId(rs.getInt("id"));
item.setNama(rs.getString("nama"));
item.setLastMod(rs.getTimestamp("last_mod"));

result.add(item);
}

} catch (SQLException e) {
e.printStackTrace();
}
return result;
}

public ArrayList<String> getUser(int idKategori){
ArrayList<String> result = null;
try{
PreparedStatement preparedStatement = connection.
prepareStatement("SELECT user FROM coordinator WHERE id_kategori=? ;");
preparedStatement.setInt(1, idKategori);
ResultSet rs = preparedStatement.executeQuery();

result = new ArrayList<String>();
while (rs.next()) {
String item=rs.getString("user");

result.add(item);
}
}catch (SQLException e) {
e.printStackTrace();
}
return result;
}
}
112 changes: 111 additions & 1 deletion TodolistJava/src/java/id/ac/itb/todolist/dao/TugasDao.java
Original file line number Diff line number Diff line change
@@ -217,7 +217,6 @@ public boolean isAssignee(int idTugas, String username) {
preparedStatement.setString(2, username);

ResultSet rs = preparedStatement.executeQuery();

if (rs.next()) {
return true;
}
@@ -365,4 +364,115 @@ public List<String> getSuggestionTags(int idTugas, String keyword, int limit) {

return result;
}
public int setStats(int idTugas, int n) {
try {
PreparedStatement preparedStatement = connection.
prepareStatement("UPDATE `tugas` SET `status` = ? WHERE `id` = ?;");
preparedStatement.setInt(1, n);
preparedStatement.setInt(2, idTugas);

return preparedStatement.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}

public int deleteTask(int idTugas) {
try {
PreparedStatement preparedStatement = connection.
prepareStatement("DELETE FROM `tugas` WHERE id=?;");
preparedStatement.setInt(1, idTugas);

return preparedStatement.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}

public int AddTask(String nama,Date deadline, String pemilik, int id){
try {

PreparedStatement preparedStatement = connection.
prepareStatement("INSERT INTO tugas(nama, tgl_deadline, pemilik,id_kategori) VALUES (?, ?, ?, ?);");
preparedStatement.setString(1, nama);
preparedStatement.setDate(2, deadline);
preparedStatement.setString(3, pemilik);
preparedStatement.setInt(4, id);
int x= preparedStatement.executeUpdate();
return x;

} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}

public int getNewestId()
{
int x=-1;
try {
PreparedStatement preparedStatement = connection.
prepareStatement("SELECT id FROM tugas ORDER BY last_mod DESC LIMIT 1");

ResultSet rs = preparedStatement.executeQuery();
if(rs.next())
{
x=rs.getInt("id");
}
} catch (SQLException e) {
e.printStackTrace();
}
return x;
}

public ArrayList<Tugas> getAllTugas() {
ArrayList<Tugas> result = null;
Tugas tugas = null;
try {
PreparedStatement preparedStatement = connection.
prepareStatement("SELECT t.`id` AS `id`, t.`nama` AS `nama`, `tgl_deadline`, `status` , t.`last_mod` AS `last_mod`, t.`pemilik` AS `pemilik_username`, u.`email` AS `pemilik_email`, u.`password` AS `pemilik_password`, u.`full_name` AS `pemilik_full_name`, u.`tgl_lahir` AS `pemilik_tgl_lahir`, u.`avatar` AS `pemilik_avatar`, c.`id` AS `kategori_id`, c.`nama` AS `kategori_nama`, c.`last_mod` AS `kategori_last_mod` FROM `categories` c, `tugas` t, `users` u WHERE c.`id` = t.`id_kategori` AND u.`username` = t.`pemilik`;");

ResultSet rs = preparedStatement.executeQuery();

result = new ArrayList<Tugas>();
while (rs.next()) {
tugas = new Tugas();

tugas.setId(rs.getInt("id"));
tugas.setNama(rs.getString("nama"));
tugas.setTglDeadline(rs.getDate("tgl_deadline"));
tugas.setStatus(rs.getBoolean("status"));
tugas.setLastMod(rs.getTimestamp("last_mod"));

User pemilik = new User();
pemilik.setUsername(rs.getString("pemilik_username"));
pemilik.setEmail(rs.getString("pemilik_email"));
pemilik.setHashedPassword(rs.getString("pemilik_password"));
pemilik.setFullName(rs.getString("pemilik_full_name"));
pemilik.setTglLahir(rs.getDate("pemilik_tgl_lahir"));
pemilik.setAvatar(rs.getString("pemilik_avatar"));
tugas.setPemilik(pemilik);

Category kategori = new Category();
kategori.setId(rs.getInt("kategori_id"));
kategori.setNama(rs.getString("kategori_nama"));
kategori.setLastMod(rs.getTimestamp("kategori_last_mod"));
tugas.setKategori(kategori);

tugas.setTags(getTags(rs.getInt("id")));
tugas.setAttachments(getAttachments(rs.getInt("id")));
tugas.setAssignees(getAssignees(rs.getInt("id")));

result.add(tugas);
}

} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
}
22 changes: 21 additions & 1 deletion TodolistJava/src/java/id/ac/itb/todolist/dao/UserDao.java
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class UserDao extends DataAccessObject {

@@ -65,7 +66,7 @@ public boolean isAvailableUsername(String username) {
ResultSet rs = preparedStatement.executeQuery();

if (rs.next()) {
return false;
return true;
}
} catch (SQLException e) {
e.printStackTrace();
@@ -93,4 +94,23 @@ public boolean isAvailableEmail(String email) {

return true;
}

public ArrayList<String> getUsers() {
ArrayList<String> result = null;
try {
PreparedStatement preparedStatement = connection.
prepareStatement("SELECT username FROM users ;");

ResultSet rs = preparedStatement.executeQuery();

result = new ArrayList<String>();
while (rs.next()) {
result.add(rs.getString("username"));
}

} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
}
9 changes: 3 additions & 6 deletions TodolistJava/web/WEB-INF/includes/header.inc.jsp
Original file line number Diff line number Diff line change
@@ -15,13 +15,12 @@
<script src="./scripts/datetimepicker_css.js" type="application/javascript"></script>
<c:out value="${headTags}" default="" escapeXml="false" />
</head>
<body <c:out value="${bodyAttrs}" default="" escapeXml="false" />>
<div class="page">
<body <c:out value="${bodyAttrs}" default="" escapeXml="false" />> <div class="page">
<header class="content">
<nav>
<div class="logo"><a href="dashboard.php"><img alt="Home" src="images/logo.png" /></a></div>
<ul>
<li><div><a href="dashboard.php">Dashboard</a></div></li><li><div><a href="profile.php">Profile</a></div></li><li><div><a href="index.php?logout">Logout</a></div></li>
<li><div><a href="dashboard.jsp">Dashboard</a></div></li><li><div><a href="profile.php">Profile</a></div></li><li><div><a href="index.php?logout">Logout</a></div></li>
</ul>
<div class="search">
<div id="searchwrapper">
@@ -40,8 +39,6 @@
</div>
</div>
</nav>
<div class="welcomebar">
<a href="./profile.php"><img src="./images/avatars/<?php echo $_SESSION["user"]["avatar"]; ?>" alt="<?php echo $_SESSION["user"]["full_name"]; ?>" width="32" height="32" /></a> Hi <strong><?php echo $_SESSION["user"]["full_name"]; ?></strong> (<a href="./profile.php"><?php echo $_SESSION["user"]["username"]; ?></a>)
</div>
<a href="./profile.jsp"><img src="./images/avatars/<?php echo $_SESSION["user"]["avatar"]; ?>" alt="<?php echo $_SESSION["user"]["full_name"]; ?>" width="32" height="32" /></a> Hi <strong><?php echo $_SESSION["user"]["full_name"]; ?></strong> (<a href="./profile.php"><?php echo $_SESSION["user"]["username"]; ?></a>)
</header>
<div class ="content">
63 changes: 63 additions & 0 deletions TodolistJava/web/WEB-INF/views/create/createtugas.jsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<jsp:include page="/WEB-INF/includes/header.inc.jsp" />
<h1>Buat Tugas Baru</h1>
<div class="formtugas">
<form name="formTugas1" enctype="multipart/form-data" onsubmit="return false;">
<ul class="item">
<li id="folil0">
<div>
<input id="namakategori" name="namakategori" type="text" maxlength="25" tabindex="1" required
title="pilih salah satu kategori" value="<%= request.getParameter("id_kat")%>" hidden>
</div>
</li>

<li id="folil1">
<label id="title1">Nama task:</label>
<div>
<input id="namatask" name="namatask" type="text" maxlength="25" tabindex="1" pattern="[A-Za-z0-9 ]{2,25}" required
title="Nama task tidak diperbolehkan menggunakan karakter spesial"/>
</div>
</li>

<li id="folil2">
<label id="title2">Attachment:</label>
<div>
<input id="attachment" name="attachments[]" type="file" tabindex="2" accept="application/pdf,application/msword,image/*" multiple />
</div>
</li>

<li id="folil3">
<label id="title3">Deadline:</label>
<div>
<input type="text" class="regbox" id="deadline" name="deadline" required="required" /><a href="#" onclick="NewCssCal('deadline', 'yyyyMMdd', 'dropdown', false, 24, false); return false;"><img src="./images/cal/cal.gif" width="16" height="16" border="0" alt="Pick a date"></a>
</div>
</li>

<li id="folil4">
<label id="title4">Assignee:</label>
<div>
<ul id="assigneesList" class="tag"></ul>
<br>
<input id="assignee" name="assignee" onfocus="showAssignee()" type="text" tabindex="4" list="user" />

<datalist id="user">
</datalist>
<button type="button" onclick="addAssignees(); return false">Add</button>
<input id="assigneeI" name="assigneeI" type="text" value="" tabindex="4" hidden />
</div>

</li>

<li id="folil5">
<label id="title5">Tag:</label>
<div>
<input id="tag" name="tag" type="text" tabindex="5" pattern="[A-Za-z0-9, ]{1,}"/>
</div>
</li>

<li id="btn">
<input type="submit" class="button" onclick="return createT()"/>
</li>
</ul>
</form>
</div>
<jsp:include page="/WEB-INF/includes/footer.inc.jsp" />
28 changes: 28 additions & 0 deletions TodolistJava/web/scripts/createtugas.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
function showAssignee()
{
ajax_get("./ajax/AssigneeList", function(xhr) {
document.getElementById("user").innerHTML=xhr.responseText;
});
}

function createT()
{
var qry = 'namakategori=' + encodeURIComponent(document.forms["formTugas1"]["namakategori"].value) + '&namatask=' + encodeURIComponent(document.forms["formTugas1"]["namatask"].value) + '&deadline=' + encodeURIComponent(document.forms["formTugas1"]["deadline"].value) + '&assigneeI=' + encodeURIComponent(document.forms["formTugas1"]["assigneeI"].value) + '&tag=' + encodeURIComponent(document.forms["formTugas1"]["tag"].value);
ajax_post("./ajax/Create", qry, function(xhr) {

});
}

function addAssignees() {
var newAssignee = document.getElementById("assignee");
var assigneesList = document.getElementById("assigneesList");

if (newAssignee.value == "") {
alert("Nama harus dimasukkan");
return false;
}

document.getElementById("assigneeI").value+=newAssignee.value+",";
assigneesList.innerHTML+= "<li>"+newAssignee.value+"</li>";
newAssignee.value="";
}
126 changes: 126 additions & 0 deletions TodolistJava/web/scripts/dashboard.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
var chosen=0;
var chosenTask=0;
var coordinatorArr="";

function addCoordinator() {
var newcoordinator = document.getElementById("userL");
var coordinatorList = document.getElementById("userList");

if (newcoordinator.value == "") {
alert("Nama harus dimasukkan");
return false;
}
coordinatorArr+=newcoordinator.value+",";
coordinatorList.innerHTML += "<li>" + newcoordinator.value + "</li> ";
newcoordinator.value = "";

return false;
}

function updateAddButtonVisibility() {
if(chosen!=0)
{
var elmt = document.getElementById('addTask');
elmt.style.display = 'inline-block';
}
else if(chosen==0)
{
elmt = document.getElementById('addTask');
elmt.style.display = 'none';
}
}

function updateDelButtonVisibility() {
if(chosen!=0)
{
var elmt = document.getElementById('deleteCat');
elmt.style.display = 'inline-block';
}
else if(chosen==0)
{
elmt = document.getElementById('deleteCat');
elmt.style.display = 'none';
}
}

function setChosen(str)
{
chosen=str;
updateAddButtonVisibility();
updateDelButtonVisibility();
}

function setChosenT(str)
{
chosenTask=str;
}

function loadKategori()
{
ajax_get("./ajax/KategoriN", function(xhr) {
document.getElementById("nama_k").innerHTML=xhr.responseText;
});
}

function NewKategori() {
var q = document.getElementById('txtNewKategori').value;
ajax_get("./ajax/CreateKategori?q="+q+"&Arr="+coordinatorArr, function(xhr) {
loadKategori();
});

return false;
}

function showCoordinator()
{
ajax_get("./ajax/AssigneeList", function(xhr) {
document.getElementById("user").innerHTML=xhr.responseText;
});
}

function updateStatus(n,str) {
ajax_get("./ajax/UpdateStatus?q="+str+"&n="+n, function(xhr) {
document.getElementById("stats").innerHTML=xhr.responseText;
});
ajax_get("./ajax/TugasA?q="+chosen, function(xhr) {
document.getElementById("tugasT").innerHTML=xhr.responseText;
});
return false;
}

function NewTask() {
if(chosen!=0)
{
window.location = "./CreateTugas?id_kat="+chosen;
}
}

function deleteCategory()
{
if(chosen!=0)
{
ajax_get("./ajax/DeleteCat?q="+chosen, function(xhr) {
window.location = "./dashboard.jsp";
});

}
}

function deleteTask()
{
if(chosenTask!=0)
{
ajax_get("./ajax/DeleteTask?q="+chosenTask, function(xhr) {
window.location = "./dashboard.jsp";
});
}
}

function loadtugas(str)
{
ajax_get("./ajax/TugasA?q="+str, function(xhr) {
document.getElementById("tugasT").innerHTML=xhr.responseText;
});

return false;
}
44 changes: 44 additions & 0 deletions TodolistJava/web/scripts/formtugas.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
var ck_taskname = /[a-zA-Z0-9]{1,25}$/;
function validate(form) {
var taskname = form.namatask.value;
var attachment = form.attachment.value;
var deadline = form.deadline.value;
var assignee = form.assignee.value;
var tag = form.tag.value;
var errors = [];

if(!ck_taskname.test(taskname)) {
errors[errors.length] = "Nama tugas tidak valid.";
}

if (assignee=="") {
errors[errors.length] = "Assignee tidak valid.";
}

if (tag=="") {
errors[errors.length] = "Tag tidak valid.";
}

if (deadline=="") {
errors[errors.length] = "Deadline belum diisi.";
}
if (errors.length > 0) {
reportErrors(errors);
return false;
}
return true;
}

function reportErrors(errors){
var msg = "Please Enter Valide Data...\n";
for (var i = 0; i<errors.length; i++) {
var numError = i + 1;
msg += "\n" + numError + ". " + errors[i];
}
alert(msg);
}

3 changes: 3 additions & 0 deletions TodolistJava/web/scripts/kategori.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ajax_get("./ajax/KategoriN", function(xhr) {
document.getElementById("nama_k").innerHTML=xhr.responseText;
});
346 changes: 346 additions & 0 deletions TodolistJava/web/scripts/tugas.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,346 @@
var detilTugas;
var id;
var asTextbox;

function onload(id_tugas) {
id = id_tugas;
new nicEditor({iconsPath : './images/nicEditorIcons.gif'}).panelInstance('txtKomentar');
requestUpdate(id_tugas, 5000, true, 0, 10, false);
}

function requestUpdate(id_tugas, timeout, updateAttachment, startc, countc, forceUpdate) {
var url = './ajax/detilTugas.php?id_tugas=' + id_tugas + '&startc=' + startc + '&countc=' + countc;
if (typeof detilTugas != 'undefined' && !forceUpdate) {
url += '&update=' + detilTugas.responseTime + '&priviledge=' + detilTugas.priviledge;
}

ajax_get(url, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus == 200) {
if (typeof detilTugas != 'undefined' && detilTugas.priviledge != json_obj.priviledge)
{
window.location.reload(true);
}
else
{
detilTugas = json_obj;
updateContent(updateAttachment);
}
} else if (json_obj.responseStatus == 304) {
// do nothing, already updated
} else if (json_obj.responseStatus == 205) {
// reset content
window.location.reload(true);
} else {
alert(json_obj.message);
window.location.reload(true);
}

if (timeout > 0) {
var delegate = "requestUpdate(" + id_tugas + ", " + timeout + ", " + false + ", " + startc + ", " + countc + ", " + false + ")";
// alert(delegate);
setTimeout(delegate, timeout);
}
});
}

function updateContent(updateAttachment) {
var divNamaTugas = document.getElementById("namaTugas");
var divStatusTugas = document.getElementById("statusTugas");
var cbStatusTugas = document.getElementById("cbStatus");
var divAttachmentTugas = document.getElementById("attachmentTugas");
var divDeadlineTugas = document.getElementById("deadlineDisplayDiv");
var txtDeadlineTugas = document.getElementById("deadline");
var divAssigneesTugas = document.getElementById("assigneesList");
var divKomentarTugas = document.getElementById("komentar");
var divKomentarStatTugas = document.getElementById("komentarStatistic");
var selKomentarPageTugas = document.getElementById("komentarPage");

divNamaTugas.innerHTML = detilTugas.nama;
if (detilTugas.status == 0)
{
cbStatusTugas.checked = false;
divStatusTugas.innerHTML = 'Belum selesai';
}
else
{
cbStatusTugas.checked = true;
divStatusTugas.innerHTML = 'Selesai';
}

if (updateAttachment) {
divAttachmentTugas.innerHTML = '';
detilTugas.attachment.forEach(function(entry) {
if (entry.type == "image")
{
divAttachmentTugas.innerHTML += '<div><img src="./attachment.php?file=' + encodeURIComponent(entry.filename) + '&nama=' + encodeURIComponent(entry.name) + '" alt="' + entry.name + '" /></div>';
}
else if (entry.type == "video")
{
divAttachmentTugas.innerHTML += '<div><video width="320" height="240" controls><source src="./attachment.php?file=' + encodeURIComponent(entry.filename) + '&nama=' + encodeURIComponent(entry.name) + '" /><div><a href="./attachment.php?file=' + encodeURIComponent(entry.filename) + '&nama=' + encodeURIComponent(entry.name) + '" target="_blank">' + entry.name + '</a></div></video></div>';
}
else
{
divAttachmentTugas.innerHTML += '<div><a href="./attachment.php?file=' + encodeURIComponent(entry.filename) + '&nama=' + encodeURIComponent(entry.name) + '" target="_blank">' + entry.name + '</a></div>'
}
});
}

divDeadlineTugas.innerHTML = detilTugas.tgl_deadline;
txtDeadlineTugas.value = detilTugas.tgl_deadline;

var assigneesTemp = '';
detilTugas.assignees.forEach(function(entry) {
assigneesTemp += '<li><a href="./profile.php?u=' + entry.username + '">' + entry.full_name + ' (' + entry.username + ')</a>';
if (detilTugas.priviledge) {
assigneesTemp += ' | <a class="red" href="#" onclick="removeAssignee(\'' + entry.username + '\'); return false;">&times;</a>';
}
assigneesTemp += '</li> ';
});
divAssigneesTugas.innerHTML = assigneesTemp;

writeTags();

var strKomentar = '';
detilTugas.comments.comments.forEach(function(entry) {
strKomentar += '<div class="item"><div class="title"><strong><img src="./images/avatars/' + entry.avatar + '" alt="' + entry.full_name + '" width="32" height="32" /> ' + entry.full_name + ' (<a href="./profile.php?u=' + entry.user + '">' + entry.user + '</a>)</strong> on ' + entry.time;
if (entry.priviledge == 1) {
strKomentar += ' (<a href="#" class="red" onclick="removeComment(' + entry.id + '); return false;">Remove</a>)';
}
strKomentar += '</div><div class="comment">' + entry.content + '</div></div>';
});
divKomentarTugas.innerHTML = strKomentar;

divKomentarStatTugas.innerHTML = detilTugas.comments.comments.length + '/' + detilTugas.comments.total;
selKomentarPageTugas.innerHTML = '';
for (var i = 1, len = Math.ceil(detilTugas.comments.total / detilTugas.comments.count); i <= len; i++) {
if (((i - 1) * detilTugas.comments.count) == detilTugas.comments.startindex) {
selKomentarPageTugas.innerHTML += '<option value="' + i + '" selected>' + i + '</option>';
} else {
selKomentarPageTugas.innerHTML += '<option value="' + i + '">' + i + '</option>';
}
};
}

function writeTags() {
var tagsList = document.getElementById("tagsList");
var tagsTemp = '';
for (var i=0; i < detilTugas.tag.length; i++) {
tagsTemp += '<li>' + detilTugas.tag[i];
if (detilTugas.priviledge) {
tagsTemp += ' | <a href="#" class="red" onclick="removeTag(\'' + detilTugas.tag[i] + '\'); return false;">&times;</a>';
}
tagsTemp += '</li> ';
}
tagsList.innerHTML = tagsTemp;
}

function writeAssignees() {
var assigneesList = document.getElementById("assigneesList");

assigneesList.innerHTML = '';
for (var i=0; i<assigneesTugas.length; i++) {
assigneesList.innerHTML += "<li>" + assigneesTugas[i] + "</li> ";
}
}

function addAssignee() {
var newAssignee = document.getElementById("assignee");
var assigneesList = document.getElementById("assigneesList");

if (newAssignee.value == "") {
alert("Nama harus dimasukkan");
return false;
}

var url = "./ajax/updateTugas.php?adda&id_tugas=" + detilTugas.id + "&username=" + newAssignee.value;
ajax_get(url, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
} else {
// do nothing
// alert("Berhasil");
newAssignee.value = '';
requestUpdate(detilTugas.id, -1, false, detilTugas.comments.startindex, detilTugas.comments.count, true);
}
});

return false;
}

function saveTugas() {
document.getElementById("tagsEditDiv").style.visibility = "hidden";
document.getElementById("assigneeEditDiv").style.display = "none";
document.getElementById("deadlineEditDiv").style.display = "none";
document.getElementById("doneButton").style.display = "none";
document.getElementById("deadlineDisplayDiv").style.display = "block";
//document.getElementById("tagsDisplayDiv").style.display = "block";
document.getElementById("editButton").style.display = "inline-block";

var deadlineDisplay = document.getElementById("deadlineDisplayDiv");
var deadlineTextBox = document.getElementById("deadline");
if (deadlineTextBox.value == '') {
deadlineTextBox.value = detilTugas.tgl_deadline;
} else {
deadlineDisplay.innerHTML = 'Loading...';

ajax_get("./ajax/updateTugas.php?updatedeadline&id_tugas=" + id + "&deadline=" + deadlineTextBox.value, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
} else {
// do nothing
// alert("Berhasil");
requestUpdate(detilTugas.id, -1, false, 0, detilTugas.comments.count, true);
}
});
}
}

function editTugas() {
document.getElementById("tagsEditDiv").style.visibility = "visible";
document.getElementById("assigneeEditDiv").style.display = "block";
document.getElementById("deadlineEditDiv").style.display = "block";
document.getElementById("doneButton").style.display = "inline-block";
document.getElementById("deadlineDisplayDiv").style.display = "none";
//document.getElementById("tagsDisplayDiv").style.display = "none";
document.getElementById("editButton").style.display = "none";

if (typeof asTextbox == 'undefined')
{
asTextbox = new AutoSuggestControl(document.getElementById("assignee"), new AssigneeSuggestions(id));
}

return false;
}

function toggleStatus() {
var url = "./ajax/updateTugas.php?chstatus&id_tugas=" + detilTugas.id + "&status=" + (detilTugas.status == 0 ? 1 : 0);
ajax_get(url, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
} else {
// do nothing
// alert("Berhasil");
requestUpdate(detilTugas.id, -1, false, detilTugas.comments.startindex, detilTugas.comments.count, true);
}
});
}

function tagsSave(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode == 188) { // Comma
var txtTag = document.getElementById("tags");
var url = "./ajax/updateTugas.php?addt&id_tugas=" + id + "&tag=" + encodeURIComponent(txtTag.value.replace(",", ""));
txtTag.value = '';
ajax_get(url, function (xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
}
});
} else {
ajax_get("./ajax/updateTugas.php?suggestt&id_tugas=" + id + "&start=" + encodeURIComponent(document.getElementById("tags").value), function (xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus == 200) {
var divTagSug = document.getElementById('tagsSug');
divTagSug.innerHTML = '';
json_obj.suggestedTags.forEach(function(entry){
divTagSug.innerHTML += '<option value="' + entry.tag + '">' + entry.tag + '</option>';
});
}
});
}
}

function removeAssignee(username) {
ajax_get("./ajax/updateTugas.php?removea&id_tugas=" + detilTugas.id + "&username=" + username, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
} else {
// do nothing
// alert("Berhasil");
requestUpdate(detilTugas.id, -1, false, detilTugas.comments.startindex, detilTugas.comments.count, true);
}
});
}

function removeTag(tag) {
ajax_get("./ajax/updateTugas.php?removet&id_tugas=" + detilTugas.id + "&tag=" + tag, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
} else {
// do nothing
// alert("Berhasil");
requestUpdate(detilTugas.id, -1, false, detilTugas.comments.startindex, detilTugas.comments.count, true);
}
});
}

function changeKomentarPage(sel) {
var value = sel.options[sel.selectedIndex].value;
requestUpdate(detilTugas.id, -1, false, (value - 1) * detilTugas.comments.count, detilTugas.comments.count, true);
}

function removeComment(id) {
ajax_get("./ajax/updateTugas.php?removec&id_komentar=" + id, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
} else {
// do nothing
// alert("Berhasil");
requestUpdate(detilTugas.id, -1, false, 0, detilTugas.comments.count, true);
}
});
}

function addComment() {
var txtKomentar = nicEditors.findEditor('txtKomentar');
var qry = 'addc=1&id_tugas=' + encodeURIComponent(detilTugas.id) + '&content=' + encodeURIComponent(txtKomentar.getContent());
ajax_post("./ajax/updateTugas.php", qry, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
} else {
// do nothing
// alert("Berhasil");
txtKomentar.setContent('');
requestUpdate(detilTugas.id, -1, false, detilTugas.comments.startindex, detilTugas.comments.count, true);
}
});

// var txtKomentar = document.getElementById("txtKomentar");
// var qry = 'addc=1&id_tugas=' + encodeURIComponent(detilTugas.id) + '&content=' + encodeURIComponent(txtKomentar.value);
// ajax_post("./ajax/updateTugas.php", qry, function(xhr) {
// var json_obj = JSON.parse(xhr.responseText);
// if (json_obj.responseStatus != 200) {
// alert(json_obj.message);
// } else {
// // do nothing
// // alert("Berhasil");
// txtKomentar.value = '';
// requestUpdate(detilTugas.id, -1, false, detilTugas.comments.startindex, detilTugas.comments.count);
// }
// });
}

function deleteTugas() {
var r = window.confirm("Are you sure want to delete this task?");
if (r) {
ajax_get("./ajax/updateTugas.php?removetugas&id_tugas=" + id, function(xhr) {
var json_obj = JSON.parse(xhr.responseText);
if (json_obj.responseStatus != 200) {
alert(json_obj.message);
} else {
// do nothing
// alert("Berhasil");
requestUpdate(detilTugas.id, -1, false, 0, detilTugas.comments.count, true);
}
});
}
}