Skip to content

Instantly share code, notes, and snippets.

@yevrah
Created September 5, 2017 23:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yevrah/46de4daa57d766440e9100e3dcfc8d7c to your computer and use it in GitHub Desktop.
Save yevrah/46de4daa57d766440e9100e3dcfc8d7c to your computer and use it in GitHub Desktop.
Perl: App.pm Example
#!/usr/bin/env perl
# Sane defaults
require 5.004;
use strict 'vars';
use warnings;
use diagnostics;
use CGI::Carp qw(fatalsToBrowser);
# Stadard libaries
use CGI;
use Data::Dumper;
# Setup local library path
use File::Basename;
use lib dirname( __FILE__ ) . '/lib/';
use lib dirname( __FILE__ ) . '/lib/External/';
##
## This file is by design verbose for the purpose of instruction,
## any line with double comments can be removed with the following command:
##
## grep -iv '##' my_verbose_file > my_terse_file
##
## Post Copy - Search and replace the string _crud_template with the new filename
##
## Viewing this file can be done at: http://www.yourcover.com.au/proClaim/_crud_template
## _
## / \ _ __ _ __
## / _ \ | '_ \| '_ \
## / ___ \| |_) | |_) |
## /_/ \_\ .__/| .__/
## |_| |_|
##
## The App object is the primary helper library providing a few helpful
## utilities. These Include
##
## $App::Stash - A very handy hash
## ====================================
##
## By Default app stash will automatically initalised to certain submitted values
##
## Crud Helpers | Template Toolkit | Maps to
## -----------------------------+-----------------------------+----------------------------
## $App::Stash->{ID} | [% App.ID %] | $cgi->param('id')
## $App::Stash->{Mode} | [% App.Mode %] | $cgi->param('mode')
## $App::Stash->{Action} | [% App.Action %] | $cgi->param('action')
##
## Params Helper | Template Toolkit | Maps To
## --------------------------------+--------------------------+----------------------------
## App::Param('my_var') | [% App.Params.my_var %] | $cgi->param('my_var')
##
## Authentication Properties | Template Toolkit | Maps to DB
## -----------------------------+-----------------------------+-----------------------------
## Username | [% App.Username %] | users.user_user
## UserID | [% App.UserID %] | users.user_ID
## IsAdmin | [% App.IsAdmin %] | users.user_IsAppAdmin
## IsDev | [% App.IsDev %] | users.user_IsAppDeveloper
## IsAuthenticated | [% App.IsAuthenticated %] | 'yes', 'no' depending if logged in
##
## Add Custom Stash Values
##
## $App::Stash->{MyVar} = 'abc'; # Access from Template toolkit with [% MyVar %]
##
use App;
&main();
#
# Main Entry Point
#
sub main {
# Main Controllers
&auth_check( $App::Stash )
# Main DB Ops - Basic CRUD Ops
&db_delete( $App::Stash );
&db_add( $App::Stash );
&db_update( $App::Stash );
&db_get_all( $App::Stash );
&db_get( $App::Stash );
# Render Page
&render( $App::Stash );
&render_email( $App::Stash )
}
#
# Primary Controllers
#
sub auth_check {
## Basic Check - Will spew out authentication request if not logged in without
## redirecting away from current page
App::RequiresAuth();
## Feel free to add custom auth logic here
if( $App::Stash->{IsAdmin} eq 'yes' ) {} ##
if( $App::Stash->{IsDev} eq 'yes' ) {} ##
if( $App::Stash->{IsAuthenticated} eq 'yes' ) {} ##
if( $App::Stash->{UserID} eq '-1' ) {} ##
}
#
# Primary Data Queries
#
##
## _ ____ _ _
## / \ _ __ _ __ _ _ | _ \ / \ | |
## / _ \ | '_ \| '_ \ (_) (_) | | | |/ _ \ | |
## / ___ \| |_) | |_) | _ _ | |_| / ___ \| |___
## /_/ \_\ .__/| .__/ (_) (_) |____/_/ \_\_____|
## |_| |_|
##
## App::DAL - Easy Database Access, by example
## ============================================
##
## App::DAL::empty() - When you expect no results
## App::DAL::empty('DELETE FROM Users WHERE user_ID = ?', $id);
## App::DAL::empty('INSERT INTO Users (user_username, user_password) VALUES (?, ?)', $user, $pass);
##
## App::DAL::single() - When one is enough
## my $cCount = App::DAL::single('SELECT COUNT(*) FROM Users WHERE user_ID < ?', 100);
##
## App::DAL::hash() - Only expect one row of data
## my $usr = App::DAL::hash('SELECT * FROM Users WHERE user_ID = ?', $id);
## print $usr->{user_email};
##
## $App::Stash->{User} = $usr;
## # From template, [% User.user_email %]
##
## App::DAL::hashes() - When only many will do
## my $users = App::DAL::hashes('SELECT * FROM Users');
## $App::Stash->{Users} = $users;
##
## # From template
## [% FOREACH user in Users %]
## Hello [% user.user_fullname %]
## [% END %]
sub db_get_all {
my $stash = shift;
my @data = App::DAL::hashes("SELECT * FROM Organisations ORDER BY org_name");
$stash->{DefaultList} = \@data;
}
sub db_get {
my $stash = shift;
unless( $stash->{App}->{ID} ) { return; }
$stash->{Default} = App::DAL::hash("SELECT * FROM Organisations WHERE org_ID = ?", $stash->{App}->{ID} );
};
sub db_add {
my $stash = shift;
if( $stash->{App}->{ID} ) { return; }
unless( $stash->{App}->{Action} eq 'add' ) { return; }
$stash->{NewID} = App::DAL::empty("
INSERT INTO Organisations (
org_name , # 1
org_abbrev , # 2
org_address1 , # 3
org_address2 , # 4
org_state , # 5
org_postcode , # 6
org_country , # 7
org_telephone , # 8
org_fax , # 9
org_contactName # 10
) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ",
App::Param('name') || '',
App::Param('abbreviation') || '',
App::Param('address01') || '',
App::Param('address02') || '',
App::Param('state') || '',
App::Param('postcode') || '',
App::Param('country') || '',
App::Param('telephone') || '',
App::Param('fax') || '',
App::Param('contactname') || ''
);
};
sub db_update {
my $stash = shift;
unless( $stash->{App}->{ID} ) { return; }
unless( $stash->{App}->{Action} eq 'update' ) { return; }
( $stash->{NewID}, $stash->{RowsUpdated} ) = App::DAL::empty("
UPDATE Organisations
SET org_name = ?, # 1
org_abbrev = ?, # 2
org_address1 = ?, # 3
org_address2 = ?, # 4
org_state = ?, # 5
org_postcode = ?, # 6
org_country = ?, # 7
org_telephone = ?, # 8
org_fax = ?, # 9
org_contactName = ? # 10
WHERE org_ID = ? ",
App::Param('name') || '',
App::Param('abbreviation') || '',
App::Param('address01') || '',
App::Param('address02') || '',
App::Param('state') || '',
App::Param('postcode') || '',
App::Param('country') || '',
App::Param('telephone') || '',
App::Param('fax') || '',
App::Param('contactname') || '',
$stash->{App}->{ID}
);
};
sub db_delete {
my $stash = shift;
unless( $stash->{App}->{Action} eq 'delete' ) { return; }
App::DAL::empty("DELETE FROM Organisations WHERE org_ID = ?", $stash->{App}->{ID});
# Remember to remoce this item from the stash
$stash->{App}->{ID} = "";
};
#
# Render Methods
#
## _ ____ _
## / \ _ __ _ __ _ _ | _ \ ___ _ __ __| | ___ _ __
## / _ \ | '_ \| '_ \ (_) (_) | |_) / _ \ '_ \ / _` |/ _ \ '__|
## / ___ \| |_) | |_) | _ _ | _ < __/ | | | (_| | __/ |
## /_/ \_\ .__/| .__/ (_) (_) |_| \_\___|_| |_|\__,_|\___|_|
## |_| |_|
##
## Render to the browser, email, or json
## =====================================
## App::RenderPage() - Spit out to the browser
## App::RenderPage(*DATA); # Render html below the __DATA__ section using $App::Stash
## App::RenderPage('my_template.tt') # Render from file
## App::RenderPage('Hello [% name %]', {name=>'John'}); # Render from string
##
## App::RenderEmail() - Render and send an email
## App::RenderEmail(to=>'john@example.com', template=>'my_templte.tt')
## App::RenderEmail(
## to => qw( john@example.com sam@example.com foo@xample.com ) ,
## cc => qw( one@example.com two@example.com) ,
## bcc => qw( me@example.com support@example.com ) ,
## from => 'john.doe@yourcover.com' ,
## subject => 'Here you go..' ,
## attachments => qw( file01.xls file02.csv ) ,
##
## template => 'email.tt' ,
## stash => {data=>'123'} ,
##
## )
##
## App::RenderRedirect() - Just render redirect headers and exit
## App::RenderRedirect('/proClaim/claimClaimant?id=10'):
##
## App::Render() - Just give me the string, dont send anywhere
## App::Render('template.tt');
sub render {
my $stash = shift;
my $template = *DATA;
#if( $stash->{App}->{Action} eq 'sign_in' ) { $template=''; }
App::RenderPage($template);
}
sub render_email {
# TODO: Flesh This Out
}
__DATA__
[% WRAPPER layout_default.tt
title='Home'
breadcrumb='_crud_template'
%]
<div class="row">
<article class="col-sm-12 col-md-12 col-lg-12">
<!-- Datatable -->
<section id="widget-grid" class="">
<div class="row">
<article class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<div class="jarviswidget jarviswidget-color-darken jarviswidget-sortable" id="wid-id-organisations"
data-widget-deletebutton="false"
data-widget-editbutton="false"
data-widget-colorbutton="false"
>
<!-- Additional properties
data-widget-collapsed="false"
data-widget-editbutton="false"
data-widget-togglebutton="true"
data-widget-fullscreenbutton="false"
data-widget-custombutton="false"
data-widget-sortable="false"
-->
<header>
<span class="widget-icon"> <i class="fa fa-table"></i> </span>
<h2>_crud_template</h2>
</header>
<!-- widget div-->
<div>
<!-- widget edit box -->
<div class="jarviswidget-editbox">
<!-- This area used as dropdown edit box -->
</div>
<!-- end widget edit box -->
<!-- widget content -->
<div class="widget-body">
<div class="table-responsive">
<table iq-datatable id="datatable_tabletools" class="table table-striped table-bordered table-hover render_me_as_datatable" width="100%">
<thead>
<tr role="row">
<th data-hide="phone" class="sorting_asc" tabindex="0" aria-controls="datatable_tabletools" rowspan="1" colspan="1" aria-sort="ascending" aria-label="ID: activate to sort column ascending" style="width: 17px;">ID</th>
<th data-class="expand" class="sorting" tabindex="0" aria-controls="datatable_tabletools" rowspan="1" colspan="1" aria-label="Name: activate to sort column ascending" style="width: 57px;">Name</th>
<th class="sorting" tabindex="0" aria-controls="datatable_tabletools" rowspan="1" colspan="1" aria-label="Phone: activate to sort column ascending" style="width: 91px;">Abbreviation</th>
<th data-hide="phone" class="sorting" tabindex="0" aria-controls="datatable_tabletools" rowspan="1" colspan="1" aria-label="Company: activate to sort column ascending" style="width: 255px;">State</th>
<th data-hide="phone,tablet" class="sorting" tabindex="0" aria-controls="datatable_tabletools" rowspan="1" colspan="1" aria-label="Zip: activate to sort column ascending" style="width: 60px;">Country</th>
<th data-hide="phone,tablet" class="sorting" tabindex="0" aria-controls="datatable_tabletools" rowspan="1" colspan="1" aria-label="City: activate to sort column ascending" style="width: 50px;">Name</th>
<th data-hide="phone,tablet" class="sorting" tabindex="0" aria-controls="datatable_tabletools" rowspan="1" colspan="1" aria-label="Date: activate to sort column ascending" style="width: 50px;">&nbsp;</th>
</tr>
</thead>
<tbody>
[% FOREACH item IN DefaultList %]
<tr role="row" class="odd">
<td class="sorting_1">[% item.org_ID %]</td>
<td>[% item.org_name %]</td>
<td>[% item.org_abbrev %]</td>
<td>[% item.org_state %]</td>
<td>[% item.org_country %]</td>
<td>[% item.org_contactName %]</td>
<td>
<a href="/proClaim/organisations?id=[% item.org_ID %]"> <i class="fa fa-edit"></i> Edit </a>
</td>
</tr>
[% END %]
</tbody>
</table>
</div>
<!-- end widget content -->
</div>
<!-- end widget div -->
</div>
</article>
</div>
<!-- Full Form Example -->
<div class="row">
<article class="col-sm-12 col-md-12 col-lg-12">
<div class="jarviswidget" id="wid-id-1" data-widget-colorbutton="false" data-widget-editbutton="false" data-widget-custombutton="false" data-widget-deletebutton="false">
<header>
<span class="widget-icon"> <i class="fa fa-edit"></i> </span>
<h2>[% IF App.ID %] Edit [% ELSE %] Add [% END %] Organisation</h2>
</header>
<div>
<div class="widget-body no-padding">
<form class="smart-form" action="/proClaim/organisations" method="POST">
<input type="hidden" name="id" value="[% App.ID %]"/>
[% IF App.ID %]
<input type="hidden" name="action" value="update">
[% ELSE %]
<input type="hidden" name="action" value="add">
[% END %]
<fieldset>
<legend>Organisation Details</legend>
<section>
<label class="label">Organisation Name</label>
<span class="input">
<input type="text" name="name" id="inputName" class="form-control" value="[% Default.org_name %]" required="required" pattern="" title="Name">
</span>
<section>
<label class="label">Abbreviation</label>
<label class="input">
<input type="text" class="gc" name="abbreviation" value="[% Default.org_abbrev %]">
</label>
</section>
<section>
<label class="label">Contact name</label>
<label class="input">
<input type="text" class="input-sm" name="contactname" value="[% Default.org_contactName %]">
</label>
</section>
</fieldset>
<fieldset>
<legend>Address</legend>
<section>
<label class="label">Address Line 1</label>
<label class="input">
<input type="text" class="gc" name="address01" value="[% Default.org_address1 %]">
</label>
</section>
<section>
<label class="label">Address Line 2</label>
<label class="input">
<input type="text" class="gc" name="address02" value="[% Default.org_address2 %]">
</label>
</section>
<div class="row">
<section class="col col-5">
<label class="label">State</label>
<label class="input">
<input type="text" list="list" name="state" value="[% Default.org_state %]">
<datalist id="list">
<option value="ACT">Australian Capital Territory</option>
<option value="NSW">New South Wales</option>
<option value="NT ">Northern Territory</option>
<option value="QLD">Queensland</option>
<option value="SA ">South Australia</option>
<option value="TAS">Tasmania</option>
<option value="VIC">Victoria</option>
<option value="WA ">Western Australia</option>
<option value="NFK">Norfolk Island</option>
<option value="HRD">Heard and McDonald Islands</option>
<option value="N/A">Offshore</option>
</datalist> </label>
</section>
<section class="col col-5">
<label class="label">Country</label>
<label class="input">
<input type="text" list="list" name="country" value="[% Default.org_country || 'Australia' %]">
<datalist id="list">
<option value="United States">United States</option>
<option value="United Kingdom">United Kingdom</option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
<option value="Algeria">Algeria</option>
<option value="American Samoa">American Samoa</option>
<option value="Andorra">Andorra</option>
<option value="Angola">Angola</option>
<option value="Anguilla">Anguilla</option>
<option value="Antarctica">Antarctica</option>
<option value="Antigua and Barbuda">Antigua and Barbuda</option>
<option value="Argentina">Argentina</option>
<option value="Armenia">Armenia</option>
<option value="Aruba">Aruba</option>
<option value="Australia">Australia</option>
<option value="Austria">Austria</option>
<option value="Azerbaijan">Azerbaijan</option>
<option value="Bahamas">Bahamas</option>
<option value="Bahrain">Bahrain</option>
<option value="Bangladesh">Bangladesh</option>
<option value="Barbados">Barbados</option>
<option value="Belarus">Belarus</option>
<option value="Belgium">Belgium</option>
<option value="Belize">Belize</option>
<option value="Benin">Benin</option>
<option value="Bermuda">Bermuda</option>
<option value="Bhutan">Bhutan</option>
<option value="Bolivia">Bolivia</option>
<option value="Bosnia and Herzegovina">Bosnia and Herzegovina</option>
<option value="Botswana">Botswana</option>
<option value="Bouvet Island">Bouvet Island</option>
<option value="Brazil">Brazil</option>
<option value="British Indian Ocean Territory">British Indian Ocean Territory</option>
<option value="Brunei Darussalam">Brunei Darussalam</option>
<option value="Bulgaria">Bulgaria</option>
<option value="Burkina Faso">Burkina Faso</option>
<option value="Burundi">Burundi</option>
<option value="Cambodia">Cambodia</option>
<option value="Cameroon">Cameroon</option>
<option value="Canada">Canada</option>
<option value="Cape Verde">Cape Verde</option>
<option value="Cayman Islands">Cayman Islands</option>
<option value="Central African Republic">Central African Republic</option>
<option value="Chad">Chad</option>
<option value="Chile">Chile</option>
<option value="China">China</option>
<option value="Christmas Island">Christmas Island</option>
<option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>
<option value="Colombia">Colombia</option>
<option value="Comoros">Comoros</option>
<option value="Congo">Congo</option>
<option value="Congo, The Democratic Republic of The">Congo, The Democratic Republic of The</option>
<option value="Cook Islands">Cook Islands</option>
<option value="Costa Rica">Costa Rica</option>
<option value="Cote D'ivoire">Cote D'ivoire</option>
<option value="Croatia">Croatia</option>
<option value="Cuba">Cuba</option>
<option value="Cyprus">Cyprus</option>
<option value="Czech Republic">Czech Republic</option>
<option value="Denmark">Denmark</option>
<option value="Djibouti">Djibouti</option>
<option value="Dominica">Dominica</option>
<option value="Dominican Republic">Dominican Republic</option>
<option value="Ecuador">Ecuador</option>
<option value="Egypt">Egypt</option>
<option value="El Salvador">El Salvador</option>
<option value="Equatorial Guinea">Equatorial Guinea</option>
<option value="Eritrea">Eritrea</option>
<option value="Estonia">Estonia</option>
<option value="Ethiopia">Ethiopia</option>
<option value="Falkland Islands (Malvinas)">Falkland Islands (Malvinas)</option>
<option value="Faroe Islands">Faroe Islands</option>
<option value="Fiji">Fiji</option>
<option value="Finland">Finland</option>
<option value="France">France</option>
<option value="French Guiana">French Guiana</option>
<option value="French Polynesia">French Polynesia</option>
<option value="French Southern Territories">French Southern Territories</option>
<option value="Gabon">Gabon</option>
<option value="Gambia">Gambia</option>
<option value="Georgia">Georgia</option>
<option value="Germany">Germany</option>
<option value="Ghana">Ghana</option>
<option value="Gibraltar">Gibraltar</option>
<option value="Greece">Greece</option>
<option value="Greenland">Greenland</option>
<option value="Grenada">Grenada</option>
<option value="Guadeloupe">Guadeloupe</option>
<option value="Guam">Guam</option>
<option value="Guatemala">Guatemala</option>
<option value="Guinea">Guinea</option>
<option value="Guinea-bissau">Guinea-bissau</option>
<option value="Guyana">Guyana</option>
<option value="Haiti">Haiti</option>
<option value="Heard Island and Mcdonald Islands">Heard Island and Mcdonald Islands</option>
<option value="Holy See (Vatican City State)">Holy See (Vatican City State)</option>
<option value="Honduras">Honduras</option>
<option value="Hong Kong">Hong Kong</option>
<option value="Hungary">Hungary</option>
<option value="Iceland">Iceland</option>
<option value="India">India</option>
<option value="Indonesia">Indonesia</option>
<option value="Iran, Islamic Republic of">Iran, Islamic Republic of</option>
<option value="Iraq">Iraq</option>
<option value="Ireland">Ireland</option>
<option value="Israel">Israel</option>
<option value="Italy">Italy</option>
<option value="Jamaica">Jamaica</option>
<option value="Japan">Japan</option>
<option value="Jordan">Jordan</option>
<option value="Kazakhstan">Kazakhstan</option>
<option value="Kenya">Kenya</option>
<option value="Kiribati">Kiribati</option>
<option value="Korea, Democratic People's Republic of">Korea, Democratic People's Republic of</option>
<option value="Korea, Republic of">Korea, Republic of</option>
<option value="Kuwait">Kuwait</option>
<option value="Kyrgyzstan">Kyrgyzstan</option>
<option value="Lao People's Democratic Republic">Lao People's Democratic Republic</option>
<option value="Latvia">Latvia</option>
<option value="Lebanon">Lebanon</option>
<option value="Lesotho">Lesotho</option>
<option value="Liberia">Liberia</option>
<option value="Libyan Arab Jamahiriya">Libyan Arab Jamahiriya</option>
<option value="Liechtenstein">Liechtenstein</option>
<option value="Lithuania">Lithuania</option>
<option value="Luxembourg">Luxembourg</option>
<option value="Macao">Macao</option>
<option value="Macedonia, The Former Yugoslav Republic of">Macedonia, The Former Yugoslav Republic of</option>
<option value="Madagascar">Madagascar</option>
<option value="Malawi">Malawi</option>
<option value="Malaysia">Malaysia</option>
<option value="Maldives">Maldives</option>
<option value="Mali">Mali</option>
<option value="Malta">Malta</option>
<option value="Marshall Islands">Marshall Islands</option>
<option value="Martinique">Martinique</option>
<option value="Mauritania">Mauritania</option>
<option value="Mauritius">Mauritius</option>
<option value="Mayotte">Mayotte</option>
<option value="Mexico">Mexico</option>
<option value="Micronesia, Federated States of">Micronesia, Federated States of</option>
<option value="Moldova, Republic of">Moldova, Republic of</option>
<option value="Monaco">Monaco</option>
<option value="Mongolia">Mongolia</option>
<option value="Montserrat">Montserrat</option>
<option value="Morocco">Morocco</option>
<option value="Mozambique">Mozambique</option>
<option value="Myanmar">Myanmar</option>
<option value="Namibia">Namibia</option>
<option value="Nauru">Nauru</option>
<option value="Nepal">Nepal</option>
<option value="Netherlands">Netherlands</option>
<option value="Netherlands Antilles">Netherlands Antilles</option>
<option value="New Caledonia">New Caledonia</option>
<option value="New Zealand">New Zealand</option>
<option value="Nicaragua">Nicaragua</option>
<option value="Niger">Niger</option>
<option value="Nigeria">Nigeria</option>
<option value="Niue">Niue</option>
<option value="Norfolk Island">Norfolk Island</option>
<option value="Northern Mariana Islands">Northern Mariana Islands</option>
<option value="Norway">Norway</option>
<option value="Oman">Oman</option>
<option value="Pakistan">Pakistan</option>
<option value="Palau">Palau</option>
<option value="Palestinian Territory, Occupied">Palestinian Territory, Occupied</option>
<option value="Panama">Panama</option>
<option value="Papua New Guinea">Papua New Guinea</option>
<option value="Paraguay">Paraguay</option>
<option value="Peru">Peru</option>
<option value="Philippines">Philippines</option>
<option value="Pitcairn">Pitcairn</option>
<option value="Poland">Poland</option>
<option value="Portugal">Portugal</option>
<option value="Puerto Rico">Puerto Rico</option>
<option value="Qatar">Qatar</option>
<option value="Reunion">Reunion</option>
<option value="Romania">Romania</option>
<option value="Russian Federation">Russian Federation</option>
<option value="Rwanda">Rwanda</option>
<option value="Saint Helena">Saint Helena</option>
<option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>
<option value="Saint Lucia">Saint Lucia</option>
<option value="Saint Pierre and Miquelon">Saint Pierre and Miquelon</option>
<option value="Saint Vincent and The Grenadines">Saint Vincent and The Grenadines</option>
<option value="Samoa">Samoa</option>
<option value="San Marino">San Marino</option>
<option value="Sao Tome and Principe">Sao Tome and Principe</option>
<option value="Saudi Arabia">Saudi Arabia</option>
<option value="Senegal">Senegal</option>
<option value="Serbia and Montenegro">Serbia and Montenegro</option>
<option value="Seychelles">Seychelles</option>
<option value="Sierra Leone">Sierra Leone</option>
<option value="Singapore">Singapore</option>
<option value="Slovakia">Slovakia</option>
<option value="Slovenia">Slovenia</option>
<option value="Solomon Islands">Solomon Islands</option>
<option value="Somalia">Somalia</option>
<option value="South Africa">South Africa</option>
<option value="South Georgia and The South Sandwich Islands">South Georgia and The South Sandwich Islands</option>
<option value="Spain">Spain</option>
<option value="Sri Lanka">Sri Lanka</option>
<option value="Sudan">Sudan</option>
<option value="Suriname">Suriname</option>
<option value="Svalbard and Jan Mayen">Svalbard and Jan Mayen</option>
<option value="Swaziland">Swaziland</option>
<option value="Sweden">Sweden</option>
<option value="Switzerland">Switzerland</option>
<option value="Syrian Arab Republic">Syrian Arab Republic</option>
<option value="Taiwan, Province of China">Taiwan, Province of China</option>
<option value="Tajikistan">Tajikistan</option>
<option value="Tanzania, United Republic of">Tanzania, United Republic of</option>
<option value="Thailand">Thailand</option>
<option value="Timor-leste">Timor-leste</option>
<option value="Togo">Togo</option>
<option value="Tokelau">Tokelau</option>
<option value="Tonga">Tonga</option>
<option value="Trinidad and Tobago">Trinidad and Tobago</option>
<option value="Tunisia">Tunisia</option>
<option value="Turkey">Turkey</option>
<option value="Turkmenistan">Turkmenistan</option>
<option value="Turks and Caicos Islands">Turks and Caicos Islands</option>
<option value="Tuvalu">Tuvalu</option>
<option value="Uganda">Uganda</option>
<option value="Ukraine">Ukraine</option>
<option value="United Arab Emirates">United Arab Emirates</option>
<option value="United Kingdom">United Kingdom</option>
<option value="United States">United States</option>
<option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option>
<option value="Uruguay">Uruguay</option>
<option value="Uzbekistan">Uzbekistan</option>
<option value="Vanuatu">Vanuatu</option>
<option value="Venezuela">Venezuela</option>
<option value="Viet Nam">Viet Nam</option>
<option value="Virgin Islands, British">Virgin Islands, British</option>
<option value="Virgin Islands, U.S.">Virgin Islands, U.S.</option>
<option value="Wallis and Futuna">Wallis and Futuna</option>
<option value="Western Sahara">Western Sahara</option>
<option value="Yemen">Yemen</option>
<option value="Zambia">Zambia</option>
<option value="Zimbabwe">Zimbabwe</option>
</datalist> </label>
</section>
<section class="col col-2">
<label class="label">Postcode</label>
<label class="input">
<input type="text" class="input-sm" name="postcode" value="[% Default.org_postcode %]">
</label>
</section>
</div>
</fieldset>
<fieldset>
<legend>Phone</legend>
<div class="row">
<section class="col col-6">
<label class="label">Phone</label>
<label class="input">
<input type="text" class="input-sm" name="phone" value="[% Default.org_telephone %]">
</label>
</section>
<section class="col col-6">
<label class="label">Fax</label>
<label class="input">
<input type="text" class="input-sm" name="fax" value="[% Default.org_fax %]">
</label>
</section>
</div>
</fieldset>
<footer>
<button type="submit" class="btn btn-primary">
Submit
</button>
<a href="/proClaim/organisations" class="btn btn-default"> Cancel </a>
[% IF App.ID %]<a href="/proClaim/organisations?id=[% App.ID %]&action=delete" class="btn btn-warning pull-left" onclick="return confirm('Are you sure want to delete?')"> Delete </a>[% END %]
</footer>
</form>
</div>
</div>
</div>
</article>
</div>
[%
# END WRAPPER layout.tt
END
%]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment