diff --git a/appinfo/database.xml b/appinfo/database.xml index 2a0c1e3..1489b6b 100644 --- a/appinfo/database.xml +++ b/appinfo/database.xml @@ -21,6 +21,12 @@ true 255 + + user_id + text + true + 255 + diff --git a/appinfo/info.xml b/appinfo/info.xml index 19f9093..8d6e5c9 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -5,7 +5,7 @@ Watch the weather directly on your ownCloud AGPL Loic Blot - 0.0.1 + 0.0.3 7 170501 diff --git a/appinfo/routes.php b/appinfo/routes.php index 514e850..15cb2d8 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -16,10 +16,10 @@ $application = new Application(); $application->registerRoutes($this, array('routes' => array( array('name' => 'city#index', 'url' => '/', 'verb' => 'GET'), - array('name' => 'city#get', 'url' => '/city/get', 'verb' => 'GET'), array('name' => 'city#getall', 'url' => '/city/getall', 'verb' => 'GET'), - array('name' => 'city#create', 'url' => '/city/create', 'verb' => 'POST'), + array('name' => 'city#add', 'url' => '/city/add', 'verb' => 'POST'), array('name' => 'city#delete', 'url' => '/city/delete', 'verb' => 'POST'), - array('name' => 'city#update', 'url' => '/city/update', 'verb' => 'POST'), + + array('name' => 'weather#get', 'url' => '/weather/get', 'verb' => 'GET'), ))); ?> diff --git a/controller/citycontroller.php b/controller/citycontroller.php index f09a161..e274cae 100644 --- a/controller/citycontroller.php +++ b/controller/citycontroller.php @@ -37,5 +37,23 @@ class CityController extends Controller { public function index () { return new TemplateResponse($this->appName, 'main'); } + + /** + * @NoAdminRequired + * @NoCSRFRequired + */ + public function add ($name) { + if (!$name) { + return new JSONResponse(array(), Http::STATUS_BAD_REQUEST); + } + + // @TODO: check city is not already registered + + if ($id = $this->mapper->create($this->userId, $name)) { + return new JSONResponse(array("id" => $id)); + } + + return new JSONResponse(array()); + } }; ?> diff --git a/css/style.css b/css/style.css index da8d719..b27232c 100644 --- a/css/style.css +++ b/css/style.css @@ -57,3 +57,33 @@ position: absolute; align-items: flex-start; } + +.city-list hr { + border: 0; + height: 1px; + background: #BBB; + background-image: linear-gradient(to right, #CCC, #BBB, #CCC); +} + +#create-city { + padding: 10px; + background-color: #EEE; + border: 1px solid #DDD; +} + +#create-city h1 { + color: #444; +} + +#create-city h1 { + text-align: center; + font-weight: bold; +} + +#create-city h2 { + font-weight: bold; +} + +.city-form-error { + color: red; +} diff --git a/db/citymapper.php b/db/citymapper.php index f75eb61..b7d864c 100644 --- a/db/citymapper.php +++ b/db/citymapper.php @@ -19,5 +19,23 @@ class CityMapper extends Mapper { public function __construct (IDb $db) { parent::__construct($db, 'weather_city'); } + + public function create ($userId, $name) { + \OCP\DB::beginTransaction(); + $query = \OCP\DB::prepare('INSERT INTO *PREFIX*weather_city ' . + '(user_id, name) VALUES (?,?)'); + $query->execute(array($userId, $name)); + \OCP\DB::commit(); + + $sql = 'SELECT max(id) FROM ' . + '*PREFIX*weather_city WHERE user_id = ? and name = ?'; + $query = \OCP\DB::prepare($sql); + $result = $query->execute(array($userId, $name)); + + if ($row = $result->fetchRow()) { + return $row['max']; + } + return null; + } }; ?> diff --git a/js/public/app.js b/js/public/app.js index 7eacdf6..871b2cf 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -11,7 +11,7 @@ var app = angular.module('Weather', []); -var g_error500 = 'Fatal Error: please check your owncloud.log and sent a bug report here: https://github.com/nerzhul/ownboard/issues'; +var g_error500 = 'Fatal Error: please check your owncloud.log and sent a bug report here: https://github.com/nerzhul/weather/issues'; function undef (obj) { return typeof obj === undefined || obj === undefined; @@ -26,14 +26,15 @@ app.controller('WeatherController', ['$scope', '$interval', '$timeout', '$compil $scope.userId = ''; $scope.cities = []; $scope.selectedCityId = 0; - $scope.showCreateCity = false; + $scope.showAddCity = false; + $scope.addCityError = ''; $timeout(function () { $scope.loadCities(); }); $scope.loadCities = function () { - $http.get(OC.generateUrl('/apps/ownboard/city/getall')). + $http.get(OC.generateUrl('/apps/weather/city/getall')). success(function (data, status, headers, config) { if (!undef(data['cities'])) { $scope.cities = data['cities'] @@ -47,5 +48,26 @@ app.controller('WeatherController', ['$scope', '$interval', '$timeout', '$compil $scope.fatalError(); }); }; + + $scope.addCity = function(city) { + if (undef(city) || emptyStr(city.name)) { + $scope.addCityError = 'Empty city name !'; + return; + } + + $http.post(OC.generateUrl('/apps/weather/city/add'), {'name': city.name}). + success(function (data, status, headers, config) { + if (data != null && !undef(data['id'])) { + $scope.boards.push({"name": city.name, "id": data['id']}) + $scope.showAddCity = false; + } + else { + $scope.addCityError = 'Failed to add city. Please contact your administrator'; + } + }). + fail(function (data, status, headers, config) { + $scope.addCityError = g_error500; + }); + }; } ]); diff --git a/templates/main.php b/templates/main.php index 9954577..2a31497 100644 --- a/templates/main.php +++ b/templates/main.php @@ -12,16 +12,16 @@
  • - Add a city... -
    -

    Create city

    + Add a city... +
    +

    Add city


    -

    Title

    - {{ createCityError }} +

    City name

    + {{ addCityError }}
    - - + +