/** * Javascript controller webinterface * * @author Steffen Vogel * @copyright Copyright (c) 2010, The volkszaehler.org project * @package controller * @license http://opensource.org/licenses/gpl-license.php GNU Public License * * @todo use prototypes */ /* * This file is part of volkzaehler.org * * volkzaehler.org is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * volkzaehler.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with volkszaehler.org. If not, see . */ const backend = '../backend'; const controller = 'php/channel.php'; var entities; var properties; var channels; $(document).ready(function() { fetchEntities(); fetchProperties(); fetchChannels(); // bind type dropdown to showEntityForm() $('#new select').change(function(event) { showEntityForm(event.target.value); }); // bind button to addChannel() $('#new form').submit(function(event) { event.preventDefault(); addChannel(this); return false; }); }); /** * Get entities from backend */ function fetchEntities() { $.getJSON(backend + '/capabilities/definition/entity.json', function(data) { entities = data.definition.entity; // Add channel types to dropdown $('#new select').empty(); $.each(entities, function(index, entity) { if (entity.model == 'Volkszaehler\\Model\\Channel') { $('#new select').append(''); } }); // show related properties $('#new select').trigger('change'); }); } /** * Get properties from backend */ function fetchProperties() { $.getJSON(backend + '/capabilities/definition/property.json', function(data) { properties = data.definition.property; // show related properties $('#new select').trigger('change'); }); } /** * Get channels from controller */ function fetchChannels() { $.getJSON(controller, function(data) { channels = data; // add fetched channels to table showChannels(); }); } /** * Show from for new Channel * * @param type * @return */ function showEntityForm(type) { $('#properties').empty(); var entity = getDefinition(entities, type); $.each(entity.required, function(index, property) { var property = getDefinition(properties, property); if (property) { $('#properties').append('' + getPropertyForm(property) + '(*)'); } }); $.each(entity.optional, function(index, property) { var property = getDefinition(properties, property); if (property) { $('#properties').append('' + getPropertyForm(property) + ''); } }); } /** * @param uuid * @return */ function deleteChannel(uuid) { $.getJSON(controller, { operation: 'delete', uuid: uuid }, function(data) { channels = data; showChannels(); }); } function addChannel(form) { var uuid = false; if (validateChannel(form)) { //if (uuid = addChannelBackend(form)) { if (addChannelController(form, randomUUID)) { //uuid)) { fetchChannels(); return true; } else { //removeChannelBackend(uuid); alert('Error: adding channel to controller'); } /*} else { alert('Error: adding channel to backend'); }*/ } else { alert('Please correct your input'); } } function addChannelController(form, uuid) { $.getJSON(controller, { operation: 'add', uuid: uuid, port: form.port.value, type: form.type.value }, function(data) { channels = data; showChannels(); }); return true; // TODO } function addChannelBackend(form) { $.getJSON(backend + '/channel.json', { operation: 'add' }, function(data) { }); return true; // TODO } function getDefinition(definition, type) { for (var i in definition) { if (definition[i].name == type) { return definition[i]; } } } function getPropertyForm(property) { switch (property.type) { case 'string': case 'float': case 'integer': return ''; case 'text': return ''; case 'boolean': return ''; case 'multiple': $.each(property.options, function(index, option) { options.push('