Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 10 additions & 0 deletions .idea/Stratusolve-Exercise.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions .idea/copyright/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 0 additions & 14 deletions .idea/misc.xml

This file was deleted.

225 changes: 149 additions & 76 deletions .idea/workspace.xml

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions Task_Data.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"TaskId":1,"TaskName":"Test","TaskDescription":"Test"},{"TaskId":"2","TaskName":"Test2","TaskDescription":"Test2"}]
43 changes: 27 additions & 16 deletions index.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,18 +60,6 @@
</button>
<div id="TaskList" class="list-group">
<!-- Assignment: These are simply dummy tasks to show how it should look and work. You need to dynamically update this list with actual tasks -->
<a id="1" href="#" class="list-group-item" data-toggle="modal" data-target="#myModal">
<h4 class="list-group-item-heading">Task Name</h4>
<p class="list-group-item-text">Task Description</p>
</a>
<a id="2" href="#" class="list-group-item" data-toggle="modal" data-target="#myModal">
<h4 class="list-group-item-heading">Task Name</h4>
<p class="list-group-item-text">Task Description</p>
</a>
<a id="3" href="#" class="list-group-item" data-toggle="modal" data-target="#myModal">
<h4 class="list-group-item-heading">Task Name</h4>
<p class="list-group-item-text">Task Description</p>
</a>
</div>
</div>
<div class="col-md-3">
Expand All @@ -83,27 +71,50 @@
<script type="text/javascript" src="assets/js/jquery-1.12.3.min.js"></script>
<script type="text/javascript" src="assets/js/bootstrap.min.js"></script>
<script type="text/javascript">
var currentTaskId = -1;
$('#myModal').on('show.bs.modal', function (event) {
var triggerElement = $(event.relatedTarget); // Element that triggered the modal
var modal = $(this);
if (triggerElement.attr("id") == 'newTask') {
modal.find('.modal-title').text('New Task');
$('#deleteTask').hide();
currentTaskId = -1;
} else {
modal.find('.modal-title').text('Task details');
$('#deleteTask').show();
currentTaskId = triggerElement.attr("id");
console.log('Task ID: '+triggerElement.attr("id"));
$('#InputTaskName').val(document.getElementById(currentTaskId).children[0].firstChild.data);
$('#InputTaskDescription').val(document.getElementById(currentTaskId).children[1].firstChild.data);
}
});
$('#saveTask').click(function() {
//Assignment: Implement this functionality
alert('You clicked save! Now implement this functionality.');
var taskToUpdate = {"TaskId": currentTaskId, "TaskName": document.getElementById('InputTaskName').value, "TaskDescription": document.getElementById('InputTaskDescription').value};
$.post("update_task.php",
{"action":"update", "taskToUpdate":taskToUpdate },
function ( data ) {
alert('Update... Id:'+data);
currentTaskId = data;
});
$('#myModal').modal('hide');
updateTaskList();
});
$('#deleteTask').click(function() {
//Assignment: Implement this functionality
alert('You clicked delete! Now implement this functionality.');
var taskToUpdate = {"TaskId": currentTaskId, "TaskName": document.getElementById('InputTaskName').value, "TaskDescription": document.getElementById('InputTaskDescription').value};
$.post("update_task.php",
{"action":"delete", "taskToUpdate":taskToUpdate },
function ( data ) {
alert('Delete... Id:'+data);
currentTaskId = data;
});
$('#myModal').modal('hide');
updateTaskList();
});
function updateTaskList() {
$.post("list_tasks.php", function( data ) {
$( "#TaskList" ).html( data );
});
}
updateTaskList();
</script>
</html>
31 changes: 31 additions & 0 deletions list_tasks.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php
/**
* Created by PhpStorm.
* User: johangriesel
* Date: 15122016
* Time: 15:14
* @package ${NAMESPACE}
* @subpackage ${NAME}
* @author johangriesel <info@stratusolve.com>
* Task_Data.txt is expected to be a json encoded string, e.g: [{"TaskId":1,"TaskName":"Test","TaskDescription":"Test"},{"TaskId":"2","TaskName":"Test2","TaskDescription":"Test2"}]
*/
$taskData = file_get_contents('Task_Data.txt');
$html = '<a id="newTask" href="#" class="list-group-item" data-toggle="modal" data-target="#myModal">
<h4 class="list-group-item-heading">No Tasks Available</h4>
<p class="list-group-item-text">Click here to create one</p>
</a>';
if (strlen($taskData) < 1) {
die($html);
}
$taskArray = json_decode($taskData);
if (sizeof($taskArray) > 0) {
$html = '';
foreach ($taskArray as $task) {
$html .= '<a id="'.$task->TaskId.'" href="#" class="list-group-item" data-toggle="modal" data-target="#myModal">
<h4 class="list-group-item-heading">'.$task->TaskName.'</h4>
<p class="list-group-item-text">'.$task->TaskDescription.'</p>
</a>';
}
}
die($html);
?>
73 changes: 61 additions & 12 deletions task.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,82 @@ class Task {
public $TaskId;
public $TaskName;
public $TaskDescription;
protected $TaskDataSource;
protected $TaskDataSourcePath = 'Task_Data.txt';
public function __construct($Id = null) {
if ($Id) {
// This is an existing task
$this->LoadFromId($Id);
} else {
// This is a new task
$this->TaskDataSource = $this->loadFromFile($this->TaskDataSourcePath);
if (!$this->TaskDataSource)
$this->TaskDataSource = array(); // If it does not, then the data source is assumed to be empty and we create an empty array
if (!$this->LoadFromId($Id))
$this->Create();
}
}
protected function Create() {
// This function needs to generate a new unique ID for the task
// Assignment: Generate unique id for the new task
$this->TaskName = '';
$this->TaskDescription = '';
$this->TaskId = $this->getUniqueId();
$this->TaskName = 'New Task';
$this->TaskDescription = 'New Description';
}
protected function getUniqueId() {
// Assignment: Code to get new unique ID
$newID = count($this->TaskDataSource);
if($newID == 0) {
++$newID;
return $newID;
} else {
sort($this->TaskDataSource);
if ($newID < (int)end($this->TaskDataSource)->TaskId) {
$newID = (int)end($this->TaskDataSource)->TaskId;
++$newID;
}
return $newID;
}
}
public function loadFromFile($Path) {
$TempTaskDataSource = file_get_contents($Path);
if (strlen($TempTaskDataSource) > 0)
$TempTaskDataSource = json_decode($TempTaskDataSource); // Should decode to an array of Task objects
else
$TempTaskDataSource = array(); // If it does not, then the data source is assumed to be empty and we create an empty array
return $TempTaskDataSource;

}
protected function LoadFromId($Id = null) {
if ($Id) {
// Assignment: Code to load details here...
$this->TaskDataSource = $this->loadFromFile($this->TaskDataSourcePath);
foreach ($this->TaskDataSource as $task) {
if($Id == $task->TaskId) {
return json_encode($task);
}
}
} else
return null;
}

public function Save() {
//Assignment: Code to save task here
if($this->TaskId == -1) {
$this->TaskId = $this->getUniqueId();
array_push($this->TaskDataSource, $this);
} else {
foreach ($this->TaskDataSource as $task) {
if($this->TaskId == $task->TaskId) {
$task->TaskName = $this->TaskName;
$task->TaskDescription = $this->TaskDescription;
}
}
}
file_put_contents('Task_Data.txt', json_encode($this->TaskDataSource));
echo $this->TaskId;
}
public function Delete() {
//Assignment: Code to delete task here
$this->TaskDataSource = $this->loadFromFile($this->TaskDataSourcePath);
//echo '$this->TaskId=' . $this->TaskId . ' | $this->TaskName=' . $this->TaskName . ' | $this->TaskDescription=' . $this->TaskDescription . '\n<br>/n';
for ($pos = 0; $pos < count($this->TaskDataSource); $pos++) {
if ($this->TaskDataSource[$pos]->TaskId == $this->TaskId) {
unset($this->TaskDataSource[$pos]);
}
}
file_put_contents($this->TaskDataSourcePath, json_encode($this->TaskDataSource));
echo $this->TaskId;
}
}
?>
18 changes: 15 additions & 3 deletions update_task.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@
/**
* This script is to be used to receive a POST with the object information and then either updates, creates or deletes the task object
*/
require('Task.class.php');
// Assignment: Implement this script
?>
require('task.class.php');

$action = $_POST['action'];
$task = new Task();
$taskToUpdate = $_POST['taskToUpdate'];
$task->TaskId = $taskToUpdate['TaskId'];
$task->TaskName = $taskToUpdate['TaskName'];
$task->TaskDescription = $taskToUpdate['TaskDescription'];
if ($action == 'update') {
$task->Save();
} else if ($action == 'delete') {
$task->Delete();
}

?>