From 29a1be5c81c37d01c0064ee7856c88414bfd6ea4 Mon Sep 17 00:00:00 2001 From: upendras-ltts Date: Tue, 21 Nov 2023 10:39:18 +0530 Subject: [PATCH 1/3] Added initial setup for PHP and statsig --- phptodo/composer.json | 10 +++++ phptodo/main.php | 73 ++++++++++++++++++++++++++++++++++ phptodo/src/todo.php | 25 ++++++++++++ phptodo/src/todorepository.php | 70 ++++++++++++++++++++++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 phptodo/composer.json create mode 100644 phptodo/main.php create mode 100644 phptodo/src/todo.php create mode 100644 phptodo/src/todorepository.php diff --git a/phptodo/composer.json b/phptodo/composer.json new file mode 100644 index 0000000..88fc26d --- /dev/null +++ b/phptodo/composer.json @@ -0,0 +1,10 @@ +{ + "name": "statsig/phptodo", + "description": "A PHP todo project", + "type": "project", + "require": { + "doctrine/dbal": "^3.7", + "statsig/statsigsdk": "*", + "slim/slim": "^2.6" + } +} diff --git a/phptodo/main.php b/phptodo/main.php new file mode 100644 index 0000000..2823091 --- /dev/null +++ b/phptodo/main.php @@ -0,0 +1,73 @@ +statsig = new StatsigServer("secret-9lbe9aax4FWPyJiLrKfo8GAj1cXX2UUqoDBcG4B7rKW", $options); + $this->user = StatsigUser::withUserID("php_user"); + $this->user->setEmail("user_php@statsig.com"); + $this->user->setCountry("IN"); + + } + + public function run() { + // Main functionality of the application + $config = $this->statsig->getConfig($this->user, "warning_banner"); + // error_log("The value of variable is: " . $config); + print_r($config); + $jsonString = json_encode($config); + print_r($jsonString); + + + } + + public function getExperiment(){ + $todo_experiment = $this->statsig->getExperiment($this->user, "item_sorting"); + print_r($todo_experiment); + print_r($todo_experiment->getName()); + print_r($todo_experiment->getValue()); + + $jsonString = json_encode($todo_experiment); + print_r($jsonString); + + } + + public function logEvent(){ + $event = new StatsigEvent("TODO_CREATE"); + $event->setUser($this->user); + $event->setValue("TODO"); + $event->setMetadata(array("title" => "TODO_1")); + $this->statsig->logEvent($event); + } + + public function flush(){ + $this->statsig->flush(); + } +} + +$main = new Main(); +$main->run(); +$main->getExperiment(); +$main->logEvent(); +$main->flush(); + + +?> \ No newline at end of file diff --git a/phptodo/src/todo.php b/phptodo/src/todo.php new file mode 100644 index 0000000..6e6037c --- /dev/null +++ b/phptodo/src/todo.php @@ -0,0 +1,25 @@ +id = $id; + $this->task = $task; + $this->description = $description; + $this->completed = $completed; + $this->edited = $edited; + $this->serialNumber = $serialNumber; + $this->lastViewed = $lastViewed; + $this->createdDate = $createdDate; + $this->modifiedDate = $modifiedDate; + } +} +?> diff --git a/phptodo/src/todorepository.php b/phptodo/src/todorepository.php new file mode 100644 index 0000000..d0c7455 --- /dev/null +++ b/phptodo/src/todorepository.php @@ -0,0 +1,70 @@ +filePath = $filePath; + } + + public function getAllTodos() { + $todos = json_decode(file_get_contents($this->filePath), true); + return $todos; + } + + public function getTodoById($id) { + $todos = json_decode(file_get_contents($this->filePath), true); + foreach ($todos as $todo) { + if ($todo['id'] == $id) { + return $todo; + } + } + return null; + } + + public function createTodo($task, $description, $completed, $edited, $serialNumber, $lastViewed, $createdDate, $modifiedDate) { + $todos = json_decode(file_get_contents($this->filePath), true); + $newTodo = [ + 'id' => count($todos) + 1, + 'task' => $task, + 'description' => $description, + 'completed' => $completed, + 'edited' => $edited, + 'serialNumber' => $serialNumber, + 'lastViewed' => $lastViewed, + 'createdDate' => $createdDate, + 'modifiedDate' => $modifiedDate + ]; + $todos[] = $newTodo; + file_put_contents($this->filePath, json_encode($todos)); + } + + public function updateTodo($id, $task, $description, $completed, $edited, $serialNumber, $lastViewed, $createdDate, $modifiedDate) { + $todos = json_decode(file_get_contents($this->filePath), true); + foreach ($todos as &$todo) { + if ($todo['id'] == $id) { + $todo['task'] = $task; + $todo['description'] = $description; + $todo['completed'] = $completed; + $todo['edited'] = $edited; + $todo['serialNumber'] = $serialNumber; + $todo['lastViewed'] = $lastViewed; + $todo['createdDate'] = $createdDate; + $todo['modifiedDate'] = $modifiedDate; + break; + } + } + file_put_contents($this->filePath, json_encode($todos)); + } + + public function deleteTodo($id) { + $todos = json_decode(file_get_contents($this->filePath), true); + foreach ($todos as $key => $todo) { + if ($todo['id'] == $id) { + unset($todos[$key]); + break; + } + } + file_put_contents($this->filePath, json_encode(array_values($todos))); + } +} +?> From 2d389f08731e1bb95836bf79e7c175cd668d0e3d Mon Sep 17 00:00:00 2001 From: upendras-ltts Date: Tue, 28 Nov 2023 14:38:13 +0530 Subject: [PATCH 2/3] Todos api integration --- phptodo/app.php | 87 ++++++++++++++++++++++++++++++++++ phptodo/composer.json | 14 ++++-- phptodo/main.php | 73 ---------------------------- phptodo/src/TodoController.php | 74 +++++++++++++++++++++++++++++ phptodo/src/todorepository.php | 19 ++++++-- phptodo/src/todos.json | 0 phptodo/src/util.php | 81 +++++++++++++++++++++++++++++++ phptodo/todos.json | 1 + 8 files changed, 268 insertions(+), 81 deletions(-) create mode 100644 phptodo/app.php create mode 100644 phptodo/src/TodoController.php create mode 100644 phptodo/src/todos.json create mode 100644 phptodo/src/util.php create mode 100644 phptodo/todos.json diff --git a/phptodo/app.php b/phptodo/app.php new file mode 100644 index 0000000..4c180bf --- /dev/null +++ b/phptodo/app.php @@ -0,0 +1,87 @@ +addRoutingMiddleware(); + +// // Set the base path to run the app in a subdirectory. +// // This path is used in urlFor(). +// $app->add(new BasePathMiddleware($app)); + +// $app->addErrorMiddleware(true, true, true); + +// Create an instance of the TodoController +$repository = new TodoRepository(); +$todoController = new TodoController($repository); + +// Map the GET /todos endpoint to the getTodos method +$app->get('/todos', function (Request $request, Response $response, $args) use ($todoController) { + + $todos = $todoController->getAllTodos(); + print_r(json_encode($todos)); + + return $response->getBody()->write(json_encode($todos)); +}); + +// Map the GET /todos/{id} endpoint to the getTodoById method +$app->get('/todos/{id}', function (Request $request, Response $response, $args) use ($todoController) { + $id = $args['id']; + $todo = $todoController->getTodoById($id); + return $response->getBody()->write(json_encode($todo)); +}); + +// Map the POST /todos endpoint to the createTodo method +$app->post('/todos', function (Request $request, Response $response, $args) use ($todoController) { + // print_r(json_encode($request)); + error_log("Todo post called "); + $json_payload = json_decode($request->getBody()); + $log_message_temp = "JSON request data: " . print_r($json_payload, true); + error_log($log_message_temp); + + $data = $request->getBody(); + $log_message = "POST request data: " . print_r($data, true); + error_log($log_message); + $todo = $todoController->createTodo($data); + return $response->getBody()->write(json_encode($todo)); +}); + +// Map the PUT /todos/{id} endpoint to the updateTodoById method +$app->put('/todos/{id}', function (Request $request, Response $response, $args) use ($todoController) { + $id = $args['id']; + $data = $request->getParsedBody(); + $todo = $todoController->updateTodoById($id, $data); + return $response->getBody()->write(json_encode($todo)); +}); + +// Map the DELETE /todos/{id} endpoint to the deleteTodoById method +$app->delete('/todos/{id}', function (Request $request, Response $response, $args) use ($todoController) { + $id = $args['id']; + $todoController->deleteTodoById($id); + return $response->getBody()->write(json_encode(['id' => $id])); +}); + +// Run the Slim App +$app->run(); + +// try { +// $app->run(); +// } catch (Exception $e) { +// // We display a error message +// die( json_encode($e)); +// } + +?> \ No newline at end of file diff --git a/phptodo/composer.json b/phptodo/composer.json index 88fc26d..4386392 100644 --- a/phptodo/composer.json +++ b/phptodo/composer.json @@ -1,10 +1,18 @@ { "name": "statsig/phptodo", - "description": "A PHP todo project", + "description": "A PHP Todo project", "type": "project", "require": { + "statsig/statsigsdk": "^2.2", "doctrine/dbal": "^3.7", - "statsig/statsigsdk": "*", - "slim/slim": "^2.6" + "slim/slim": "4.*", + "psr/http-message": "^1.0", + "selective/basepath": "*" + + }, + "autoload": { + "psr-4": { + "Statsig\\Phptodo\\": "src/" + } } } diff --git a/phptodo/main.php b/phptodo/main.php index 2823091..e69de29 100644 --- a/phptodo/main.php +++ b/phptodo/main.php @@ -1,73 +0,0 @@ -statsig = new StatsigServer("secret-9lbe9aax4FWPyJiLrKfo8GAj1cXX2UUqoDBcG4B7rKW", $options); - $this->user = StatsigUser::withUserID("php_user"); - $this->user->setEmail("user_php@statsig.com"); - $this->user->setCountry("IN"); - - } - - public function run() { - // Main functionality of the application - $config = $this->statsig->getConfig($this->user, "warning_banner"); - // error_log("The value of variable is: " . $config); - print_r($config); - $jsonString = json_encode($config); - print_r($jsonString); - - - } - - public function getExperiment(){ - $todo_experiment = $this->statsig->getExperiment($this->user, "item_sorting"); - print_r($todo_experiment); - print_r($todo_experiment->getName()); - print_r($todo_experiment->getValue()); - - $jsonString = json_encode($todo_experiment); - print_r($jsonString); - - } - - public function logEvent(){ - $event = new StatsigEvent("TODO_CREATE"); - $event->setUser($this->user); - $event->setValue("TODO"); - $event->setMetadata(array("title" => "TODO_1")); - $this->statsig->logEvent($event); - } - - public function flush(){ - $this->statsig->flush(); - } -} - -$main = new Main(); -$main->run(); -$main->getExperiment(); -$main->logEvent(); -$main->flush(); - - -?> \ No newline at end of file diff --git a/phptodo/src/TodoController.php b/phptodo/src/TodoController.php new file mode 100644 index 0000000..d72e87d --- /dev/null +++ b/phptodo/src/TodoController.php @@ -0,0 +1,74 @@ +repository = $repository; + } + + public function getAllTodos() { + $todos = $this->repository->getAllTodos(); + $this->sendJsonResponse($todos); + } + + public function getTodoById($id) { + $todo = $this->repository->getTodoById($id); + if ($todo) { + $this->sendJsonResponse($todo); + } else { + $this->notFound(); + } + } + + public function createTodo() { + $input = $this->getJsonInput(); + $this->repository->createTodo( + $input['task'] ?? '', + $input['description'] ?? '', + $input['completed'] ?? false, + $input['edited'] ?? false, + $input['serialNumber'] ?? 0, + $input['lastViewed'] ?? '', + $input['createdDate'] ?? '', + $input['modifiedDate'] ?? '' + ); + $this->sendJsonResponse(['message' => 'Todo created']); + } + + public function updateTodoById($id) { + $input = $this->getJsonInput(); + $this->repository->updateTodo( + $id, + $input['task'] ?? '', + $input['description'] ?? '', + $input['completed'] ?? false, + $input['edited'] ?? false, + $input['serialNumber'] ?? 0, + $input['lastViewed'] ?? '', + $input['createdDate'] ?? '', + $input['modifiedDate'] ?? '' + ); + $this->sendJsonResponse(['message' => 'Todo updated']); + } + + public function deleteTodoById($id) { + $this->repository->deleteTodo($id); + $this->sendJsonResponse(['message' => 'Todo deleted']); + } + + public function sendJsonResponse($data) { + header('Content-Type: application/json'); + echo json_encode($data); + } + + public function getJsonInput() { + $input = file_get_contents('php://input'); + return json_decode($input, true) ?? []; + } + + public function notFound() { + header('HTTP/1.1 404 Not Found'); + echo '404 Not Found'; + } +} +?> diff --git a/phptodo/src/todorepository.php b/phptodo/src/todorepository.php index d0c7455..aba8548 100644 --- a/phptodo/src/todorepository.php +++ b/phptodo/src/todorepository.php @@ -1,9 +1,16 @@ filePath = $filePath; +class TodoRepository { + private $filePath = 'todos.json'; + + + public function __construct() { + if (!file_exists($this->filePath)) { + touch($this->filePath); + // Optionally, you can set file permissions using chmod() + // chmod($filePath, 0644); + } + } public function getAllTodos() { @@ -23,8 +30,10 @@ public function getTodoById($id) { public function createTodo($task, $description, $completed, $edited, $serialNumber, $lastViewed, $createdDate, $modifiedDate) { $todos = json_decode(file_get_contents($this->filePath), true); + $count = count($todos ?? []); + $newTodo = [ - 'id' => count($todos) + 1, + 'id' => $count + 1, 'task' => $task, 'description' => $description, 'completed' => $completed, diff --git a/phptodo/src/todos.json b/phptodo/src/todos.json new file mode 100644 index 0000000..e69de29 diff --git a/phptodo/src/util.php b/phptodo/src/util.php new file mode 100644 index 0000000..bce15e2 --- /dev/null +++ b/phptodo/src/util.php @@ -0,0 +1,81 @@ +statsig = new StatsigServer("secret-9lbe9aax4FWPyJiLrKfo8GAj1cXX2UUqoDBcG4B7rKW", $options); + $this->user = StatsigUser::withUserID("php_user"); + $this->user->setEmail("user_php@statsig.com"); + $this->user->setCountry("IN"); + + } + + public function run() { + // Main functionality of the application + $config = $this->statsig->getConfig($this->user, "warning_banner"); + // error_log("The value of variable is: " . $config); + print_r($config); + $jsonString = json_encode($config); + print_r($jsonString); + + $repository = new TodoRepository(); + $this->todo_controller = new TodoController($repository); + // $this->todo_controller->handleRequest(); + + } + + public function getExperiment(){ + $todo_experiment = $this->statsig->getExperiment($this->user, "item_sorting"); + print_r($todo_experiment); + print_r($todo_experiment->getName()); + print_r($todo_experiment->getValue()); + + $jsonString = json_encode($todo_experiment); + print_r($jsonString); + + } + + public function logEvent(){ + $event = new StatsigEvent("TODO_CREATE"); + $event->setUser($this->user); + $event->setValue("TODO"); + $event->setMetadata(array("title" => "TODO_1")); + $this->statsig->logEvent($event); + } + + public function flush(){ + $this->statsig->flush(); + } +} + +$main = new Main(); +$main->run(); +$main->getExperiment(); +$main->logEvent(); +$main->flush(); + +phpinfo() + + +?> \ No newline at end of file diff --git a/phptodo/todos.json b/phptodo/todos.json new file mode 100644 index 0000000..529c6a7 --- /dev/null +++ b/phptodo/todos.json @@ -0,0 +1 @@ +[{"id":1,"task":"task9","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":2,"task":"task9","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":3,"task":"task9","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"}] \ No newline at end of file From 01dcb30d6ec1fe324e52daeb3ac9ae32dd9c9b61 Mon Sep 17 00:00:00 2001 From: upendras-ltts Date: Wed, 29 Nov 2023 10:46:25 +0530 Subject: [PATCH 3/3] Minor fix related to status code --- phptodo/app.php | 82 ++++++++++++++-------------------- phptodo/composer.json | 1 + phptodo/src/TodoController.php | 52 ++++++++++++--------- phptodo/src/todo.php | 7 +-- phptodo/src/todorepository.php | 32 ++++++++----- phptodo/src/util.php | 34 +++++++------- phptodo/todos.json | 2 +- 7 files changed, 107 insertions(+), 103 deletions(-) diff --git a/phptodo/app.php b/phptodo/app.php index 4c180bf..1c177e4 100644 --- a/phptodo/app.php +++ b/phptodo/app.php @@ -1,87 +1,71 @@ -addRoutingMiddleware(); - -// // Set the base path to run the app in a subdirectory. -// // This path is used in urlFor(). -// $app->add(new BasePathMiddleware($app)); - -// $app->addErrorMiddleware(true, true, true); - -// Create an instance of the TodoController $repository = new TodoRepository(); $todoController = new TodoController($repository); -// Map the GET /todos endpoint to the getTodos method +$app->add(new CorsMiddleware( + [ + "origin" => ["*"], + "methods" => ["GET", "POST", "PUT", "PATCH", "DELETE"], + "headers.allow" => ["Authorization", "Content-Type"], + "headers.expose" => [], + "credentials" => true, + "cache" => 0 + ] +)); + $app->get('/todos', function (Request $request, Response $response, $args) use ($todoController) { $todos = $todoController->getAllTodos(); - print_r(json_encode($todos)); - - return $response->getBody()->write(json_encode($todos)); + $response->getBody()->write(json_encode($todos)); + $response = $response->withStatus(200, 'OK'); + return $response; }); // Map the GET /todos/{id} endpoint to the getTodoById method $app->get('/todos/{id}', function (Request $request, Response $response, $args) use ($todoController) { $id = $args['id']; $todo = $todoController->getTodoById($id); - return $response->getBody()->write(json_encode($todo)); + $response->getBody()->write(json_encode($todo)); + $response = $response->withStatus(200, 'OK'); + return $response; }); // Map the POST /todos endpoint to the createTodo method $app->post('/todos', function (Request $request, Response $response, $args) use ($todoController) { - // print_r(json_encode($request)); - error_log("Todo post called "); - $json_payload = json_decode($request->getBody()); - $log_message_temp = "JSON request data: " . print_r($json_payload, true); - error_log($log_message_temp); $data = $request->getBody(); - $log_message = "POST request data: " . print_r($data, true); - error_log($log_message); $todo = $todoController->createTodo($data); - return $response->getBody()->write(json_encode($todo)); + $response->getBody()->write(json_encode($todo)); + $response = $response->withStatus(200, 'OK'); + return $response->withHeader('Content-Type', 'application/json'); }); // Map the PUT /todos/{id} endpoint to the updateTodoById method -$app->put('/todos/{id}', function (Request $request, Response $response, $args) use ($todoController) { - $id = $args['id']; - $data = $request->getParsedBody(); - $todo = $todoController->updateTodoById($id, $data); - return $response->getBody()->write(json_encode($todo)); +$app->put('/todos', function (Request $request, Response $response, $args) use ($todoController) { + $data = $request->getBody(); + $todo = $todoController->updateTodoById($data); + $response->getBody()->write(json_encode($todo)); + $response = $response->withStatus(201, 'OK'); + return $response; }); // Map the DELETE /todos/{id} endpoint to the deleteTodoById method $app->delete('/todos/{id}', function (Request $request, Response $response, $args) use ($todoController) { $id = $args['id']; $todoController->deleteTodoById($id); - return $response->getBody()->write(json_encode(['id' => $id])); + $response->getBody()->write(json_encode(['id' => $id])); + $response = $response->withStatus(200, 'OK'); + return $response; }); -// Run the Slim App $app->run(); - -// try { -// $app->run(); -// } catch (Exception $e) { -// // We display a error message -// die( json_encode($e)); -// } - -?> \ No newline at end of file diff --git a/phptodo/composer.json b/phptodo/composer.json index 4386392..cea1757 100644 --- a/phptodo/composer.json +++ b/phptodo/composer.json @@ -6,6 +6,7 @@ "statsig/statsigsdk": "^2.2", "doctrine/dbal": "^3.7", "slim/slim": "4.*", + "tuupola/cors-middleware": "*", "psr/http-message": "^1.0", "selective/basepath": "*" diff --git a/phptodo/src/TodoController.php b/phptodo/src/TodoController.php index d72e87d..913a2c9 100644 --- a/phptodo/src/TodoController.php +++ b/phptodo/src/TodoController.php @@ -1,28 +1,32 @@ repository = $repository; } - public function getAllTodos() { + public function getAllTodos() + { $todos = $this->repository->getAllTodos(); - $this->sendJsonResponse($todos); + return $todos; } - public function getTodoById($id) { + public function getTodoById($id) + { $todo = $this->repository->getTodoById($id); if ($todo) { - $this->sendJsonResponse($todo); - } else { - $this->notFound(); + return $todo; } + return $this->notFound(); } - public function createTodo() { + public function createTodo() + { $input = $this->getJsonInput(); - $this->repository->createTodo( + $todo = $this->repository->createTodo( $input['task'] ?? '', $input['description'] ?? '', $input['completed'] ?? false, @@ -32,13 +36,14 @@ public function createTodo() { $input['createdDate'] ?? '', $input['modifiedDate'] ?? '' ); - $this->sendJsonResponse(['message' => 'Todo created']); + return $todo; } - public function updateTodoById($id) { + public function updateTodoById() + { $input = $this->getJsonInput(); - $this->repository->updateTodo( - $id, + $todo = $this->repository->updateTodo( + $input['id'] ?? 0, $input['task'] ?? '', $input['description'] ?? '', $input['completed'] ?? false, @@ -48,27 +53,30 @@ public function updateTodoById($id) { $input['createdDate'] ?? '', $input['modifiedDate'] ?? '' ); - $this->sendJsonResponse(['message' => 'Todo updated']); + return $todo; } - public function deleteTodoById($id) { + public function deleteTodoById($id) + { $this->repository->deleteTodo($id); - $this->sendJsonResponse(['message' => 'Todo deleted']); + return ['id' => $id]; } - public function sendJsonResponse($data) { + public function sendJsonResponse($data) + { header('Content-Type: application/json'); - echo json_encode($data); + return json_encode($data); } - public function getJsonInput() { + public function getJsonInput() + { $input = file_get_contents('php://input'); return json_decode($input, true) ?? []; } - public function notFound() { + public function notFound() + { header('HTTP/1.1 404 Not Found'); echo '404 Not Found'; } } -?> diff --git a/phptodo/src/todo.php b/phptodo/src/todo.php index 6e6037c..9ce390a 100644 --- a/phptodo/src/todo.php +++ b/phptodo/src/todo.php @@ -1,5 +1,6 @@ id = $id; $this->task = $task; $this->description = $description; @@ -22,4 +24,3 @@ public function __construct($id, $task, $description, $completed, $edited, $seri $this->modifiedDate = $modifiedDate; } } -?> diff --git a/phptodo/src/todorepository.php b/phptodo/src/todorepository.php index aba8548..ac9ce86 100644 --- a/phptodo/src/todorepository.php +++ b/phptodo/src/todorepository.php @@ -1,24 +1,25 @@ filePath)) { touch($this->filePath); - // Optionally, you can set file permissions using chmod() - // chmod($filePath, 0644); } - } - public function getAllTodos() { + public function getAllTodos() + { $todos = json_decode(file_get_contents($this->filePath), true); return $todos; } - public function getTodoById($id) { + public function getTodoById($id) + { $todos = json_decode(file_get_contents($this->filePath), true); foreach ($todos as $todo) { if ($todo['id'] == $id) { @@ -28,10 +29,11 @@ public function getTodoById($id) { return null; } - public function createTodo($task, $description, $completed, $edited, $serialNumber, $lastViewed, $createdDate, $modifiedDate) { + public function createTodo($task, $description, $completed, $edited, $serialNumber, $lastViewed, $createdDate, $modifiedDate) + { $todos = json_decode(file_get_contents($this->filePath), true); $count = count($todos ?? []); - + $newTodo = [ 'id' => $count + 1, 'task' => $task, @@ -45,10 +47,14 @@ public function createTodo($task, $description, $completed, $edited, $serialNumb ]; $todos[] = $newTodo; file_put_contents($this->filePath, json_encode($todos)); + return $newTodo; } - public function updateTodo($id, $task, $description, $completed, $edited, $serialNumber, $lastViewed, $createdDate, $modifiedDate) { + public function updateTodo($id, $task, $description, $completed, $edited, $serialNumber, $lastViewed, $createdDate, $modifiedDate) + { $todos = json_decode(file_get_contents($this->filePath), true); + $tempTodo = null; + error_log($id); foreach ($todos as &$todo) { if ($todo['id'] == $id) { $todo['task'] = $task; @@ -59,13 +65,16 @@ public function updateTodo($id, $task, $description, $completed, $edited, $seria $todo['lastViewed'] = $lastViewed; $todo['createdDate'] = $createdDate; $todo['modifiedDate'] = $modifiedDate; + $tempTodo = $todo; break; } } file_put_contents($this->filePath, json_encode($todos)); + return $tempTodo; } - public function deleteTodo($id) { + public function deleteTodo($id) + { $todos = json_decode(file_get_contents($this->filePath), true); foreach ($todos as $key => $todo) { if ($todo['id'] == $id) { @@ -76,4 +85,3 @@ public function deleteTodo($id) { file_put_contents($this->filePath, json_encode(array_values($todos))); } } -?> diff --git a/phptodo/src/util.php b/phptodo/src/util.php index bce15e2..c762271 100644 --- a/phptodo/src/util.php +++ b/phptodo/src/util.php @@ -1,8 +1,8 @@ user = StatsigUser::withUserID("php_user"); $this->user->setEmail("user_php@statsig.com"); $this->user->setCountry("IN"); - } - public function run() { + public function run() + { // Main functionality of the application $config = $this->statsig->getConfig($this->user, "warning_banner"); - // error_log("The value of variable is: " . $config); + // error_log("The value of variable is: " . $config); print_r($config); $jsonString = json_encode($config); print_r($jsonString); - + $repository = new TodoRepository(); $this->todo_controller = new TodoController($repository); - // $this->todo_controller->handleRequest(); + // $this->todo_controller->handleRequest(); } - public function getExperiment(){ + public function getExperiment() + { $todo_experiment = $this->statsig->getExperiment($this->user, "item_sorting"); print_r($todo_experiment); print_r($todo_experiment->getName()); @@ -53,10 +56,10 @@ public function getExperiment(){ $jsonString = json_encode($todo_experiment); print_r($jsonString); - } - public function logEvent(){ + public function logEvent() + { $event = new StatsigEvent("TODO_CREATE"); $event->setUser($this->user); $event->setValue("TODO"); @@ -64,7 +67,8 @@ public function logEvent(){ $this->statsig->logEvent($event); } - public function flush(){ + public function flush() + { $this->statsig->flush(); } } @@ -76,6 +80,4 @@ public function flush(){ $main->flush(); phpinfo() - - ?> \ No newline at end of file diff --git a/phptodo/todos.json b/phptodo/todos.json index 529c6a7..8dc3c09 100644 --- a/phptodo/todos.json +++ b/phptodo/todos.json @@ -1 +1 @@ -[{"id":1,"task":"task9","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":2,"task":"task9","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":3,"task":"task9","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"}] \ No newline at end of file +[{"id":1,"task":"task2_Edited_2","description":"","completed":true,"edited":true,"serialNumber":2,"lastViewed":true,"createdDate":"2023-10-10T15:05:15.486Z","modifiedDate":"2023-10-10T20:36:13.596Z"},{"id":2,"task":"task9","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":4,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":5,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":6,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":7,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":8,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":9,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":10,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":11,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":12,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":13,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":14,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":15,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":16,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":17,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":18,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":19,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":20,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":21,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":22,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":23,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":24,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":25,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":26,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"},{"id":27,"task":"task3","description":"","completed":true,"edited":false,"serialNumber":10,"lastViewed":false,"createdDate":"2023-10-06T10:41:11.806Z","modifiedDate":"2023-10-06T10:41:11.806Z"}] \ No newline at end of file