Skip to content

Instantly share code, notes, and snippets.

@skipjac
Created March 14, 2013 21:11
Show Gist options
  • Save skipjac/5165313 to your computer and use it in GitHub Desktop.
Save skipjac/5165313 to your computer and use it in GitHub Desktop.
create a ticket in a zendesk spoke from a widget in classic
<div id='createtheticket'>
<ol>
<li>
<div class="select" style>
<label for="zendeskSelect">Select Spoke Account</label>
<select id="zendeskSelect" name="zendeskSelect" onchange style="width: auto;">
<option value="-">-</option>
<option value="sutoka.techassistant.net">Germany</option>
</select>
</li>
<li>
<div class="select" style>
<label for="zendeskPri">Priority</label>
<select id="zendeskPri" name="zendeskPri" onchange style="width: auto;">
<option value="0">-</option>
<option value="1">Low</option>
<option value="2">Normal</option>
<option value="3">High</option>
<option value="4">Urgent</option>
</select>
</li>
<li>
<div class="select" style>
<label for="zendeskType">Type</label>
<select id="zendeskType" name="zendeskType" onchange style="width: auto;">
<option value="0">-</option>
<option value="1">Question</option>
<option value="2">Incident</option>
<option value="3">Problem</option>
<option value="4">Task</option>
</select>
</li>
<li>
<div class="select" style>
<label for="zendeskTags">category</label>
<select id="zendeskTags" name="zendeskTags" onchange style="width: auto;">
<option value="">-</option>
<option value="info_betaling_factuur">Info::betaling::factuur</option>
<option value="info_betaling_achteraf_betalen">Info::betaling::achteraf_betalen</option>
<option value="info_betaling_wijzigen_factuur">Info::betaling::wijzigen_factuur</option>
<option value="info_betaling_overschrijving">nfo::betaling::overschrijving</option>
<option value="info_algemeen_waar_factuur">Info::betaling::waar_factuur</option>
<option value="info_algemeen_wijzigen_wachtwoord">Info::algemeen::wijzigen_wachtwoord</option>
<option value="info_algemeen_samplepack">Info::algemeen::samplepack</option>
<option value="info_bestellen_hoe_bestellen">Info::bestellen::hoe_bestellen</option>
<option value="info_bestellen_meerdere_jobs_1_order">Info::bestellen::meerdere_jobs_1_order</option>
<option value="info_bestellen_waar_promocode">Info::bestellen::waar_promocode</option>
<option value="info_bestellen_hoe_bestand_opladen">Info::bestellen::hoe_bestand_opladen</option>
<option value="info_leveren_levertermijn_voor_bestelling">Info::leveren::levertermijn_voor_bestelling</option>
<option value="info_leveren_levering_buitenland">Info::leveren::levering_buitenland</option>
<option value="info_leveren_expresskoerier">Info::leveren::expresskoerier</option>
<option value="info_leveren_bij_jullie_komen_halen">Info::leveren::bij_jullie_komen_halen</option>
<option value="info_offerte_standaard">Info::offerte::standaard</option>
<option value="info_offerte_op_maat">Info::offerte::op_maat</option>
<option value="info_offerte_niet_in_gamma">Info::offerte::niet_in_gamma</option>
<option value="info_offerte_sponsoring">Info::offerte::sponsoring</option>
<option value="info_opmaak_doen_jullie_opmaak">Info::opmaak::doen_jullie_opmaak</option>
<option value="info_opmaak_mijn_bestand_ok">Info::opmaak::mijn_bestand_ok</option>
<option value="info_opmaak_drukproef">Info::opmaak::drukproef</option>
<option value="info_opmaak_template">Info::opmaak::template</option>
<option value="info_opmaak_welke_bestanden">Info::opmaak::welke_bestanden</option>
<option value="info_opmaak_hoe_bestand_correct_opmaken">Info::opmaak::hoe_bestand_correct_opmaken</option>
<option value="info_product_papiergrammage">Info::product::papiergrammage</option>
<option value="info_product_uv_spotlak">Info::product::UV_spotlak</option>
<option value="info_product_blinddruk">Info::product::blinddruk</option>
<option value="info_product_pantone">Info::product::pantone</option>
<option value="info_product_kappen">Info::product::kappen</option>
<option value="info_product_kost_blinddrukvorm">Info::product::kost_blinddrukvorm</option>
<option value="info_product_kost_kapvorm">Info::product::kost_kapvorm </option>
<option value="info_product_rillen_perforeren">Info::product::rillen_perforeren</option>
<option value="info_product_waar_nummering">Info::product::waar_nummering</option>
<option value="info_product_bijsnijden">Info::product::bijsnijden</option>
<option value="prepress_bleed">Prepress::bleed</option>
<option value="prepress_low_res">Prepress::low_res</option>
<option value="prepress_rgb_cmyk">Prepress::rgb/cmyk</option>
<option value="prepress_font">Prepress::font</option>
<option value="prepress_geen_bestand">Prepress::geen_bestand</option>
<option value="prepress_formaat">Prepress::formaat</option>
<option value="prepress_geen_jpg_pdf">Prepress::geen_jpg/pdf</option>
<option value="prepress_verkeerd_geplaatst">Prepress::verkeerd_geplaatst</option>
<option value="prepress_kleuren_niet_goed">Prepress::kleuren_niet_goed</option>
<option value="prepress_papiertype">Prepress::papiertype</option>
<option value="prepress_aantallen_niet_juist">Prepress::aantallen_niet_juist</option>
<option value="press_hoeveelheid">Press::hoeveelheid</option>
<option value="press_kleuren_niet_goed">Press::kleuren_niet_goed</option>
<option value="press_papiertype">Press::papiertype</option>
<option value="postpress_verkeerd_gesneden">Postpress::verkeerd_gesneden</option>
<option value="press_spots">Press::spots</option>
<option value="postpress_kappen_nok">Postpress::kappen_nok</option>
<option value="postpress_blinddruk_nok">Postpress::blinddruk_nok</option>
<option value="postpress_niet_gerild">Postpress::rillen</option>
<option value="postpress_niet_gevouwd">Postpress::vouwen</option>
<option value="postpress_niet_gesorteerd">Postpress::sorteren</option>
<option value="logistics_ups_drukwerk_te_laat">Logistics::ups::drukwerk_te_laat</option>
<option value="logistics_ups_drukwerk_lost">Logistics::ups::drukwerk_lost</option>
<option value="logistics_ups_verkeerd_adres">Logistics::ups::verkeerd_adres</option>
<option value="logistics_ups_beschadigd_door_transport">Logistics::ups::beschadigd_door_transport</option>
<option value="postpress_verpakking">Postpress::verpakking</option>
<option value="designtool_bestand_laad_niet_op">Designtool::bestand_laad_niet_op</option>
<option value="designtool_info_aflooplijnen">Designtool::info_aflooplijnen</option>
<option value="payments_dubbel_betaald">Payment::dubbel_betaald</option>
<option value="payment_verkeerd_bedrag">Payment::verkeerd_bedrag</option>
<option value="payment_promocode_nok">Payment::promocode_nok</option>
<option value="logistics_ups_waar_is_mijn_bestelling">Logistics::ups::waar_is_mijn_bestelling</option>
<option value="payment_foutmelding_bij_betaling">Payment::foutmelding_bij_betaling</option>
<option value="payment_refund_nok">Payment::refund_nok</option>
<option value="wijzigen_bestelling_oplage">Wijzigen bestelling::oplage</option>
<option value="wijzigen_bestelling_ander_bestand">Wijzigen bestelling::ander_bestand</option>
<option value="wijzigen_bestelling_formaat">Wijzigen bestelling::formaat</option>
<option value="wijzigen_bestelling_papiertype">Wijzigen bestelling::papiertype</option>
<option value="wijzigen_bestelling_lever-_ophaaladres">Wijzigen bestelling::lever-_ophaaladres</option>
<option value="annulatie_bestelling_te_laat_na_prepress">Annulatie bestelling::te_laat_na_prepress</option>
<option value="annulatie_bestelling_te_laat_door_productie">Annulatie bestelling::te_laat_door_productie</option>
<option value="annulatie_bestelling_bestand_nok">Annulatie bestelling::bestand_nok</option>
<option value="logistics_bpost_drukwerk_te_laat">Logistics::bpost::drukwerk_te_laat</option>
<option value="logistics_bpost_drukwerk_lost">Logistics::bpost::drukwerk_lost</option>
<option value="logistics_bpost_beschadigd_door_transport">Logistics::bpost::beschadigd_door_transport</option>
<option value="logistics_bpost_waar_is_mijn_bestelling">Logistics::bpost::waar_is_mijn_bestelling</option>
<option value="logistics_bpost_vekeerd_adres">logistics_bpost_waar_is_mijn_bestelling</option>
<option value="prepress_nieuw_bestand_klant">Prepress::nieuw_bestand_klant</option>
<option value="spam">Spam</option>
</select>
</li>
</ol>
<ol>
<li>
<label for="userName">Name</label>
<span> (required) </span>
<input class="required" type="text" name="userName" id="userName" style="width: 196px" />
</li>
<li>
<label for="userEmail">Email</label>
<span> (required) </span>
<input class="required" type="text" name="userEmail" id="userEmail" style="width: 196px" />
</li>
<li>
<label for="ticketSubject">Subject</label>
<span> (required) </span>
<input class="required" type="text" name="ticketSubject" id="ticketSubject" style="width: 196px" />
</li>
<li>
<label for="ticketDesc">Description<label>
<span> (required) </span>
<textarea class="required" rows="10" name="ticketDesc" id="ticketDesc" style="width: 196px"> </textarea>
</li>
</ul>
</div>
<input type='button' value='CreateTicket' onclick='attempt_create();'>
<div style='padding: 4px; font-weight: bold; font-size: 18px;'>
<div id='createtheticket_status'></div>
<div id='createtheticket_error'></div>
</div>
</div>
<script type="text/javascript">
// This is the main bit of code, the action that occurs when the "Do" button is hit.
// All other methods should be put into their own little sections
var spoke;
var isValidEmail = function(address) {
var reg = /^.+\@.+\..+$/;
return reg.test(address);
};
var current_callbacks = {};
log_error = function(arg) {
$('createtheticket_error').innerHTML = arg;
}
log_status = function(arg) {
$('createtheticket_status').innerHTML = arg;
}
fade_status = function(arg) {
setTimeout( function() {
log_status('');
log_error('');
}, 6000);
}
do_action = function() {
var current_action = 'create_ticket';
if (current_action) {
var callback = current_callbacks[current_action];
callback();
}
}
Event.observe(document, 'widgets:load', function() {
current_callbacks['not_yet'] = function() {
log_status("Sorry, that function isn't done yet. :(");
fade_status();
}
current_callbacks['create_ticket'] = do_create;
});
attempt_create = function() {
testEmail = $j('#userEmail').val();
if($j('#zendeskSelect').val() === '-') { log_error('Please select a spoke'); fade_status(); }
else if($j('#userName').val() === '') { log_error('Please enter a user name'); fade_status();}
else if(!isValidEmail($j('#userEmail').val())) { log_error('Please enter a proper email'); fade_status(); }
else if($j('#ticketSubject').val() === '') { log_error('Please enter a subject'); fade_status();}
else if($j('#ticketDesc').val() === '') { log_error('Please enter a description'); fade_status(); }
else { do_create(); }
}
do_create = function() {
log_status('Starting...');
spoke = 'http://'+$j('#zendeskSelect').val()+'/requests/embedded/create/?';
spoke += 'subject='+ encodeURI($j('#ticketSubject').val())+'%26';
spoke += 'description='+encodeURI($j('#ticketDesc').val())+'%26';
spoke += 'name='+encodeURI($j('#userName').val())+'%26';
spoke += 'email='+ encodeURI($j('#userEmail').val())+'%26';
spoke += 'ticket_type_id='+$j('#zendeskType').val()+'%26';
spoke += 'priority_id='+$j('#zendeskPri').val()+'%26';
spoke += 'set_tags='+$j('#zendeskTags').val();
console.log(spoke);
$j.ajax({
url: '/proxy/direct?url=' + spoke,
dataType: 'JSON',
type: 'GET',
contentType: 'application/json',
success: function(Object) {
log_status(Object.message);
fade_status();
//console.log(arguments);
$j(':input','#createtheticket')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
},
error: function(Object) { log_error('exception: ' + Object.error);
console.log(arguments);
}
});
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment