integrations sql & more - niug presentations...– php – wordpress, joomla – .net –...

41
INTEGRATIONS SQL & MORE NEWLIN JOLME, INTEGR8TIV ASHLEY HUNT, PGA CAUSEIS @njolme @integr8tiv

Upload: others

Post on 26-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

INTEGRATIONS SQL & MORENEWLIN JOLME, INTEGR8TIV ASHLEY HUNT, PGA CAUSEIS

@njolme@integr8tiv

Page 2: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

AGENDA

PANELISTSNewlin Jolme, Integr8tivAshley Hunt, PGA Australia Causeis

OVERVIEWIn a perfect world, iMIS would do everything we need. The fact is, sometimes we need help from the outside world. Learning Management Systems, Electronic Membership Cards, and Abstract Submissions are examples of outside systems that need to integrate with iMIS. Come learn from this panel of users who have taken iMIS integrations to the next level.

IMIS USER PANEL - INTEGRATIONS, SQL & MORE TECHIE TALK

Page 3: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Newlin Jolme, Integr8tiv– Introduction– Version considerations– Overview of iMIS 20 eco system– Methods & Approaches– Integr8tiv Examples– Considerations

• Ashely Hunt, PGA Australia• Causeis• Open discussion / Questions

AGENDAIMIS USER PANEL – INTEGRATIONS, SQL AND MORE TECHIE TALK

Page 4: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

INTEGR8TIVYOUR IMIS & BUSINESS SYSTEMS PARTNER

• Integr8tiv assists iMIS customers to get more from their business systems

• Authorized iMIS Solution Provider with unparalleled iMIS experience• iMIS Certified Professionals and Certified iMIS Extension Developers • Founded in 2012, now with 5 full time iMIS dedicated consultants• Located in Melbourne, servicing customers in Asia Pacific and world

wide

Page 5: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

INTEGR8TIVYOUR IMIS & BUSINESS SYSTEMS PARTNER

Services include:• Award winning RiSE websites

iMIS Dashboards and reporting• invoice and receipt automation &

other process automation• iMIS upgrades• iMIS training and support• Staff site and customer portal

development• iQA, Crystal and SSRS reporting• Business Intelligence reporting

• Financial Integration, inc MYOB and Xero

• System Health and usage reviews• IT strategy and Roadmapping• Passbook member cards• Marketing automation and email

marketing• Systems integration• 3rd party CMS and iMIS integration• LMS integration• Everything iMIS

Page 6: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Which version are people on?– iMIS 20 100/200/300?– iMIS 15.x or iMIS 20.x?

• 15.2.15 is considered the first solid RiSE based version with integration options

• We recommend version 20+ for integrations• iMIS 100 & 200

– Hosted SAAS versions– No dll’s, Task Centre or installed software – HTTP, SOA & REST web services are available– Restricted SQL access, online version of SQL Server Manager available

IMIS VERSION CONSIDERATIONS15/20 & 100, 200, 300

Page 7: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• AMS – Association Management System• EMS – Engagement Management System

• CMS – Content Management System

• LMS – Learning Management System

• SMS – Student Management System

IMIS 20 ECO SYSTEMTERMINOLOGY

Page 8: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

IMIS 20 SYSTEM DIAGRAMSUBTITLE PAGE WITH TEXT

Page 9: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• SQL– Direct access via tables, views, triggers, functions & stored procedures

• iBO– Original API circa 10.6 – 15.x

• HTTP Web Services– Simple web services from 15.x onwards

• iMIS Task Centre– Third party automation & integration option

• iMIS SOA– Complex web services 15.x onwards

• REST– Alternative web services 20.x onwards

METHODS OF INTEGRATIONSQL, IBO, HTTP WEB SERVICES, SOA, REST

Page 10: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• CMS– PHP – WordPress, Joomla– .NET – Sitecore, Sitefinity, Dot

Net Nuke, Umbraco

• SMS– WiseNET– VETTrak

• LMS– Cahoot Learning

EXAMPLE INTEGR8TIV INTEGRATIONSSUBTITLE PAGE WITH TEXT

• Digital Member Cards– Passbook passes by PassSlot

• Digital Rights Management– BooXtream– Edition Guard

• Financial – XERO (GL Interface Module)

• Email– Campaign Monitor

Page 11: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Maintenance & support

• Risks

• Recommend buying off the shelf where possible

CONSIDERATIONSSUBTITLE PAGE WITH TEXT

Page 12: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

ASHLEY HUNTPROFESSIONAL GOLFERS ASSOCIATION OF AUSTRALIA

Page 13: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

PGA of Australia is one of Australia’s oldest sporting bodies, forming in 1911

Consists of 2,700+ members made up of tournament players, golf trainees and vocational members working full time in the golfing industry.

PGA runs over 600 professional golfing events per year for professionals.

We offer accredited continuing education for members and have a nationally recognised Trainee Program. Recently we launched a formal training program called Community Instructor in conjunction with Golf Australia to allow teachers, Golf Club members or other people accreditation to assist in the delivery of golf programs.

We have approx. 70 staff, mostly based in the National Office in Melbourne with offices in NSW, QLD, SA and WA

Has been running imis since 2009 currently on 20.1 looking to upgrade to Q4 in December

Using Rise, Informz, Webformz, IEmail, Meeting Closer, Task Centre, AutoLogin

PGA OF AUSTRALIA

Page 14: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• We use an eLearning system called “The Fairway” – by Workstar (http://www.workstar.com.au/)

• Originally this eLearning System was designed to deliver learning modules purely to the trainee program however has evolved to offer learning for PGA members CDP Program (called ACE), Community Instructors and learning to the PGA IGI

• The number of users went from around 200 per year to upwards of 3000 this year.

• Administration of the Ace Program, Trainee Program & Community Instructor is done via Imis, however there is no direct integration into the Fairway system.

• We needed to have a “Live” Enrolment system developed to allow instant access to the Fairway System for our ACE and Community Instructor programs. Previously access was sent as a CSV file daily.

PGA OF AUSTRALIA – ELEARNING SYSTEM REQUIREMENT

Page 15: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• All eLearning Registrations are done via Imis Events in both Rise and Desktop

• Trainee Program enrolment is done via Imis Desktop – usually in bulk

• Ace Modules & Community Instructor can be enrolled via a Rise Website

PGA OF AUSTRALIA – ELEARNING LIVE ENROLMENT

Page 16: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Using Task Centre, Stored Procedures and an FTP we are able to send the enrolment file to Workstar. They poll the FTP every minute and process the file to allow access to the eLearning system.

• The task would also send an email confirming the enrolment to the user and provide the username and password and Url to access the eLearning System

• The user would then log on to the eLearning system and complete the module.

• Workstar then sends a daily file with results for us to process with results.

PGA OF AUSTRALIA – THE PROCESS / CONSIDERATIONS

Page 17: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

Considerations:-

• Access for each program is separate (Trainee, ACE, IGI). A set of UD fields is required to control access to the different parts of the eLearning system.

• A username and password needs to be generated if none exist for the user. There is no SSO in place

• Access for ACE & Community Instructors expire after a year – when enrolled an expiration date needs to be calculated.

PGA OF AUSTRALIA

Page 18: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

PGA OF AUSTRALIA – THE TASK CENTRE TASK

Page 19: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

Post Task:-

• On a daily schedule we send another file to the eLearning platform to ensure anyone who has expired does not get access. This acts as a control file.

PGA OF AUSTRALIA – POST TASK

Page 20: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

Post Task:-

• In a separate task we send emails advising of any expirations of access to the eLearning System (and other alerts as needed)

PGA OF AUSTRALIA – POST TASK

Page 21: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

Risks / Issues:-

• FTP sits on our servers – potential for no connection

• Configuration of the Event / Function codes needs to match the eLearning codes and sometimes there has been user error

Future Maintenance / Support:

• If more programs are added there is quite a bit of work setting up new access fields, changes of stored procedures etc

PGA OF AUSTRALIA – POST TASK

Page 22: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Golf Administration System (OCS) administers all our professional golfing events from player entries, scoring and prizemoney payments etc.

• We need to transfer player information into the OCS system from Imis. Similar to the eLearning solution we send to the OCS system via Task Centre triggered tasks

• We also need to re import financial data back into Imis so players can print a statement / entry fee invoice for tax purposes via Rise and SSRS

PGA OF AUSTRALIA – GOLF ADMINISTRATION SYSTEM

Page 23: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Data is obtained via an XML feed from the OCS system. Using SSIS we import from the XML file into User Defined tables in Imis

PGA OF AUSTRALIA – GOLF ADMINISTRATION SYSTEM

Page 24: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

With over 20 years of experience in business application development, database administration and financial systems integration, He brings considerable business and technical consulting expertise to the causeis team.

He has specialist skills in enterprise-level business systems including accounting integration, data analysis and migration, business requirements gathering and business process modelling. He is a Microsoft Certified Professional (MCPI) and a certified ITIL V3 practitioner in IT Service Management.

Before working with causeis, He gained over ten years of experience as a contractor and consultant supporting iMIS in the fundraising, not-for-profit, training and healthcare sectors. Prior to this, He was employed by professional services firm PricewaterhouseCoopers and contracted to utilities distributor AGL, entertainment provider Foxtel and not-for-profit Mission Australia.

He has consulted widely from small not-for-profit organisations through to large Federal Government agencies on IT Service Management, asset management, capacity management and six-sigma process design.

SOLUTIONS CONSULTANT, CAUSEIS

Page 25: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

IMIS INTEGRATIONEXAMPLE: MOODLE LMS INTEGRATION

Page 26: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Problem:– Moodle uses built-in user logins out of the box– Without integration, customer has two sets of user credentials to

remember:• iMIS web site user credentials• Moodle LMS user credentials.

• Objectives:– Use iMIS credentials to access Moodle– Reset request in Moodle redirects to iMIS handler.

EXAMPLE: MOODLE LMS INTEGRATION

Page 27: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Solution:– Custom authentication plugin for Moodle– Authenticates username and password against iMIS web service– Moodle processes the iMIS response– Password reset link in Moodle points to web site instead of Moodle

EXAMPLE: MOODLE LMS INTEGRATION

Moodle

IMISWeb

Services

Send username

and password

Response “successful

User Login

Page 28: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Plugin consists of:– Version file– Language file– Admin form layout– Authentication Function.

EXAMPLE: MOODLE LMS INTEGRATION

Page 29: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Version file – notifies Moodle of the last modify date of the plugin

<?php

$plugin->version = 2016012001;

MOODLE LMS INTEGRATION

Page 30: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Language file – labels for the plugin configuration page in Moodle

$string['auth_imisdescription'] = 'This Moodle authentication plugin uses IMIS web services to check whether a username and password is valid.';

$string['auth_imishost'] = 'The IMIS web service address.';

$string['auth_imishost_key'] = 'Host';

$string['auth_imischangepasswordurl_key'] = 'Password-change URL';

...

EXAMPLE: MOODLE LMS INTEGRATION

Page 31: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Admin form layout file – screen for configuration settings in Moodle

<table cellspacing="0" cellpadding="5" border="0"><tr valign="top" class="required"><td align="right"><?php print_string('auth_imishost_key', 'auth_imis') ?>:

</td><td><input name="host" type="text" size="30" value="<?php echo $config->host ?>" /></td>...

EXAMPLE: MOODLE LMS INTEGRATION

Page 32: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Plugin file – register the plugin

class auth_plugin_imis extends auth_plugin_base {

function auth_plugin_imis() {$this->authtype = 'imis';$this->config = get_config('auth/imis');

}

function user_login($username, $password) {...}

}

EXAMPLE: MOODLE LMS INTEGRATION

Page 33: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Plugin file - create a SOAP request to iMIS Web Service$host.= "?op=LoginUser";$strEnvelope = <<<EOS<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><LoginUser xmlns='http://imis.com/webservices/membership'><username>$username</username><password>$password</password>

<staffUser>false</staffUser></LoginUser>

</soap:Body></soap:Envelope>EOS;

EXAMPLE: MOODLE LMS INTEGRATION

Page 34: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Plugin file - send the SOAP request using CURL (a http request service)

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $host); curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); curl_setopt($curl, CURLOPT_POSTFIELDS, $strEnvelope); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8','SOAPAction: "http://imis.com/webservices/membership/LoginUser"', "Content-length: ".strlen($strEnvelope)));

$strresponse = curl_exec($curl);

EXAMPLE: MOODLE LMS INTEGRATION

Page 35: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Plugin file - process the response

$auth = false;if(curl_errno($curl)==0){ // CURL request was successful

if(strpos($strresponse,"Succeeded")>0){ // Read the iMIS response$auth = true;

}}if($auth){

complete_user_login($user); // Moodle function to prepare session}

$auth = true;}

curl_close($curl);return $auth;}

EXAMPLE: MOODLE LMS INTEGRATION

Page 36: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Plugin file – redirect request for password reset to iMIS web site

$config->changepasswordurl = 'http://www.mywebsite.com/resetpassword';set_config('changepasswordurl', $config->changepasswordurl, 'auth/imis');

function auth_plugin_imis() {

$this->authtype = 'imis';$this->config = get_config('auth/imis');

}

function can_change_password() {return !empty($this->config->changepasswordurl);

}

function change_password_url() {return new moodle_url($this->config->changepasswordurl);

}

EXAMPLE: MOODLE LMS INTEGRATION

Page 37: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Plugin file – processing course enrolments– Use Moodle External Database Enrolment method.– The External Database can query any external database table for Student

ID and Course ID.– Both add and remove are applied when reading database.– Create view in iMIS over Certification or Event enrolments.– The External Database is read during the internal function

complete_user_login() within the authentication plugin.

if($auth){complete_user_login($user);

}$auth = true;}

EXAMPLE: MOODLE LMS INTEGRATION

Page 38: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Other integration opportunities:– Extend the authentication plugin to include automatic user account

creation and update– Extend the authentication plugin to perform a single-sign-on without user

signing in twice– Maintenance script to remove deleted users– Automation to print assessments to PDF files for Registered Training

Organisation (RTO) records– Extraction of Grade Book and Quiz data to create Professional

Development records in iMIS.

EXAMPLE: MOODLE LMS INTEGRATION

Page 39: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

• Questions?

EXAMPLE: MOODLE LMS INTEGRATION

Page 40: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

Newlin Jolme Ashley HuntIntegr8tiv PGA [email protected] [email protected]

[email protected]

+61 468 344 574

QUESTIONS& CONTACT DETAILS

Page 41: INTEGRATIONS SQL & MORE - NiUG Presentations...– PHP – WordPress, Joomla – .NET – Sitecore, Sitefinity, Dot Net Nuke, Umbraco • SMS – WiseNET – VETTrak • LMS – Cahoot

WITH THANKS TO OUR SPONSORSNIUG DISCOVERY CONFERENCE