diff --git a/core/message_area.js b/core/message_area.js new file mode 100644 index 00000000..c35b33ac --- /dev/null +++ b/core/message_area.js @@ -0,0 +1,61 @@ +/* jslint node: true */ +'use strict'; + +var msgDb = require('./database.js').dbs.message; + +var async = require('async'); +var _ = require('lodash'); +var assert = require('assert'); + +exports.getAvailableMessageAreas = getAvailableMessageAreas; + +function getAvailableMessageAreas(cb) { + var areas = []; // { areaId, name, groupIds[] } + + async.series( + [ + function getAreas(callback) { + msgDb.all( + 'SELECT area_id, area_name ' + + 'FROM message_area;', + function areaResults(err, areaRows) { + if(err) { + callback(err); + } else { + areaRows.forEach(function entry(ar) { + areas.push( { + areaId : ar.area_id, + name : ar.area_name, + }); + }); + + callback(null); + } + } + ); + }, + function getAreaGroups(callback) { + var query = msgDb.prepare( + 'SELECT group_id ' + + 'FROM message_area_group ' + + 'WHERE area_id=?;'); + + async.each(areas, function area(a, next) { + query.all( [ a.areaId ], function groupRows(err, groups) { + a.groupIds = groups; + next(err); + }); + }, + function complete(err) { + query.finalize(function finalized(err2) { + callback(err); // use orig err + }); + }); + } + ], + function complete(err) { + cb(err, areas); + } + ); + +} \ No newline at end of file diff --git a/core/view_controller.js b/core/view_controller.js index 66966b82..81cb3862 100644 --- a/core/view_controller.js +++ b/core/view_controller.js @@ -245,6 +245,7 @@ function ViewController(options) { function complete(err) { // default to highest ID if no 'submit' entry present if(!submitId) { + // :TODO: fix bug here: If errornous MCI code sare used, we'll reference invalid views -- these should jsut be ignored self.getView(highestId).submit = true; } diff --git a/mods/art/msg_area_list.ans b/mods/art/msg_area_list.ans new file mode 100644 index 00000000..2f637e0d Binary files /dev/null and b/mods/art/msg_area_list.ans differ diff --git a/mods/menu.json b/mods/menu.json index ccd0c053..90176865 100644 --- a/mods/menu.json +++ b/mods/menu.json @@ -263,15 +263,37 @@ //"extraArgs" : { "messageAreaId" : 123 } }, { + "value" : { "command" : "C" }, + "action" : "@menu:messageAreaChangeCurrentArea" + }, + /*{ "value" : { "command" : "A" }, "action" : "@method:changeArea" }, + */ { "value" : { "command" : "Q" }, "action" : "@menu:mainMenu" } ] }, + "messageAreaChangeCurrentArea" : { + "art" : "msg_area_list.ans", + "module" : "msg_area_list", + "options" : { "cls" : true }, + "form" : { + "0" : { + "LVTL" : { + "mci" : { + "LV1" : { + "widht" : 30, + "height" : 10 + } + } + } + } + } + }, // :TODO: messageAreaSelect (change msg areas -> call @systemMethod -> fallback to menu "messageAreaNewPost" : { "module" : "msg_area_post_fse", diff --git a/mods/msg_area_list.js b/mods/msg_area_list.js new file mode 100644 index 00000000..01f11ec4 --- /dev/null +++ b/mods/msg_area_list.js @@ -0,0 +1,79 @@ +/* jslint node: true */ +'use strict'; + +var MenuModule = require('../core/menu_module.js').MenuModule; +var ViewController = require('../core/view_controller.js').ViewController; +var messageArea = require('../core/message_area.js'); +//var msgDb = require('./database.js').dbs.message; + +var async = require('async'); +var assert = require('assert'); +var _ = require('lodash'); + +exports.getModule = MessageAreaListModule; + +exports.moduleInfo = { + name : 'Message Area List', + desc : 'Module for listing / choosing message areas', + author : 'NuSkooler', +}; + +function MessageAreaListModule(options) { + MenuModule.call(this, options); + + var self = this; + +} + +require('util').inherits(MessageAreaListModule, MenuModule); + +MessageAreaListModule.prototype.mciReady = function(mciData, cb) { + var self = this; + var vc = self.viewControllers.areaList = new ViewController( { client : self.client } ); + + var messageAreas = []; + + async.series( + [ + function callParentMciReady(callback) { + MessageAreaListModule.super_.prototype.mciReady.call(this, mciData, function parentMciReady(err) { + callback(err); + }); + }, + function loadFromConfig(callback) { + var loadOpts = { + callingMenu : self, + mciMap : mciData.menu, + noInput : true, + }; + + vc.loadFromMenuConfig(loadOpts, function startingViewReady(err) { + callback(err); + }); + }, + function fetchAreaData(callback) { + messageArea.getAvailableMessageAreas(function fetched(err, areas) { + messageAreas = areas; + callback(err); + }); + }, + function populateAreaListView(callback) { + var areaListView = vc.getView(1); + + var areaList = []; + messageAreas.forEach(function entry(msgArea) { + // :TODO: make this formattable/themable + areaList.push(msgArea.areaId + ' - ' + msgArea.name); + }); + + console.log(areaList) + + areaListView.setItems(areaList); + areaListView.redraw(); + } + ], + function complete(err) { + + } + ); +}; \ No newline at end of file