diff --git a/modules/discojuice/lib/Feed.php b/modules/discojuice/lib/Feed.php index 37d69fb53ceb520103c483652f8b6e2177188463..44430a88ec893acb4f0418160c8b58712b3b8356 100644 --- a/modules/discojuice/lib/Feed.php +++ b/modules/discojuice/lib/Feed.php @@ -126,6 +126,8 @@ class sspmod_discojuice_Feed { private function process() { $this->feed = array(); + $this->merge(); + foreach($this->metadata AS $m) { if ($this->exclude($m['entityid'])) continue; @@ -137,6 +139,20 @@ class sspmod_discojuice_Feed { $this->feed[] = $i; } } + + } + + protected function merge() { + $mergeendpoints = $this->djconfig->getValue('mergeEndpoints', NULL); + SimpleSAML_Logger::info('Processing merge endpoint: ' . var_export($mergeendpoints, TRUE)); + + if ($mergeendpoints === NULL) return; + if (!is_array($mergeendpoints)) return; + foreach($mergeendpoints AS $me) { + SimpleSAML_Logger::info('Processing merge endpoint: ' . $me); + $newlist = json_decode(file_get_contents($me), TRUE); + $this->feed = array_merge($this->feed, $newlist); + } } diff --git a/modules/discojuice/www/discojuice/discojuice.control.js b/modules/discojuice/www/discojuice/discojuice.control.js index 82fcc0e4031bf8538fa94fc3a078cf3cea555bf2..479fa2350ff94a1dc4f0491e5c54f89583f2fb43 100644 --- a/modules/discojuice/www/discojuice/discojuice.control.js +++ b/modules/discojuice/www/discojuice/discojuice.control.js @@ -1,13 +1,11 @@ /* * DiscoJuice - * Work is based upon mock up made by the Kantara ULX group. + * Work is based upon mock up made by the Kantara ULX group. * * Author: Andreas Ă…kre Solberg, UNINETT, andreas.solberg@uninett.no * Licence undecided. Awaiting alignment with the licence of the origin Kantara mockup. */ -if (typeof DiscoJuice === "undefined") { - var DiscoJuice = {}; -} +if (typeof DiscoJuice == "undefined") var DiscoJuice = {}; DiscoJuice.Control = { @@ -15,7 +13,7 @@ DiscoJuice.Control = { "parent" : DiscoJuice, // Reference to the UI object... - "ui": null, + "ui": null, "data": null, // Set filter values to filter the result. @@ -32,27 +30,23 @@ DiscoJuice.Control = { */ "load": function() { var that = this; - if (this.data) { - return; - } + if (this.data) return; var metadataurl = this.parent.Utils.options.get('metadata'); this.parent.Utils.log('metadataurl is ' + metadataurl); - if (!metadataurl) { - return; - } + if (!metadataurl) return; $.getJSON(metadataurl, function(data) { that.data = data; that.parent.Utils.log('Successfully loaded metadata (' + data.length + ')'); that.postLoad(); }); + + }, "postLoad": function() { - if (!this.data) { - return; - } + if (!this.data) return; // Iterate through entities, and update title from DisplayNames to support Shibboleth integration. for(i = 0; i < this.data.length; i++) { @@ -67,6 +61,7 @@ DiscoJuice.Control = { this.readCookie(); this.prepareData(); this.discoReadSetup(); + this.discoSubReadSetup(); this.searchboxSetup(); if (this.parent.Utils.options.get('country', false)) { this.filterCountrySetup(); @@ -78,50 +73,139 @@ DiscoJuice.Control = { "readCookie": function() { if (this.parent.Utils.options.get('cookie', false)) { - var selected = this.parent.Utils.readCookie(); - this.parent.Utils.log('COOKIE read ' + selected); - if(selected) this.setWeight(selected, -100); + var selectedRelID = this.parent.Utils.readCookie(); + + var entityID = selectedRelID; + var subID = undefined; + if (selectedRelID && selectedRelID.match(/^.*#.+?$/)) { + var matched = /^(.*)#(.+?)$/.exec(selectedRelID); + entityID = matched[1]; + subID = matched[2]; + } + + this.parent.Utils.log('COOKIE read ' + selectedRelID); + if(selectedRelID) this.setWeight(-100, entityID, subID); } }, + "discojuiceextension": function() { + + console.log('Listener activated...'); + + this.ui.show(); + + var selectedRelID = $("meta#discojuiceextension_id").attr('content'); + if (!selectedRelID) return; + + console.log('Value found: ' + selectedRelID); + + var entityID = selectedRelID; + var subID = undefined; + if (selectedRelID && selectedRelID.match(/^.*#.+?$/)) { + var matched = /^(.*)#(.+?)$/.exec(selectedRelID); + entityID = matched[1]; + subID = matched[2]; + } + + this.parent.Utils.log('DiscoJuice Extension read ' + selectedRelID + ' ' + entityID + ' ' + subID); + + var autologin = $("meta#discojuice_autologin").attr('content'); + + if(autologin == '1') { + console.log('DiscoJuice Extension: Select provider'); + this.selectProvider(entityID, subID); + } else { + console.log('DiscoJuice Extension: Set weight and refresh'); + this.setWeight(-100, entityID, subID); + this.prepareData(); + } + + }, + /* * Set weight to a specific data entry. */ - "setWeight": function(entityID, weight) { + "setWeight": function(weight, entityID, subID) { for(i = 0; i < this.data.length; i++) { - if (this.data[i].entityID === entityID) { - if (isNaN(this.data[i].weight)) this.data[i].weight = 0; - this.data[i].weight += weight; - this.parent.Utils.log('COOKIE Setting weight to ' + this.data[i].weight); - } + if (this.data[i].entityID !== entityID) continue; + if (subID && !this.data[i].subID) continue; + if (subID && subID !== this.data[i].subID) continue; + if (this.data[i].subID && !subID) continue; + + if (isNaN(this.data[i].weight)) this.data[i].weight = 0; + this.data[i].weight += weight; + this.parent.Utils.log('COOKIE Setting weight to ' + this.data[i].weight); } + this.parent.Utils.log('DiscoJuice setWeight failer (no entries found for) ' + entityID + ' # ' + subID); }, "discoResponse": function(sender, entityID, subID) { - this.parent.Utils.log('DiscoResponse Received from [' + sender + '] : ' + entityID + ' > ' + subID); - this.setWeight(entityID, -100); + this.parent.Utils.log('DiscoResponse Received from [' + sender + '] entityID: ' + entityID + ' subID: ' + subID); + + var settings = this.parent.Utils.options.get('disco'); + if (settings) { + var stores = settings.subIDstores; + if (stores) { + if (stores[entityID] && !subID) { + this.parent.Utils.log('Ignoring discoResponse from entityID: ' + entityID + ' because subID was required and not provided'); + return; + } + } + } + + this.setWeight(-100, entityID, subID); this.prepareData(); }, "calculateDistance": function() { - for(i = 0; i < this.data.length; i++) { + var targets, distances; + for(var i = 0; i < this.data.length; i++) { if (this.data[i].geo) { - this.data[i].distance = this.parent.Utils.calculateDistance( - this.data[i].geo.lat, this.data[i].geo.lon, this.location[0], this.location[1] - ); + + targets = []; + distances = []; + + // Support multiple geo coordinates. Make targets be an array of targets. + if (typeof(this.data[i].geo)=='object' && (this.data[i].geo instanceof Array)) { + targets = this.data[i].geo; + } else { + targets.push(this.data[i].geo); + } + +// console.log('targets'); console.log(targets); + + + // Iterate through all targets, and stuff the distances in to 'distances'. + for(var j = 0; j < targets.length; j++) { + +// console.log(targets[j]); + distances.push( + this.parent.Utils.calculateDistance(targets[j].lat, targets[j].lon, this.location[0], this.location[1]) + ); + } + this.data[i].distance = Math.min.apply( Math, distances); + +// console.log('distances'); console.log(distances); +// console.log('distance'); console.log(this.data[i].distance); + +// this.data[i].distance = this.parent.Utils.calculateDistance( +// this.data[i].geo.lat, this.data[i].geo.lon, this.location[0], this.location[1] +// ); this.data[i].distanceweight = (2 * Math.log(this.data[i].distance + 1)) - 10; + +// console.log('object'); console.log(this.data[i]); } } -// for(i = 0; i < this.data.length; i++) { -// if (this.data[i].distance) { -// console.log('Distance for [' + this.data[i].title + '] ' + this.data[i].distance); -// } else { -// console.log('Distance for [' + this.data[i].title + '] NA'); -// } -// } +// for(i = 0; i < this.data.length; i++) { +// if (this.data[i].distance) { +// console.log('Distance for [' + this.data[i].title + '] ' + this.data[i].distance); +// } else { +// console.log('Distance for [' + this.data[i].title + '] NA'); +// } +// } this.showdistance = true; this.prepareData(); }, @@ -182,19 +266,17 @@ DiscoJuice.Control = { "prepareData": function(showall) { - showall = (showall ? true : false); + var showall = (showall ? true : false); this.parent.Utils.log('DiscoJuice.Control prepareData()'); var hits, i, current, search; var someleft = false; - var term = this.getTerm(); - var categories = this.getCategories(); + var term = this.getTerm(); + var categories = this.getCategories(); - if (!this.data) { - return; - } + if (!this.data) return; /* * Sort data by weight... @@ -227,41 +309,35 @@ DiscoJuice.Control = { if (term) { search = this.parent.Utils.searchMatch(current,term); - if (search === false && current.weight > -50) { - continue; - } + if (search === false && current.weight > -50) continue; } else { search = null; } if (categories && categories.country) { - if (!current.country) { - continue; - } - if (current.country !== '_all_' && categories.country !== current.country && current.weight > -50) { - continue; - } + if (!current.country) continue; + if (current.country !== '_all_' && categories.country !== current.country && current.weight > -50) continue; } -// if (categories && categories.type) { -// if (!current.ctype && current.weight > -50) { -// // DiscoJuice.log(current); -// continue; -// } -// // DiscoJuice.log(current.title + ' category ' + current.ctype); -// if (categories.type !== current.ctype && current.weight > -50) continue; -// } +// if (categories && categories.type) { +// if (!current.ctype && current.weight > -50) { +// // DiscoJuice.log(current); +// continue; +// } +// // DiscoJuice.log(current.title + ' category ' + current.ctype); +// if (categories.type !== current.ctype && current.weight > -50) continue; +// } - if (++hits > this.maxhits) { + if (++hits > this.maxhits) {Â someleft = true; break; } - // DiscoJuice.log('Accept: ' + current.title); + // DiscoJuice.log('Accept: ' + current.title); var countrydef = null; if (current.country) { var cname = (this.parent.Constants.Countries[current.country] ? this.parent.Constants.Countries[current.country] : current.country); - if (cname !== '_all_') { + if (cname !== '_all_') { var cflag = (this.parent.Constants.Flags[current.country] ? this.parent.Constants.Flags[current.country] : undefined); countrydef = {'country': cname, 'flag': cflag}; } @@ -270,7 +346,6 @@ DiscoJuice.Control = { var descr = current.descr || null; // addItem(item, {country, flag}, keywordmatch, distance) - this.ui.addItem(current, countrydef, search, current.distance); } @@ -279,27 +354,34 @@ DiscoJuice.Control = { }, - "selectProvider": function(entityID) { + "selectProvider": function(entityID, subID) { - // console.log('entityid: ' + entityID); + // console.log('entityid: ' + entityID); var callback; var that = this; - var mustwait = that.discoWrite(entityID); + var mustwait = that.discoWrite(entityID, subID); if (this.parent.Utils.options.get('cookie', false)) { - this.parent.Utils.log('COOKIE write ' + entityID); - this.parent.Utils.createCookie(entityID); + var relID = entityID; + if (subID) relID += '#' + subID; + + this.parent.Utils.log('COOKIE write ' + relID); + this.parent.Utils.createCookie(relID); } var entity = null; for(i = 0; i < this.data.length; i++) { - if (this.data[i].entityID === entityID) { - entity = this.data[i]; + if (this.data[i].entityID == entityID) { + if (!subID || subID == this.data[i].subID) { + entity = this.data[i]; + } } } - // console.log(entity); + console.log('Entity Selected'); + console.log(entity); + return; callback = this.parent.Utils.options.get('callback'); if (callback) { @@ -321,9 +403,7 @@ DiscoJuice.Control = { "discoReadSetup": function() { var settings = this.parent.Utils.options.get('disco'); - if (!settings) { - return; - } + if (!settings) return; var html = ''; var returnurl = settings.url; @@ -332,42 +412,82 @@ DiscoJuice.Control = { var i; var currentStore; - if (!stores) { - return; - } + if (!stores) return; for(i = 0; i < stores.length; i++) { currentStore = stores[i]; - this.parent.Utils.log('Setting up DisoJuice Read from Store [' + currentStore + ']'); - iframeurl = currentStore + '?entityID=' + escape(spentityid) + '&isPassive=true&returnIDParam=entityID&return=' + escape(returnurl); - + html = '<iframe src="' + iframeurl + '" style="display: none"></iframe>'; + this.ui.addContent(html); + } + }, + + // Setup an iframe to read discovery cookies from other domains + "discoSubReadSetup": function() { + var settings = this.parent.Utils.options.get('disco'); + + if (!settings) return; + + var html = ''; + var returnurl = settings.url; + var spentityid = settings.spentityid; + var stores = settings.subIDstores; + var i; + var currentStore; + + if (!stores) return; + + for(var idp in stores) { + returnurl = settings.url + 'entityID=' + escape(idp); + currentStore = stores[idp]; + this.parent.Utils.log('Setting up SubID DisoJuice Read from Store [' + idp + '] => [' + currentStore + ']'); + iframeurl = currentStore + '?entityID=' + escape(spentityid) + '&isPassive=true&returnIDParam=subID&return=' + escape(returnurl); + this.parent.Utils.log('iFrame URL is [' + iframeurl + ']'); + this.parent.Utils.log('return URL is [' + returnurl + ']'); html = '<iframe src="' + iframeurl + '" style="display: none"></iframe>'; this.ui.addContent(html); } }, - "discoWrite": function(e) { + "discoWrite": function(entityID, subID) { var settings = this.parent.Utils.options.get('disco'); - if (!settings) { - return false; - } - if (!settings.writableStore) { - return false; - } + if (!settings) return false; + if (!settings.writableStore) return false; var html = ''; var returnurl = settings.url; var spentityid = settings.spentityid; var writableStore = settings.writableStore; - this.parent.Utils.log('DiscoJuice.Control discoWrite(' + e + ') to ' + writableStore); + if (subID) { + + if (settings.subIDwritableStores && settings.subIDwritableStores[entityID]) { + + writableStore = settings.subIDwritableStores[entityID]; + + this.parent.Utils.log('DiscoJuice.Control discoWrite(' + entityID + ') with SubID [' + subID + ']'); + + iframeurl = writableStore + escape(subID); + this.parent.Utils.log('DiscoJuice.Control discoWrite iframeURL (' + iframeurl + ') '); + + html = '<iframe src="' + iframeurl + '" style="display: none"></iframe>'; + this.ui.addContent(html); + return true; + + + } else { + return false; + } + + } + + this.parent.Utils.log('DiscoJuice.Control discoWrite(' + entityID + ') to ' + writableStore); iframeurl = writableStore + '?entityID=' + escape(spentityid) + '&IdPentityID=' + - escape(e) + '&isPassive=true&returnIDParam=bogus&return=' + escape(returnurl); + escape(entityID) + '&isPassive=true&returnIDParam=bogus&return=' + escape(returnurl); html = '<iframe src="' + iframeurl + '" style="display: none"></iframe>'; this.ui.addContent(html); @@ -386,9 +506,7 @@ DiscoJuice.Control = { minLength: 0, source: function( request, response ) { var term = request.term; - if (term.length === 1) { - return; - } + if (term.length === 1) return; // that.resetCategories(); that.prepareData(); } @@ -481,7 +599,7 @@ DiscoJuice.Control = { $.getJSON(countryapi, function(data) { // DiscoJuice.log(data); - if (data.status === 'ok' && data.country) { + if (data.status == 'ok' && data.country) { that.parent.Utils.createCookie(data.country, 'Country2'); that.setCountry(data.country); that.parent.Utils.log('DiscoJuice getCountry() : Country lookup succeeded: ' + data.country); @@ -506,7 +624,8 @@ DiscoJuice.Control = { //this.ui.popup.find("select.discojuice_filterTypeSelect").val() this.ui.popup.find("select.discojuice_filterCountrySelect").val('all'); }, - + + "getCategories": function () { var filters = {}; var type, country; @@ -534,6 +653,5 @@ DiscoJuice.Control = { this.ui.popup.find("input.discojuice_search").val(''); } -}; - +}; \ No newline at end of file diff --git a/modules/discojuice/www/discojuice/discojuice.misc.js b/modules/discojuice/www/discojuice/discojuice.misc.js index f85eacad3849a594a51920d7a1448e1936a96e3d..da89a947e564ea46fa441638073fb4bf140a3882 100644 --- a/modules/discojuice/www/discojuice/discojuice.misc.js +++ b/modules/discojuice/www/discojuice/discojuice.misc.js @@ -66,7 +66,7 @@ DiscoJuice.Constants = { 'CH': 'ch.png', 'TR': 'tr.png', 'GB': 'gb.png', - 'US': 'us.png' + 'US': 'us.png', } }; diff --git a/modules/discojuice/www/discojuice/discojuice.ui.js b/modules/discojuice/www/discojuice/discojuice.ui.js index 7d9907691a8d71073adb2935081ad33b9c18a1ec..efeb3cbeac2e29b3975d95f69ed9300ef562498b 100644 --- a/modules/discojuice/www/discojuice/discojuice.ui.js +++ b/modules/discojuice/www/discojuice/discojuice.ui.js @@ -99,7 +99,9 @@ DiscoJuice.UI = { if (debugweight) { textLink += '<div class="debug">'; - textLink += '<input type="text" style="display: block; width: 80%" name="debug.entityID" value="' + item.entityID + '" />'; + if (item.subID) { + textLink += '<input value="' + item.subID + '" />'; + } var w = 0; if (item.weight) { @@ -128,8 +130,13 @@ DiscoJuice.UI = { } + var relID = item.entityID; + if (item.subID) { + relID += '#' + item.subID; + } + // Wrap in A element - textLink = '<a href="" class="' + classes + '" rel="' + escape(item.entityID) + '" title="' + escape(item.title) + '">' + + textLink = '<a href="" class="' + classes + '" rel="' + escape(relID) + '" title="' + escape(item.title) + '">' + textLink + '</a>'; @@ -147,8 +154,18 @@ DiscoJuice.UI = { $(this).click(function(event) { event.preventDefault(); overthere.hide(); - var entityID = unescape($(this).attr('rel')); - overthere.control.selectProvider(entityID); + + // The "rel" attribute is containing: 'entityid#subid' + // THe following code, decodes that. + var relID = unescape($(this).attr('rel')); + var entityID = relID; + var subID = undefined; + if (relID.match(/^.*#.+?$/)) { + var matched = /^(.*)#(.+?)$/.exec(relID); + entityID = matched[1]; + subID = matched[2]; + } + overthere.control.selectProvider(entityID, subID); }); }); @@ -170,6 +187,10 @@ DiscoJuice.UI = { "enable": function(control) { var imgpath = this.parent.Utils.options.get('discoPath', '') + 'images/'; + + var textSearch = this.parent.Utils.options.get('textSearch', 'or search for a provider, in example Univerity of Oslo'); + var textHelp = this.parent.Utils.options.get('textHelp', 'Help me, I cannot find my provider'); + var textHelpMore = this.parent.Utils.options.get('textHelpMore', 'If your institusion is not connected to Foodle, you may create a new account using any of the Guest providers, such as <strong>OpenIdP (Guest users)</strong>.'); var html = '<div style="display: none" class="discojuice">' + '<div class="top">' + @@ -186,15 +207,14 @@ DiscoJuice.UI = { '</div>' + '<div id="search" class="" >' + - '<p><input type="search" class="discojuice_search" results=5 autosave="discojuice" name="searchfield" placeholder="or search for a provider, in example Univerity of Oslo" value="" /></p>' + + '<p><input type="search" class="discojuice_search" results=5 autosave="discojuice" name="searchfield" placeholder="' + textSearch + '" value="" /></p>' + '<div class="discojuice_whatisthis" style="margin-top: 15px; font-size: 11px;">' + - '<a href="#" class="textlink discojuice_what">Help me, I cannot find my provider</a>' + -// '<p class="discojuice_whattext">If your institusion is not connected to Foodle, you may either select to login one of the commercial providers such as Facebook or Google, or you may create a new account using any of the Guest providers, such as Feide OpenIdP.</p>' + - '<p class="discojuice_whattext">If your institusion is not connected to Foodle, you may create a new account using any of the Guest providers, such as <strong>OpenIdP (Guest users)</strong>.</p>' + + '<a href="#" class="textlink discojuice_what">' + textHelp + '</a>' + + '<p class="discojuice_whattext">' + textHelpMore + '</p>' + '</div>' + '</div>' + - '<div id="discojuice_locatemediv" style="display: none">' + + '<div id="locatemediv">' + '<div class="locatemebefore">' + '<p style="margin-top: 10px"><a id="locateme" href="">' + '<img style="float: left; margin-right: 5px; margin-top: -10px" src="' + imgpath + 'target.png" alt="locate me..." />' + @@ -207,6 +227,7 @@ DiscoJuice.UI = { '<div class="filters bottom">' + '<p style="margin 0px; text-align: right; color: #ccc; font-size: 75%">DiscoJuice © UNINETT</p>' + + '<button id="discojuiceextesion_listener" style="display:none">' + '</div>' + @@ -233,6 +254,9 @@ DiscoJuice.UI = { }); } + this.popup.find("#discojuiceextesion_listener").click(function() { + that.control.discojuiceextension(); + }); // Add listeners to the close button. this.popup.find(".discojuice_close").click(function() { @@ -245,9 +269,7 @@ DiscoJuice.UI = { }); - if (this.parent.Utils.options.get('location', false) && !!navigator.geolocation) { - this.popup.find("div#discojuice_locatemediv").show(); - + if (this.parent.Utils.options.get('location', false) && navigator.geolocation) { var that = this; $("#locateme").click(function(event) { var imgpath = that.parent.Utils.options.get('discoPath', '') + 'images/'; diff --git a/modules/discojuice/www/discojuice/logos/arcada.png b/modules/discojuice/www/discojuice/logos/arcada.png new file mode 100644 index 0000000000000000000000000000000000000000..c59831bdcc4afa1d820d6c9036853676c31eb72e Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/arcada.png differ diff --git a/modules/discojuice/www/discojuice/logos/bibsys.png b/modules/discojuice/www/discojuice/logos/bibsys.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb444867a929b87ab9ecbcd0ebb0330c66d0f47 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/bibsys.png differ diff --git a/modules/discojuice/www/discojuice/logos/helsinki.png b/modules/discojuice/www/discojuice/logos/helsinki.png new file mode 100644 index 0000000000000000000000000000000000000000..71a0d35e10018ac73ba5a9a09cc1d86ca15f3f8a Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/helsinki.png differ diff --git a/modules/discojuice/www/discojuice/logos/himolde.png b/modules/discojuice/www/discojuice/logos/himolde.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0e1591317464aa8063f1055b2f6151cd2a7d35 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/himolde.png differ diff --git a/modules/discojuice/www/discojuice/logos/hint.png b/modules/discojuice/www/discojuice/logos/hint.png new file mode 100644 index 0000000000000000000000000000000000000000..813bd0e75e27ddff3a0d26fddeb3671a3ac2fcd0 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/hint.png differ diff --git a/modules/discojuice/www/discojuice/logos/hist.png b/modules/discojuice/www/discojuice/logos/hist.png new file mode 100644 index 0000000000000000000000000000000000000000..733852480ec2291347a87f98d4fe9b6f46f5c5e8 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/hist.png differ diff --git a/modules/discojuice/www/discojuice/logos/iktsenter.png b/modules/discojuice/www/discojuice/logos/iktsenter.png new file mode 100644 index 0000000000000000000000000000000000000000..9049030992999ad4589271797ac15cd54d119b26 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/iktsenter.png differ diff --git a/modules/discojuice/www/discojuice/logos/moreogromsdal.png b/modules/discojuice/www/discojuice/logos/moreogromsdal.png new file mode 100644 index 0000000000000000000000000000000000000000..a726db6edc0bfb43a7cd541bddc96f07a43e3961 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/moreogromsdal.png differ diff --git a/modules/discojuice/www/discojuice/logos/nordtrondelag.png b/modules/discojuice/www/discojuice/logos/nordtrondelag.png new file mode 100644 index 0000000000000000000000000000000000000000..c23c1cd3f5493da778c5467440a22265cb4ac36c Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/nordtrondelag.png differ diff --git a/modules/discojuice/www/discojuice/logos/noreoguvdal.png b/modules/discojuice/www/discojuice/logos/noreoguvdal.png new file mode 100644 index 0000000000000000000000000000000000000000..45fd7039dc850188133b99529b3371c86bfc4e38 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/noreoguvdal.png differ diff --git a/modules/discojuice/www/discojuice/logos/sor-trondelag.png b/modules/discojuice/www/discojuice/logos/sor-trondelag.png new file mode 100644 index 0000000000000000000000000000000000000000..ef70b8e6e3ec1dfd9e5121f9e61e2cef5974cc7e Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/sor-trondelag.png differ diff --git a/modules/discojuice/www/discojuice/logos/tampere.png b/modules/discojuice/www/discojuice/logos/tampere.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1ad09584b88a6622fd4de00d95569d070afed0 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/tampere.png differ diff --git a/modules/discojuice/www/discojuice/logos/trondheim-kommune.png b/modules/discojuice/www/discojuice/logos/trondheim-kommune.png new file mode 100644 index 0000000000000000000000000000000000000000..ba72946e30fba4cf6093f566e8b307fd34a75650 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/trondheim-kommune.png differ diff --git a/modules/discojuice/www/discojuice/logos/uin.png b/modules/discojuice/www/discojuice/logos/uin.png new file mode 100644 index 0000000000000000000000000000000000000000..a72dda6c205cba1c213f37021b3e7daef7927b05 Binary files /dev/null and b/modules/discojuice/www/discojuice/logos/uin.png differ