Thursday, August 27, 2009

Free extending Spiceworks webinar

Pretty exciting webinar for those looking to get into Spiceworks plugin creation but haven't yet jumped in. Plugin writers can win some neat prizes just as mentioned below.

Love Spiceworks but wish it did one thing differently? With the plugin functionality you can extend Spiceworks to meet the needs of your network. From fun widgets and skins to new functionality you can make Spiceworks yours. Join this webinar and learn how you can get started writing plugins & more. Plus you could win an all expense paid trip to SpiceWorld Austin and a $250 Amazon gift card by submitting your plugin to the plugin contest.

Title: Extending Spiceworks
Date: Tuesday, September 1, 2009
Time: 10:00 AM - 11:00 AM CDT
Registration Link: https://www2.gotomeeting.com/register/246101330

Tuesday, August 25, 2009

A new version of Spiceworks, a new helpdesk customization revision

Well Spiceworks released version 4.1 of their software so I have gone and updated the helpdesk optimization plugin. You will notice that there is a check for version 4.1 due to a small bug in the search for devices, but not to worry, as everything works. For the next release, I plan on having info for software too and not just devices.

Anyway, the code is as follows:

// ==SPICEWORKS-PLUGIN==
// @name Help Desk Customizations Clone
// @description Adds minor enhancements to your Help Desk, including ticket status in the toolbar, colors for past due tickets and private messages, and information on devices in the Related To field.
// @version 0.9
// ==/SPICEWORKS-PLUGIN==
//
// Author: Brent Wong
// Date: June 30, 2009
// SW Version: 3.6, 4.0, 4.1

var is4 = SPICEWORKS.version && SPICEWORKS.version.is(">= 4.0");
var is41 = SPICEWORKS.version && SPICEWORKS.version.is(">= 4.1");

var helpdeskCustSettings = [
{name:'past_due_color', label:'Past Due Highlight Color', type:'string', defaultValue:'#ffdede', example:'Default: #ffdede'},
{name:'private_note_color', label:'Private Note Color', type:'string', defaultValue:'#cccccc', example:'Default: #cccccc'},
{name:'tickets_open_display', label:'Display Open Tickets', type:'checkbox', defaultValue:true},
{name:'tickets_due_display', label:'Display Past Due Tickets', type:'checkbox', defaultValue:true},
{name:'tickets_unassigned_display', label:'Display Unassigned Tickets', type:'checkbox', defaultValue:true},
{name:'priority_low_color', label:'Priority Low Color', type:'string', defaultValue:'#c9dcc8', example:'Default: #c9dcc8'},
{name:'priority_med_color', label:'Priority Medium Color', type:'string', defaultValue:'#ffffd7', example:'Default: #ffffd7'},
{name:'priority_high_color', label:'Priority High Color', type:'string', defaultValue:'#fc939c', example:'Default: #fc939c'}
]

// Setup based on Spiceworks version
if (is4){
// For version 4.0
var strToolbar = 'main-toolbar';
var strToolbarDown = 'span.right';
var strDevLink = 'related_to_property';
var strDevLinkDown = '.value a';
var strDevURL = 'devices/';
var strDevInfoAdd = 'related_to_section';
}else{
// For older versions
var strToolbar = 'toolbar';
var strToolbarDown = 'span.advanced_controls';
var strDevLink = 'ticket_review_summary_view';
var strDevLinkDown = 'p.related_to a';
var strDevURL = 'id-';
var strDevInfoAdd = 'ticket_purchase_container';
helpdeskCustSettings.push(
{name: 'expanded_height_enabled', label:'Enable Increased Window Height', type:'checkbox', defaultValue: false},
{name: 'expanded_height', label: 'Ticket Window Height (in px)', type: 'string', defaultValue: '500', example: 'Default: 500'}
);
}

plugin.configure({
settingDefinitions: helpdeskCustSettings
});

function refreshToolbarTicketInfo(){
// display ticket stats
if (plugin.settings.tickets_open_display || plugin.settings.tickets_due_display || plugin.settings.ticket_unassigned_display){
var displayString = '';

if (plugin.settings.tickets_open_display){
displayString += '<span><strong>Open:</strong> ' + SPICEWORKS.data.Ticket.find('all', {filter:'open'}).length + '</span>';
}
if (plugin.settings.tickets_due_display){
displayString += '<span><strong>Past Due:</strong> ' + SPICEWORKS.data.Ticket.find('all', {filter:'past_due'}).length + '</span>';
}
if (plugin.settings.tickets_unassigned_display){
displayString += '<span><strong>Unassigned:</strong> ' + SPICEWORKS.data.Ticket.find( 'all', {filter:'unassigned'}).length + '</span>';
}

var toolbarTicketInfo = $(strToolbar).down(strToolbarDown + ' span.toolbar_ticket_info');

if (toolbarTicketInfo){
toolbarTicketInfo.remove();
}

$(strToolbar).down(strToolbarDown).insert({top:'<span class="toolbar_ticket_info">' + displayString + '</span>'});
}
}

SPICEWORKS.app.helpdesk.ready(function(){
// set styling
if (is4){
SPICEWORKS.utils.addStyle("\
span.toolbar_ticket_info{margin-right:20px;padding:0 5px;border:1px solid #999;}\
span.toolbar_ticket_info span{margin-right:5px;}\
#related_to_summary{clear:both;border:1px solid #ccc;padding:10px;margin:5px 0;overflow:hidden;}\
#related_to_summary ul{margin:0;padding:0;text-align:left;}\
#related_to_summary p{float:right;}\
.filter-priority-low td.priority{background-color:" + plugin.settings.priority_low_color + ";}\
.filter-priority-med td.priority{background-color:" + plugin.settings.priority_med_color + ";}\
.filter-priority-high td.priority{background-color:" + plugin.settings.priority_high_color + ";}\
");
}else{
SPICEWORKS.utils.addStyle("\
span.toolbar_ticket_info{font-size:1em;color:#000;float:right;background:#e8e8e8;padding:3px 5px;border:#888 1px solid;}\
span.toolbar_ticket_info span{margin-right:5px;}\
#related_to_summary{clear:both;border:1px solid #ccc;padding:10px;margin:5px 0;overflow:hidden;}\
#related_to_summary ul{margin:0;padding:0;}\
#related_to_summary li{float:left;width:200px;}\
#related_to_summary p{float:right;}\
.filter-priority-low td.priority{background-color:" + plugin.settings.priority_low_color + ";}\
.filter-priority-med td.priority{background-color:" + plugin.settings.priority_med_color + ";}\
.filter-priority-high td.priority{background-color:" + plugin.settings.priority_high_color + ";}\
");

// Only Expand the height on version 3
if(plugin.settings.expanded_height_enabled){
SPICEWORKS.utils.addStyle("body.tickets #active_overview {height: " + plugin.settings.expanded_height + "px !important;}");
}
}

// mark past due ticket rows
$('td.past_due').each(function(item){
item.up().setStyle({backgroundColor: plugin.settings.past_due_color});
});

refreshToolbarTicketInfo();

});

SPICEWORKS.app.helpdesk.ticket.closed(function(){
refreshToolbarTicketInfo();
});

SPICEWORKS.app.helpdesk.ticket.ready(function(){
// color private messages
$('li.private').each(function(item){
item.setStyle({backgroundColor: plugin.settings.private_note_color})
});

// add device summary
var deviceLink = $(strDevLink).down(strDevLinkDown);
if(deviceLink) {
var deviceURL = deviceLink.readAttribute('href');
var startIndex = deviceURL.indexOf(strDevURL);

if(startIndex != -1) {
var substring = deviceURL.substring(startIndex);
var deviceID = substring.gsub(/[^\d]/, '');
if (is41) {
var devices = SPICEWORKS.data.Device.find('all', {ids:deviceID});
var device = devices.first();
} else {
var device = SPICEWORKS.data.Device.find(deviceID);
}
if(device) {
var displayInfo = '<div id="related_to_summary" style="display:none;"><ul>'
var listStyle = '<li>'
if(device.ip_address && !device.ip_address.empty()) {
displayInfo += listStyle + '<strong>IP:</strong> ' + device.ip_address + '</li>';
}
if(device.mac_address && !device.mac_address.empty()) {
displayInfo += listStyle + '<strong>MAC:</strong> ' + device.mac_address + '</li>';
}
if(device.manufacturer && !device.manufacturer.empty()) {
displayInfo += listStyle + '<strong>Vendor:</strong> ' + device.manufacturer + '</li>';
}
if(device.current_user && !device.current_user.empty()) {
displayInfo += listStyle + '<strong>Last Login:</strong> ' + device.current_user + '</li>';
}
if(device.primary_owner_name && !device.primary_owner_name.empty()) {
displayInfo += listStyle + '<strong>Owner:</strong> ' + device.primary_owner_name + '</li>';
}
if(device.asset_tag && !device.asset_tag.empty()) {
displayInfo += listStyle + '<strong>Asset Tag:</strong> ' + device.asset_tag + '</li>';
}
if(device.operating_system && !device.operating_system.empty()) {
displayInfo += listStyle + '<strong>OS:</strong> ' + device.operating_system + '</li>';
}
if(device.serial_number && !device.serial_number.empty()) {
displayInfo += listStyle + '<strong>Serial No:</strong> ' + device.serial_number + '</li>';
}
displayInfo += '</ul><p><a href="#" onclick="new Effect.BlindUp(\'related_to_summary\', {duration:0.20}); return false;">hide</a></p></div>';
$(strDevInfoAdd).insert({after: displayInfo});
deviceLink.insert({after: '&nbsp;&nbsp;(<a href="#" onclick="new Effect.BlindDown(\'related_to_summary\', {duration:0.20}); return false;">info</a>)'})
}
}
}
});