You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sm...@apache.org on 2015/03/12 04:55:10 UTC
[38/51] [partial] airavata-php-gateway git commit: importing PGA into
new repo - details are discussed at AIRAVATA-1627
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/libraries/xml_id_utilities.php
----------------------------------------------------------------------
diff --git a/app/libraries/xml_id_utilities.php b/app/libraries/xml_id_utilities.php
new file mode 100755
index 0000000..6b54767
--- /dev/null
+++ b/app/libraries/xml_id_utilities.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Utilities for ID management with an XML file
+ */
+
+//include 'id_utilities.php';
+
+class XmlIdUtilities implements IdUtilities
+{
+ const DB_PATH = 'users.xml';
+
+ /**
+ * Connect to the user database.
+ * @return mixed|void
+ */
+ public function connect()
+ {
+ global $db;
+
+
+ try
+ {
+ if (file_exists(self::DB_PATH))
+ {
+ $db = simplexml_load_file(self::DB_PATH);
+ }
+ else
+ {
+ throw new Exception("Error: Cannot connect to database!");
+ }
+
+
+ if (!$db)
+ {
+ throw new Exception('Error: Cannot open database!');
+ }
+ }
+ catch (Exception $e)
+ {
+ echo '<div>' . $e->getMessage() . '</div>';
+ }
+ }
+
+ /**
+ * Return true if the given username exists in the database.
+ * @param $username
+ * @return bool
+ */
+ public function username_exists($username)
+ {
+ global $db;
+
+ foreach($db->xpath('//username') as $db_username)
+ {
+ if ($db_username == $username)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Authenticate the user given username and password.
+ * @param $username
+ * @param $password
+ * @return int|mixed
+ */
+ public function authenticate($username, $password)
+ {
+ global $db;
+
+ $hashed_password = md5($password);
+
+ $user = $db->xpath('//user[username="' . $username . '"]');
+
+ if (sizeof($user) == 1)
+ {
+ return $user[0]->password_hash == $hashed_password;
+ }
+ elseif(sizeof($user) == 0)
+ {
+ return -1;
+ }
+ else // duplicate users in database
+ {
+ return -2;
+ }
+ }
+
+ /**
+ * Add a new user to the database.
+ * @param $username
+ * @param $password
+ * @return mixed|void
+ */
+ public function add_user($username, $password, $first_name, $last_name, $email, $organization,
+ $address, $country,$telephone, $mobile, $im, $url)
+ {
+ global $db;
+
+ $users = $db->xpath('//users');
+
+ $user = $users[0]->addChild('user');
+
+ $user->addChild('username', $username);
+ $user->addChild('password_hash', md5($password));
+
+ //Format XML to save indented tree rather than one line
+ $dom = new DOMDocument('1.0');
+ $dom->preserveWhiteSpace = false;
+ $dom->formatOutput = true;
+ $dom->loadXML($db->asXML());
+ $dom->save('users.xml');
+ }
+
+ /**
+ * Get the user profile
+ * @param $username
+ * @return mixed|void
+ */
+ public function get_user_profile($username)
+ {
+ // TODO: Implement get_user_profile() method.
+ }
+
+ /**
+ * Update the user profile
+ *
+ * @param $username
+ * @param $first_name
+ * @param $last_name
+ * @param $email
+ * @param $organization
+ * @param $address
+ * @param $country
+ * @param $telephone
+ * @param $mobile
+ * @param $im
+ * @param $url
+ * @return mixed
+ */
+ public function update_user_profile($username, $first_name, $last_name, $email, $organization, $address,
+ $country, $telephone, $mobile, $im, $url)
+ {
+ // TODO: Implement update_user_profile() method.
+ }
+
+ /**
+ * Function to update user password
+ *
+ * @param $username
+ * @param $current_password
+ * @param $new_password
+ * @return mixed
+ */
+ public function change_password($username, $current_password, $new_password)
+ {
+ // TODO: Implement change_password() method.
+ }
+
+ /**
+ * Function to remove an existing user
+ *
+ * @param $username
+ * @return void
+ */
+ public function remove_user($username)
+ {
+ // TODO: Implement remove_user() method.
+ }
+
+ /**
+ * Function to check whether a user has permission for a particular permission string(api method).
+ *
+ * @param $username
+ * @param $permission_string
+ * @return bool
+ */
+ public function checkPermissionForUser($username, $permission_string)
+ {
+ // TODO: Implement checkPermissionForUser() method.
+ }
+
+ /**
+ * Function to get all the permissions that a particular user has.
+ *
+ * @param $username
+ * @return mixed
+ */
+ public function getUserPermissions($username)
+ {
+ // TODO: Implement getUserPermissions() method.
+ }
+
+ /**
+ * Function to get the entire list of roles in the application
+ *
+ * @return mixed
+ */
+ public function getRoleList()
+ {
+ // TODO: Implement getRoleList() method.
+ }
+
+ /**
+ * Function to get the role list of a user
+ *
+ * @param $username
+ * @return mixed
+ */
+ public function getRoleListOfUser($username)
+ {
+ // TODO: Implement getRoleListOfUser() method.
+ }
+
+ /**
+ * Function to get the user list of a particular role
+ *
+ * @param $role
+ * @return mixed
+ */
+ public function getUserListOfRole($role)
+ {
+ // TODO: Implement getUserListOfRole() method.
+ }
+
+ /**
+ * Function to add a role to a user
+ *
+ * @param $username
+ * @param $role
+ * @return void
+ */
+ public function addUserToRole($username, $role)
+ {
+ // TODO: Implement addUserToRole() method.
+ }
+
+ /**
+ * Function to role from user
+ *
+ * @param $username
+ * @param $role
+ * @return void
+ */
+ public function removeUserFromRole($username, $role)
+ {
+ // TODO: Implement removeUserFromRole() method.
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/models/Constant.php
----------------------------------------------------------------------
diff --git a/app/models/Constant.php b/app/models/Constant.php
new file mode 100644
index 0000000..f18ba41
--- /dev/null
+++ b/app/models/Constant.php
@@ -0,0 +1,48 @@
+<?php
+
+class Constant extends Eloquent{
+
+
+ const EXPERIMENT_DATA_ROOT = '/../experimentData/';
+
+ /*
+
+ ------------ now rest all are handled at config/app-config.ini -------------------
+
+ const AIRAVATA_SERVER = 'gw111.iu.xsede.org';
+ //const AIRAVATA_SERVER = 'gw127.iu.xsede.org';
+ //const AIRAVATA_SERVER = 'gw56.iu.xsede.org'; //Mirror
+ //const AIRAVATA_PORT = 8930; //development
+ const AIRAVATA_PORT = 9930; //production
+ const AIRAVATA_TIMEOUT = 100000;
+ const EXPERIMENT_DATA_ROOT = '/../experimentData/';
+
+ const SSH_USER = 'root';
+ //const DATA_PATH = 'file://home/pga/production/experimentData/';
+
+ const EXPERIMENT_DATA_ROOT_ABSOLUTE = '/var/www/experimentData/';
+ //const EXPERIMENT_DATA_ROOT_ABSOLUTE = 'C:/wamp/www/experimentData/';
+
+ //const USER_STORE = 'WSO2','XML','USER_API';
+ const USER_STORE = 'WSO2';
+
+ //This will need to be updated everytime a new user role is being added for
+ //specific purposes.
+ const ADMIN_ROLE = "admin";
+ const GATEWAY_ADMIN_ROLE = "gateway_admin";
+ const USER_ROLE = "Internal/everyone";
+
+ //identity server roles assigned for Gateway
+ const GATEWAY_ROLE_PREPEND = "gateway_";
+ const GATEWAY_ROLE_ADMIN_APPEND = "_admin";
+
+ const REQ_URL = 'https://gw111.iu.xsede.org:8443/credential-store/acs-start-servlet';
+ const GATEWAY_NAME = 'PHP-Reference-Gateway';
+ const EMAIL = 'admin@gw120.iu.xsede.org';
+
+ const SERVER_ALLOWED_FILE_SIZE = 64; // in MB
+
+ */
+}
+
+?>
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/models/User.php
----------------------------------------------------------------------
diff --git a/app/models/User.php b/app/models/User.php
new file mode 100755
index 0000000..0d96f81
--- /dev/null
+++ b/app/models/User.php
@@ -0,0 +1,25 @@
+<?php
+
+use Illuminate\Auth\UserTrait;
+use Illuminate\Auth\UserInterface;
+use Illuminate\Auth\Reminders\RemindableTrait;
+use Illuminate\Auth\Reminders\RemindableInterface;
+
+class User extends Eloquent implements UserInterface, RemindableInterface {
+
+ use UserTrait, RemindableTrait;
+
+ /**
+ * The database table used by the model.
+ *
+ * @var string
+ */
+ protected $table = 'users';
+
+ /**
+ * The attributes excluded from the model's JSON form.
+ *
+ * @var array
+ */
+ protected $hidden = array('password', 'remember_token');
+}
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/resources/assets/PoweredbyAiravata_Small.png
----------------------------------------------------------------------
diff --git a/app/resources/assets/PoweredbyAiravata_Small.png b/app/resources/assets/PoweredbyAiravata_Small.png
new file mode 100755
index 0000000..7178e31
Binary files /dev/null and b/app/resources/assets/PoweredbyAiravata_Small.png differ
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/resources/assets/favicon.ico
----------------------------------------------------------------------
diff --git a/app/resources/assets/favicon.ico b/app/resources/assets/favicon.ico
new file mode 100755
index 0000000..541659e
Binary files /dev/null and b/app/resources/assets/favicon.ico differ
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/resources/assets/scigap-header-logo.png
----------------------------------------------------------------------
diff --git a/app/resources/assets/scigap-header-logo.png b/app/resources/assets/scigap-header-logo.png
new file mode 100755
index 0000000..6e8bf4a
Binary files /dev/null and b/app/resources/assets/scigap-header-logo.png differ
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/resources/oa4mp/oauth-properties.ini
----------------------------------------------------------------------
diff --git a/app/resources/oa4mp/oauth-properties.ini b/app/resources/oa4mp/oauth-properties.ini
new file mode 100755
index 0000000..d9e5b9b
--- /dev/null
+++ b/app/resources/oa4mp/oauth-properties.ini
@@ -0,0 +1,15 @@
+; Configuration file for XSEDE properties
+
+oauth_privkey_file = "/var/www/PHP-Reference-Gateway/resources/oa4mp/oauth-privkey.pk8"
+oauth_privkey_pem = "/var/www/PHP-Reference-Gateway/resources/oa4mp/oauth-privkey.pem"
+
+home_url = "https://gw120.iu.xsede.org/PHP-Reference-Gateway/xsede_login.php"
+oa4mp_id = "myproxy:oa4mp,2012:/client/5a323fc6fcffcff7a95401046a303520"
+
+dn[countryName] = "US"
+dn[stateOrProvinceName] = "IN"
+dn[localityName] = "Bloomington"
+dn[organizationName] = "IU"
+dn[organizationalUnitName] = "SGG"
+dn[commonName] = "gw120.iu.xsede.org"
+dn[emailAddress] = "yuma@iu.edu"
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/resources/security/idp_scigap_org.pem
----------------------------------------------------------------------
diff --git a/app/resources/security/idp_scigap_org.pem b/app/resources/security/idp_scigap_org.pem
new file mode 100755
index 0000000..6cb8cf3
--- /dev/null
+++ b/app/resources/security/idp_scigap_org.pem
@@ -0,0 +1,83 @@
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEwzCCA6ugAwIBAgIQf3HB06ImsNKxE/PmgWdkPjANBgkqhkiG9w0BAQUFADBv
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFk
+ZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBF
+eHRlcm5hbCBDQSBSb290MB4XDTEwMTIwNzAwMDAwMFoXDTIwMDUzMDEwNDgzOFow
+UTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUludGVybmV0MjERMA8GA1UECxMISW5D
+b21tb24xGzAZBgNVBAMTEkluQ29tbW9uIFNlcnZlciBDQTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAJd8x8j+s+kgaqOkT46ONFYGs3psqhCbSGErNpBp
+4zQKR6e7e96qavvrgpWPyh1/r3WmqEzaIGdhGg2GwcrBh6+sTuTeYhsvnbGYr8YB
++xdw26wUWexvPzN/ppgL5OI4r/V/hW0OdASd9ieGx5uP53EqCPQDAkBjJH1AV49U
+4FR+thNIYfHezg69tvpNmLLZDY15puCqzQyRmqXfq3O7yhR4XEcpocrFup/H2mD3
+/+d/8tnaoS0PSRan0wCSz4pH2U341ZVm03T5gGMAT0yEFh+z9SQfoU7e6JXWsgsJ
+iyxrx1wvjGPJmctSsWJ7cwFif2Ns2Gig7mqojR8p89AYrK0CAwEAAaOCAXcwggFz
+MB8GA1UdIwQYMBaAFK29mHo0tCb3+sQmVO8DveAky1QaMB0GA1UdDgQWBBRIT1r6
+L0qaXuBQ82t7VaXe9b40XTAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB
+/wIBADARBgNVHSAECjAIMAYGBFUdIAAwRAYDVR0fBD0wOzA5oDegNYYzaHR0cDov
+L2NybC51c2VydHJ1c3QuY29tL0FkZFRydXN0RXh0ZXJuYWxDQVJvb3QuY3JsMIGz
+BggrBgEFBQcBAQSBpjCBozA/BggrBgEFBQcwAoYzaHR0cDovL2NydC51c2VydHJ1
+c3QuY29tL0FkZFRydXN0RXh0ZXJuYWxDQVJvb3QucDdjMDkGCCsGAQUFBzAChi1o
+dHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vQWRkVHJ1c3RVVE5TR0NDQS5jcnQwJQYI
+KwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEF
+BQADggEBAJNmIYB0RYVLwqvOMrAp/t3f1iRbvwNqb1A+DhuzDYijW+7EpBI7Vu8G
+f89/IZVWO0Ex/uGqk9KV85UNPEerylwmrT7x+Yw0bhG+9GfjAkn5pnx7ZCXdF0by
+UOPjCiE6SSTNxoRlaGdosEUtR5nNnKuGKRFy3NacNkN089SXnlag/l9AWNLV1358
+xY4asgRckmYOha0uBs7Io9jrFCeR3s8XMIFTtmYSrTfk9e+WXCAONumsYn0ZgYr1
+kGGmSavOPN/mymTugmU5RZUWukEGAJi6DFZh5MbGhgHPZqkiKQLWPc/EKo2Z3vsJ
+FJ4O0dXG14HdrSSrrAcF4h1ow3BmX9M=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFFTCCA/2gAwIBAgIQEUBLlISAS3rT/GaBSZxRUTANBgkqhkiG9w0BAQUFADBR
+MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSW50ZXJuZXQyMREwDwYDVQQLEwhJbkNv
+bW1vbjEbMBkGA1UEAxMSSW5Db21tb24gU2VydmVyIENBMB4XDTE0MDUwMTAwMDAw
+MFoXDTE3MDQzMDIzNTk1OVowgYIxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJJTjEU
+MBIGA1UEBxMLQmxvb21pbmd0b24xGzAZBgNVBAoTEkluZGlhbmEgVW5pdmVyc2l0
+eTEaMBgGA1UECxMRSWRlbnRpdHkgUHJvdmlkZXIxFzAVBgNVBAMTDmlkcC5zY2ln
+YXAub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4dFhVixu23vB
+dpTR31H4DWB+PObD2yV0R0eRq8iBVKkvtu4HRt1ClBjZnmfpK1K1pfsO8CSLNjEu
+8ZA7AnynalMjN9DMzWjlYzoezc8vC5RIhGT7n7UAIBmHXXXUuNEr99/BB0rWvWa0
+BlBPZ+JmNn6rO1n4m8RK+Uf06GJogHRmWy3AakNdBT3s3H/LeFHDi5hifw7hbwbs
+dtsSrx56vmEsR9nde2i/ZyDkXWoNifsqkJfWQnKe2KSraS1CxTDzvOS8CAjjK2XD
+TYuD3wjDAr/GCafmId734erKPpSboj1S+0SAceZdnPi4jNBrycXcB2AfCudwse7L
+UhzWlyKy2wIDAQABo4IBtTCCAbEwHwYDVR0jBBgwFoAUSE9a+i9Kml7gUPNre1Wl
+3vW+NF0wHQYDVR0OBBYEFOgRhFYc+6zhi6WLx7+ZPsUr0osVMA4GA1UdDwEB/wQE
+AwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
+AjBnBgNVHSAEYDBeMFIGDCsGAQQBriMBBAMBATBCMEAGCCsGAQUFBwIBFjRodHRw
+czovL3d3dy5pbmNvbW1vbi5vcmcvY2VydC9yZXBvc2l0b3J5L2Nwc19zc2wucGRm
+MAgGBmeBDAECAjA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLmluY29tbW9u
+Lm9yZy9JbkNvbW1vblNlcnZlckNBLmNybDBvBggrBgEFBQcBAQRjMGEwOQYIKwYB
+BQUHMAKGLWh0dHA6Ly9jZXJ0LmluY29tbW9uLm9yZy9JbkNvbW1vblNlcnZlckNB
+LmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuaW5jb21tb24ub3JnMBkGA1Ud
+EQQSMBCCDmlkcC5zY2lnYXAub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAdg9Cv2Ora
+un7CAt77dhfGirTUdytoTwb5d7//OzWz6M95vr3e0siRowrKXq5AnQLY8CZ+YE3H
+yDxlvulWM2cMbubPsOLExCI4sNllViPWFNQKDl6s3Cbc7E2q11Hz048OVU4KtmL5
+5jA6/rWRCvoMepDzMF4T72DCeMnFSe3ICq+kBRI+RmOPoWWjIrL8Q9rWfUVLdQbu
+LgKtSfPpm0VfedZLlrJ3R7urdqpnIESzkBFj5rNDaD7Wiwc0LqcpbpGNo9SZ6IiT
+kKYLJCeoyWMAQa5zo5nnRbJ5cu1z/B50uibxbYclRWKEamiTThEYH824G0jaGCXx
+IspTV/Gt1tKM
+-----END CERTIFICATE-----
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/routes.php
----------------------------------------------------------------------
diff --git a/app/routes.php b/app/routes.php
new file mode 100755
index 0000000..a9f6754
--- /dev/null
+++ b/app/routes.php
@@ -0,0 +1,178 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Application Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register all of the routes for an application.
+| It's a breeze. Simply tell Laravel the URIs it should respond to
+| and give it the Closure to execute when that URI is requested.
+|
+*/
+
+
+/*
+ * User Routes
+*/
+
+Route::get("create", "AccountController@createAccountView");
+
+Route::post("create", "AccountController@createAccountSubmit");
+
+Route::get("login", "AccountController@loginView");
+
+Route::post("login", "AccountController@loginSubmit");
+
+Route::get("logout", "AccountController@logout");
+
+Route::get("forgot-password", "AccountController@forgotPassword");
+/*
+ * The following routes will not work without logging in.
+ *
+*/
+
+/*
+ * Project Routes
+*/
+
+Route::get("project/create", "ProjectController@createView");
+
+Route::post("project/create", "ProjectController@createSubmit");
+
+Route::get("project/summary", "ProjectController@summary");
+
+Route::get("project/search", "ProjectController@searchView");
+
+Route::post("project/search", "ProjectController@searchSubmit");
+
+Route::get("project/edit", "ProjectController@editView");
+
+Route::post("project/edit", "ProjectController@editSubmit");
+
+/*
+ * Experiment Routes
+*/
+
+Route::get("experiment/create", "ExperimentController@createView");
+
+Route::post("experiment/create", "ExperimentController@createSubmit");
+
+Route::get("experiment/summary", "ExperimentController@summary");
+
+Route::post("experiment/summary", "ExperimentController@expChange");
+
+Route::get("experiment/search", "ExperimentController@searchView");
+
+Route::post("experiment/search", "ExperimentController@searchSubmit");
+
+Route::get("experiment/edit", "ExperimentController@editView");
+
+Route::post("experiment/edit", "ExperimentController@editSubmit");
+
+/*
+ * Compute Resources Routes
+*/
+
+Route::get("cr/create", function(){
+ return Redirect::to("cr/create/step1");
+});
+
+Route::get("cr/create", "ComputeResource@createView");
+
+Route::post("cr/create", "ComputeResource@createSubmit");
+
+Route::get("cr/edit", "ComputeResource@editView");
+
+Route::post("cr/edit", "ComputeResource@editSubmit");
+
+Route::get("cr/browse", "ComputeResource@browseView");
+
+Route::post("cr/delete-jsi", "ComputeResource@deleteActions");
+
+Route::post("cr/delete-dmi", "ComputeResource@deleteActions");
+
+Route::post("cr/delete-cr", "ComputeResource@deleteActions");
+
+/*
+ * Application Catalog Routes
+*/
+
+Route::get("app/module", "ApplicationController@showAppModuleView");
+
+Route::post("app/module-create", "ApplicationController@modifyAppModuleSubmit");
+
+Route::post("app/module-edit", "ApplicationController@modifyAppModuleSubmit");
+
+Route::post("app/module-delete", "ApplicationController@deleteAppModule");
+
+Route::get("app/interface", "ApplicationController@createAppInterfaceView");
+
+Route::post("app/interface-create", "ApplicationController@createAppInterfaceSubmit");
+
+Route::post("app/interface-edit", "ApplicationController@editAppInterfaceSubmit");
+
+Route::post("app/interface-delete", "ApplicationController@deleteAppInterface");
+
+Route::get("app/deployment", "ApplicationController@createAppDeploymentView");
+
+Route::post("app/deployment-create", "ApplicationController@createAppDeploymentSubmit");
+
+Route::post("app/deployment-edit", "ApplicationController@editAppDeploymentSubmit");
+
+Route::post("app/deployment-delete", "ApplicationController@deleteAppDeployment");
+
+Route::get("gp/create", "GatewayprofileController@createView");
+
+Route::post("gp/create", "GatewayprofileController@createSubmit");
+
+Route::post("gp/edit", "GatewayprofileController@editGP");
+
+Route::get("gp/browse", "GatewayprofileController@browseView");
+
+Route::post("gp/delete-gp", "GatewayprofileController@delete");
+
+Route::post("gp/remove-cr", "GatewayprofileController@delete");
+
+Route::post("gp/add-crp", "GatewayprofileController@modifyCRP");
+
+Route::post("gp/update-crp", "GatewayprofileController@modifyCRP");
+
+//Management Dashboard
+
+Route::get("admin/console", "AdminController@console");
+
+Route::get("admin/dashboard/gateway", "AdminController@dashboard");
+Route::get("admin/dashboard", "AdminController@dashboard");
+
+Route::get("admin/dashboard/users", "AdminController@usersView");
+
+Route::get("admin/dashboard/roles", "AdminController@rolesView");
+
+Route::get("manage/users", "AdminController@usersView");
+
+Route::post("admin/adduser", "AdminController@addAdminSubmit");
+
+Route::post("admin/addgatewayadmin", "AdminController@addGatewayAdminSubmit");
+
+Route::post("admin/addrole", "AdminController@addRole");
+
+//Airavata Server Check
+Route::get("airavata/down", function(){
+ return View::make("server-down");
+});
+/*
+ * Test Routes.
+*/
+
+Route::get("testjob", function(){
+ //print_r( Session::all());
+});
+
+
+/*
+ * Following base Routes need to be at the bottom.
+*/
+Route::controller("home", "HomeController");
+
+Route::controller("/", "HomeController");
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/start/artisan.php
----------------------------------------------------------------------
diff --git a/app/start/artisan.php b/app/start/artisan.php
new file mode 100755
index 0000000..1df850b
--- /dev/null
+++ b/app/start/artisan.php
@@ -0,0 +1,13 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Register The Artisan Commands
+|--------------------------------------------------------------------------
+|
+| Each available Artisan command must be registered with the console so
+| that it is available to be called. We'll register every command so
+| the console gets access to each of the command object instances.
+|
+*/
+
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/start/global.php
----------------------------------------------------------------------
diff --git a/app/start/global.php b/app/start/global.php
new file mode 100755
index 0000000..cddbe4d
--- /dev/null
+++ b/app/start/global.php
@@ -0,0 +1,82 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Register The Laravel Class Loader
+|--------------------------------------------------------------------------
+|
+| In addition to using Composer, you may use the Laravel class loader to
+| load your controllers and models. This is useful for keeping all of
+| your classes in the "global" namespace without Composer updating.
+|
+*/
+
+ClassLoader::addDirectories(array(
+
+ app_path().'/commands',
+ app_path().'/controllers',
+ app_path().'/models',
+ app_path().'/database/seeds',
+ app_path().'/libraires',
+
+));
+
+/*
+|--------------------------------------------------------------------------
+| Application Error Logger
+|--------------------------------------------------------------------------
+|
+| Here we will configure the error logger setup for the application which
+| is built on top of the wonderful Monolog library. By default we will
+| build a basic log file setup which creates a single file for logs.
+|
+*/
+
+Log::useFiles(storage_path().'/logs/laravel.log');
+
+/*
+|--------------------------------------------------------------------------
+| Application Error Handler
+|--------------------------------------------------------------------------
+|
+| Here you may handle any errors that occur in your application, including
+| logging them or displaying custom views for specific errors. You may
+| even register several error handlers to handle different types of
+| exceptions. If nothing is returned, the default error view is
+| shown, which includes a detailed stack trace during debug.
+|
+*/
+
+App::error(function(Exception $exception, $code)
+{
+ Log::error($exception);
+});
+
+/*
+|--------------------------------------------------------------------------
+| Maintenance Mode Handler
+|--------------------------------------------------------------------------
+|
+| The "down" Artisan command gives you the ability to put an application
+| into maintenance mode. Here, you will define what is displayed back
+| to the user if maintenance mode is in effect for the application.
+|
+*/
+
+App::down(function()
+{
+ return Response::make("Be right back!", 503);
+});
+
+/*
+|--------------------------------------------------------------------------
+| Require The Filters File
+|--------------------------------------------------------------------------
+|
+| Next we will load the filters file for the application. This gives us
+| a nice separate location to store our route and application filter
+| definitions instead of putting them all in the main routes file.
+|
+*/
+
+require app_path().'/filters.php';
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/start/local.php
----------------------------------------------------------------------
diff --git a/app/start/local.php b/app/start/local.php
new file mode 100755
index 0000000..3d14850
--- /dev/null
+++ b/app/start/local.php
@@ -0,0 +1,3 @@
+<?php
+
+//
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/tests/ExampleTest.php
----------------------------------------------------------------------
diff --git a/app/tests/ExampleTest.php b/app/tests/ExampleTest.php
new file mode 100755
index 0000000..62387de
--- /dev/null
+++ b/app/tests/ExampleTest.php
@@ -0,0 +1,17 @@
+<?php
+
+class ExampleTest extends TestCase {
+
+ /**
+ * A basic functional test example.
+ *
+ * @return void
+ */
+ public function testBasicExample()
+ {
+ $crawler = $this->client->request('GET', '/');
+
+ $this->assertTrue($this->client->getResponse()->isOk());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/tests/TestCase.php
----------------------------------------------------------------------
diff --git a/app/tests/TestCase.php b/app/tests/TestCase.php
new file mode 100755
index 0000000..d367fe5
--- /dev/null
+++ b/app/tests/TestCase.php
@@ -0,0 +1,19 @@
+<?php
+
+class TestCase extends Illuminate\Foundation\Testing\TestCase {
+
+ /**
+ * Creates the application.
+ *
+ * @return \Symfony\Component\HttpKernel\HttpKernelInterface
+ */
+ public function createApplication()
+ {
+ $unitTesting = true;
+
+ $testEnvironment = 'testing';
+
+ return require __DIR__.'/../../bootstrap/start.php';
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/account/create.blade.php
----------------------------------------------------------------------
diff --git a/app/views/account/create.blade.php b/app/views/account/create.blade.php
new file mode 100755
index 0000000..9feb720
--- /dev/null
+++ b/app/views/account/create.blade.php
@@ -0,0 +1,121 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+@stop
+
+@section('content')
+
+<div class="col-md-offset-4 col-md-4">
+ <div class="page-header">
+ <h3>Create New Account
+ <small>
+ <small> (Already registered? <a href="login">Log in</a>)</small>
+ </small>
+ </h3>
+ </div>
+ @if ($errors->has())
+
+ @foreach ($errors->all() as $error)
+ {{ Utilities::print_error_message($error) }}
+ @endforeach
+
+ @endif
+
+ <form action="create" method="post" role="form">
+
+ @if( Session::has('username_exists'))
+ {{ Utilities::print_error_message('The username you entered is already in use. Please select another.') }}
+ @endif
+ <?php
+ Session::forget("username_exists");
+ ?>
+ <div class="form-group required"><label class="control-label">Username</label>
+
+ <div><input class="form-control" id="username" minlength="6" maxlength="30" name="username"
+ placeholder="Username" required="required" type="text" value="{{Input::old('username') }}"/></div>
+ </div>
+ <div class="form-group required"><label class="control-label">Password</label>
+
+ <div><input class="form-control" id="password" minlength="6" name="password" placeholder="Password"
+ required="required" title="" type="password"/></div>
+ </div>
+ <div class="form-group required"><label class="control-label">Password (again)</label>
+
+ <div><input class="form-control" id="confirm_password" name="confirm_password"
+ placeholder="Password (again)" required="required" title="" type="password"/>
+ </div>
+ </div>
+ <div class="form-group required"><label class="control-label">E-mail</label>
+
+ <div><input class="form-control" id="email" name="email" placeholder="E-mail"
+ required="required" title="" type="email" value="{{Input::old('email') }}"/></div>
+ </div>
+ <div class="form-group required"><label class="control-label">First Name</label>
+
+ <div><input class="form-control" id="first_name" maxlength="30" name="first_name"
+ placeholder="First Name" required="required" title="" type="text" value="{{Input::old('first_name') }}"/></div>
+ </div>
+ <div class="form-group required"><label class="control-label">Last Name</label>
+
+ <div><input class="form-control" id="last_name" maxlength="30" name="last_name"
+ placeholder="Last Name" required="required" title="" type="text" value="{{Input::old('last_name') }}"/></div>
+ </div>
+ <div class="form-group"><label class="control-label">Organization</label>
+
+ <div><input class="form-control" id="organization" name="organization"
+ placeholder="Organization" title="" type="text" value="{{Input::old('organization') }}"/>
+ </div>
+ </div>
+ <div class="form-group"><label class="control-label">Address</label>
+
+ <div><input class="form-control" id="address" name="address"
+ placeholder="Address" title="" type="text" value="{{Input::old('address') }}"/>
+ </div>
+ </div>
+ <div class="form-group"><label class="control-label">Country</label>
+
+ <div><input class="form-control" id="country" name="country"
+ placeholder="Country" title="" type="text" value="{{Input::old('country') }}"/>
+ </div>
+ </div>
+ <div class="form-group"><label class="control-label">Telephone</label>
+
+ <div><input class="form-control" id="telephone" name="telephone"
+ placeholder="Telephone" title="" type="tel" value="{{Input::old('telephone') }}"/>
+ </div>
+ </div>
+ <div class="form-group"><label class="control-label">Mobile</label>
+
+ <div><input class="form-control" id="mobile" name="mobile"
+ placeholder="Mobile" title="" type="tel" value="{{Input::old('mobile') }}"/>
+ </div>
+ </div>
+ <div class="form-group"><label class="control-label">IM</label>
+
+ <div><input class="form-control" id="im" name="im"
+ placeholder="IM" title="" type="text" value="{{Input::old('im') }}"/>
+ </div>
+ </div>
+ <div class="form-group"><label class="control-label">URL</label>
+
+ <div><input class="form-control" id="url" name="url"
+ placeholder="URL" title="" type="text" value="{{Input::old('url') }}"/>
+ </div>
+ </div>
+ <br/>
+ <input name="Submit" type="submit" class="btn btn-primary btn-block" value="Create">
+ </form>
+
+ <style media="screen" type="text/css">
+ .form-group.required .control-label:after {
+ content: " *";
+ color: red;
+ }
+ </style>
+ <br/><br/><br/>
+</div>
+</body>
+
+@stop
+
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/account/forgot-password.blade.php
----------------------------------------------------------------------
diff --git a/app/views/account/forgot-password.blade.php b/app/views/account/forgot-password.blade.php
new file mode 100644
index 0000000..b9c8274
--- /dev/null
+++ b/app/views/account/forgot-password.blade.php
@@ -0,0 +1,18 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+@stop
+
+@section('content')
+
+<div class="col-md-offset-3 col-md-6">
+
+<h3> Did you forget the password to your account? </h3>
+<h4> Please enter your email id, you registered with.</h4>
+<div class="form-group form-horizontal">
+ <div class="col-md-8"><input type="email" value="" class="form-control" placeholder="email"/></div>
+ <div class="col-md-2"><input type="submit" class="form-control btn btn-primary"value="Submit"/></div>
+</div>
+
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/account/login.blade.php
----------------------------------------------------------------------
diff --git a/app/views/account/login.blade.php b/app/views/account/login.blade.php
new file mode 100755
index 0000000..0e13cd0
--- /dev/null
+++ b/app/views/account/login.blade.php
@@ -0,0 +1,44 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+@stop
+
+@section('content')
+
+ <div class="col-md-offset-4 col-md-4">
+
+ <h3>
+ Login
+ <small>
+ <small> (Not registered? <a href="create">Create account</a>)</small>
+ </small>
+ </h3>
+
+
+
+ <form action="login" method="post" role="form">
+ @if( Session::has("invalid-credentials") )
+ {{ Utilities::print_error_message('Invalid username or password. Please try again.') }}
+ @endif
+ <?php
+ Session::forget( "invalid-credentials");
+ ?>
+
+ <div class="form-group">
+ <label class="sr-only" for="username">Username</label>
+ <input type="text" class="form-control" name="username" placeholder="Username" autofocus required>
+ </div>
+ <div class="form-group">
+ <label class="sr-only" for="password">Password</label>
+ <input type="password" class="form-control" name="password" placeholder="Password" required>
+ </div>
+ <input name="Submit" type="submit" class="btn btn-primary btn-block" value="Sign in">
+ </form>
+
+ <small>
+ <small> (Forgot Password? Click <a href="{{URL::to('/') }}/forgot-password">here</a>)</small>
+ </small>
+ </div>
+
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/admin/dashboard.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/dashboard.blade.php b/app/views/admin/dashboard.blade.php
new file mode 100644
index 0000000..0fd2ffc
--- /dev/null
+++ b/app/views/admin/dashboard.blade.php
@@ -0,0 +1,115 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+@stop
+
+@section('content')
+<div class="container">
+ <div class="col-md-12">
+ @if( Session::has("message"))
+ <div class="row">
+ <div class="alert alert-success alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ {{ Session::get("message") }}
+ </div>
+ </div>
+ {{ Session::forget("message") }}
+ @endif
+
+ <div class="row text-center">
+ <h1>Admin Console</h1>
+ </div>
+ <div class="row text-center admin-options">
+
+ <div class="row">
+ <a href="{{URL::to('/')}}/manage/users">
+ <div class="col-md-3 well">
+ <div class="col-md-12">
+ <span class="glyphicon glyphicon-user"></span>
+ </div>
+ <div class="col-md-12">
+ Users
+ </div>
+ </div>
+ </a>
+
+ <a href="{{URL::to('/')}}/admin/dashboard">
+ <div class=" col-md-offset-1 col-md-3 well">
+ <div class="col-md-12">
+ <span class="glyphicon glyphicon-eye-open"></span>
+ </div>
+ <div class="col-md-12">
+ Admins
+ </div>
+ </div>
+ </a>
+
+ <a href="{{URL::to('/')}}/cr/browse">
+ <div class=" col-md-offset-1 col-md-3 well">
+ <div class="col-md-12">
+ <span class="glyphicon glyphicon-briefcase"></span>
+ </div>
+ <div class="col-md-12">
+ Resources
+ </div>
+ </div>
+ </a>
+ </div>
+
+ <div class="row">
+ <div class="col-md-3 well">
+ <div class="col-md-12">
+ <span class="glyphicon glyphicon-tasks"></span>
+ </div>
+ <div class="col-md-12">
+ Application Catalog
+ </div>
+ <select onchange="location = this.options[this.selectedIndex].value;">
+ <option>-- Select --</option>
+ <option value="{{URL::to('/')}}/app/interface">Interface</option>
+ <option value="{{URL::to('/')}}/app/module">Module</option>
+ <option value="{{URL::to('/')}}/app/deployment">Deployment</option>
+ </select>
+ </div>
+
+ <div class=" col-md-offset-1 col-md-3 well">
+ <div class="col-md-12">
+ <span class="glyphicon glyphicon-sort"></span>
+ </div>
+ <div class="col-md-12">
+ Gateways
+ </div>
+ <select onchange="location = this.options[this.selectedIndex].value;">
+ <option>-- Select --</option>
+ <option value="{{URL::to('/')}}/gp/create">Create</option>
+ <option value="{{URL::to('/')}}/gp/browse">Browse</option>
+ </select>
+ </div>
+
+ <div class=" col-md-offset-1 col-md-3 well">
+ <div class="col-md-12">
+ <span class="glyphicon glyphicon-list-alt"></span>
+ </div>
+ <div class="col-md-12">
+ Reports
+ </div>
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="col-md-3 well">
+ <div class="col-md-12">
+ <span class="glyphicon glyphicon-question-sign"></span>
+ </div>
+ <div class="col-md-12">
+ Support
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+</div>
+
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/admin/manage-admin.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-admin.blade.php b/app/views/admin/manage-admin.blade.php
new file mode 100644
index 0000000..35fbaee
--- /dev/null
+++ b/app/views/admin/manage-admin.blade.php
@@ -0,0 +1,196 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+@stop
+
+@section('content')
+<div class="container">
+ <div class="col-md-12">
+ @if( Session::has("message"))
+ <div class="row">
+ <div class="alert alert-success alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ {{ Session::get("message") }}
+ </div>
+ </div>
+ {{ Session::forget("message") }}
+ @endif
+ <div class="panel-group" id="accordion">
+
+ <!-- Super Admin Users have access to Scigap Administration -->
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
+ Scigap Administration
+ </a>
+ </h4>
+ </div>
+ <div id="collapseOne" class="panel-collapse collapse in">
+ <div class="panel-body">
+ <h1>Add a User to Admin</h1>
+ <form action="{{URL::to('/')}}/admin/adduser" method="POST" role="form" enctype="multipart/form-data">
+
+ <div class="form-group required">
+ <label for="experiment-name" class="control-label">Enter Username</label>
+ <input type="text" class="form-control" name="username" id="experiment-name" placeholder="username" autofocus required="required">
+ </div>
+ <div class="btn-toolbar">
+ <input name="add" type="submit" class="btn btn-primary" value="Add User">
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <!-- Scigap Administration Ends -->
+
+ <!-- Gateway Administration can be accessed by Super Admins and Gateway Admins can access their particular gateway -->
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
+ Gateways Administration
+ </a>
+ </h4>
+ </div>
+ <div id="collapseThree" class="panel-collapse collapse">
+ <div class="panel-body">
+ <div class="row">
+
+ <div class="col-md-6">
+ <h3>Existing Gateway Resource Profiles :</h3>
+ </div>
+ <div class="col-md-6" style="margin-top:3.5%">
+ <input type="text" class="col-md-12 filterinput" placeholder="Search by Gateway Name" />
+ </div>
+ </div>
+ <div class="panel-group" id="accordion2">
+ @foreach( $gatewayProfiles as $indexGP => $gp )
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a class="accordion-toggle collapsed gateway-name" data-toggle="collapse" data-parent="#accordion2" href="#collapse-gateway-{{$indexGP}}">
+ {{ $gp->gatewayName }}
+ </a>
+ <div class="pull-right col-md-2 gateway-options fade">
+ <span class="glyphicon glyphicon-pencil edit-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#edit-gateway-block" data-gp-id="{{ $gp->gatewayID }}" data-gp-name="{{ $gp->gatewayName }}" data-gp-desc="{{ $gp->gatewayDescription }}"></span>
+ <span class="glyphicon glyphicon-trash delete-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#delete-gateway-block" data-gp-name="{{$gp->gatewayName}}" data-gp-id="{{ $gp->gatewayID }}"></span>
+ </div>
+ </h4>
+ </div>
+ <div id="collapse-gateway-{{$indexGP}}" class="panel-collapse collapse">
+ <div class="panel-body">
+ <div class="app-interface-block">
+ <h5>{{ $gp->gatewayDescription}}</h5>
+ <hr/>
+ <div class="row">
+ <div class="col-md-10">
+ <h4><span class="glyphicon glyphicon-plus"></span> Add a user as Admin to this Gateway</h4>
+ <form action="{{URL::to('/')}}/admin/addgatewayadmin" method="POST" role="form" enctype="multipart/form-data">
+ <div class="form-group required">
+ <label for="experiment-name" class="control-label">Enter Username</label>
+ <input type="text" class="form-control" name="username" id="experiment-name" placeholder="username" autofocus required="required">
+ <input type="hidden" name="gateway_name" value="{{ $gp->gatewayName }}"/>
+ </div>
+ <div class="btn-toolbar">
+ <input name="add" type="submit" class="btn btn-primary" value="Add Admin"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ @endforeach
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Super Admin Users have access to Role Administration -->
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
+ Role Adminstration
+ </a>
+ </h4>
+ </div>
+ <div id="collapseTwo" class="panel-collapse collapse">
+ <div class="panel-body">
+ <h1>Existing Roles</h1>
+ <table class="table table-condensed">
+ @foreach( $roles as $role)
+ <tr>
+ <td>{{ $role }}</td>
+ @if( $role != "admin")
+ <td><a href=""><span class="glyphicon glyphicon-pencil"></span></a></td>
+ <td><span class="glyphicon glyphicon-remove"></span></td>
+ @endif
+ </tr>
+ @endforeach
+ </table>
+ <h1>Add a new Role</h1>
+ <form id="role-form" action="{{URL::to('/')}}/admin/addrole" method="POST" role="form" enctype="multipart/form-data">
+ <div class="form-group form-horizontal required col-md-2">
+ <label for="experiment-name" class="control-label">Enter Role</label>
+ </div>
+ <div class="form-group form-horizontal required col-md-4">
+ <input type="text" class="form-control input-small role-name" name="role" placeholder="username" autofocus required="required">
+ </div>
+ <div class="form-group form-horizontal col-md-4">
+ <input name="add" type="submit" class="btn btn-primary add-role" value="Add">
+ </div>
+ </form>
+ <input type="hidden" id="roles" value="{{ htmlentities( json_encode( $roles) ) }}"/>
+ </div>
+ </div>
+ </div>
+ <!-- Role Administration complete -->
+
+ <!-- Admins will have access to their settings -->
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
+ Settings
+ </a>
+ </h4>
+ </div>
+ <div id="collapseThree" class="panel-collapse collapse">
+ <div class="panel-body">
+ some settngs should come here.
+ </div>
+ </div>
+ </div>
+ <!--Settings complete -->
+
+ </div>
+ </div>
+</div>
+
+@stop
+
+
+@section('scripts')
+ @parent
+ <script>
+ // Checking if role already exists.
+ $(".add-role").click( function( e){
+ e.preventDefault();
+ var roles = $.parseJSON( $("#roles").val() );
+ if( $.inArray( $.trim( $(".role-name").val() ), roles ) != -1 )
+ {
+ console.log( $(this).parent().find(".alert").length );
+ if( ! $(this).parent().parent().find(".alert").length )
+ {
+ $(this).parent().after("<div class='col-md-12 alert alert-danger'>This role already exists. Please pick another role.</span>");
+ }
+ }
+ else
+ $("#role-form").submit();
+ })
+ </script>
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/admin/manage-admin1.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-admin1.blade.php b/app/views/admin/manage-admin1.blade.php
new file mode 100644
index 0000000..8667cf2
--- /dev/null
+++ b/app/views/admin/manage-admin1.blade.php
@@ -0,0 +1,109 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+ {{ HTML::style('css/admin.css')}}
+@stop
+
+@section('content')
+
+ <div id="wrapper">
+ <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
+ @include( 'partials/dashboard-block')
+ <div id="page-wrapper">
+
+ <div class="container-fluid">
+
+ <div class="row">
+
+ <div class="col-md-6">
+ <h3>Existing Gateway Resource Profiles :</h3>
+ </div>
+ <div class="col-md-6" style="margin-top:3.5%">
+ <input type="text" class="col-md-12 filterinput" placeholder="Search by Gateway Name" />
+ </div>
+ </div>
+ <div class="panel-group" id="accordion2">
+ @foreach( $gateways as $indexGP => $gp )
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a class="accordion-toggle collapsed gateway-name" data-toggle="collapse" data-parent="#accordion2" href="#collapse-gateway-{{$indexGP}}">
+ {{ $gp->gatewayName }}
+ </a>
+ <div class="pull-right col-md-2 gateway-options fade">
+ <span class="glyphicon glyphicon-pencil edit-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#edit-gateway-block" data-gp-id="{{ $gp->gatewayId }}" data-gp-name="{{ $gp->gatewayName }}"></span>
+ <span class="glyphicon glyphicon-trash delete-gateway" style="cursor:pointer;" data-toggle="modal" data-target="#delete-gateway-block" data-gp-name="{{$gp->gatewayName}}" data-gp-id="{{ $gp->gatewayId }}"></span>
+ </div>
+ </h4>
+ </div>
+ <div id="collapse-gateway-{{$indexGP}}" class="panel-collapse collapse">
+ <div class="panel-body">
+ <div class="app-interface-block">
+ <div class="row">
+ <div class="col-md-10">
+ <h4><span class="glyphicon glyphicon-plus"></span> Add a user as Admin to this Gateway</h4>
+ <form action="{{URL::to('/')}}/admin/addgatewayadmin" method="POST" role="form" enctype="multipart/form-data">
+ <div class="form-group required">
+ <label for="experiment-name" class="control-label">Enter Username</label>
+ <input type="text" class="form-control" name="username" id="experiment-name" placeholder="username" autofocus required="required">
+ <input type="hidden" name="gateway_name" value="{{ $gp->gatewayName }}"/>
+ </div>
+ <div class="btn-toolbar">
+ <input name="add" type="submit" class="btn btn-primary" value="Add Admin"/>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ @endforeach
+ </div>
+ <div class="col-md-12">
+ <button type="button" class="btn btn-default toggle-add-tenant"><span class="glyphicon glyphicon-plus"></span>Add a new gateway</button>
+ </div>
+ <div class="add-tenant col-md-6">
+ <div class="form-group">
+ <label>Enter Domain Name</label>
+ <input type="text" class="form-control"/>
+ </div>
+ <div class="form-group">
+ <label>Enter Admin Username</label>
+ <input type="text" class="form-control"/>
+ </div>
+ <div class="form-group">
+ <label>Enter Admin Password</label>
+ <input type="text" class="form-control"/>
+ </div>
+ <div class="form-group">
+ <label>Re-enter Admin Password</label>
+ <input type="text" class="form-control"/>
+ </div>
+ <div class="form-group">
+ <input type="submit" class="form-control btn btn-primary" value="Register" />
+ </div>
+ </div>
+
+ </div>
+ <!-- /.container-fluid -->
+
+ </div>
+ <!-- /#page-wrapper -->
+
+ </div>
+
+@stop
+
+
+@section('scripts')
+ @parent
+ <script>
+ $(".add-tenant").slideUp();
+
+ $(".toggle-add-tenant").click( function(){
+ $(".add-tenant").slideDown();
+ });
+ </script>
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/admin/manage-roles.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-roles.blade.php b/app/views/admin/manage-roles.blade.php
new file mode 100644
index 0000000..8104bd7
--- /dev/null
+++ b/app/views/admin/manage-roles.blade.php
@@ -0,0 +1,50 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+ {{ HTML::style('css/admin.css')}}
+@stop
+
+@section('content')
+
+ <div id="wrapper">
+ <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
+ @include( 'partials/dashboard-block')
+ <div id="page-wrapper">
+
+ <div class="container-fluid">
+ <div class="col-md-12">
+ @if( Session::has("message"))
+ <div class="row">
+ <div class="alert alert-success alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ {{ Session::get("message") }}
+ </div>
+ </div>
+ {{ Session::forget("message") }}
+ @endif
+
+ <h1 class="text-center">Roles</h1>
+
+ <table class="table table-striped table-condensed">
+ <tr>
+ <th>Role</th>
+ <th>Actions</th>
+ </tr>
+ @foreach( $roles as $role)
+ <tr>
+ <td>{{ $role }}</td>
+ <td>
+ <span class="glyphicon glyphicon-pencil"></span>
+ <span class="glyphicon glyphicon-remove"></span>
+ </td>
+ </tr>
+ @endforeach
+ </table>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/admin/manage-users.blade.php
----------------------------------------------------------------------
diff --git a/app/views/admin/manage-users.blade.php b/app/views/admin/manage-users.blade.php
new file mode 100644
index 0000000..2132281
--- /dev/null
+++ b/app/views/admin/manage-users.blade.php
@@ -0,0 +1,47 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+ {{ HTML::style('css/admin.css')}}
+@stop
+
+@section('content')
+
+ <div id="wrapper">
+ <!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
+ @include( 'partials/dashboard-block')
+ <div id="page-wrapper">
+
+ <div class="container-fluid">
+ <div class="col-md-12">
+ @if( Session::has("message"))
+ <div class="row">
+ <div class="alert alert-success alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ {{ Session::get("message") }}
+ </div>
+ </div>
+ {{ Session::forget("message") }}
+ @endif
+
+ <h1 class="text-center">Users</h1>
+
+ <table class="table table-striped table-condensed">
+ <tr>
+ <th>Username</th>
+ <th>Role</th>
+ </tr>
+ @foreach( $users as $user)
+ <tr>
+ <td>{{ $user }}</td>
+ <td><button class="button btn btn-default" type="button">Check Role</button></td>
+ </tr>
+ @endforeach
+ </table>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/application/deployment.blade.php
----------------------------------------------------------------------
diff --git a/app/views/application/deployment.blade.php b/app/views/application/deployment.blade.php
new file mode 100644
index 0000000..2cad93b
--- /dev/null
+++ b/app/views/application/deployment.blade.php
@@ -0,0 +1,180 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+ {{ HTML::style('css/style.css') }}
+@stop
+
+@section('content')
+
+<div class="container">
+ <div class="col-md-offset-2 col-md-8">
+
+ <div class="row">
+ <button class="btn btn-default create-app-deployment">Create a new Application Deployment</button>
+ </div>
+ @if( count( $appDeployments) )
+ @if( Session::has("message"))
+ <div class="row">
+ <div class="alert alert-success alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ {{ Session::get("message") }}
+ </div>
+ </div>
+ {{ Session::forget("message") }}
+ @endif
+
+ <div class="row">
+ <div class="col-md-6">
+ <h3>Existing Application Deployments :</h3>
+ </div>
+ <div class="col-md-6" style="margin-top:3.5%">
+ <input type="text" class="col-md-12 filterinput" placeholder="Search by Deployment Id Name" />
+ </div>
+ </div>
+ <div class="panel-group" id="accordion">
+ @foreach( $appDeployments as $index => $deployment )
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a class="accordion-toggle collapsed deployment-id" data-toggle="collapse" data-parent="#accordion" href="#collapse-{{$index}}">
+ {{ $deployment->appDeploymentId }}
+ </a>
+ <div class="pull-right col-md-2 deployment-options fade">
+ <span class="glyphicon glyphicon-pencil edit-app-deployment" style="cursor:pointer;" data-toggle="modal" data-target="#edit-app-deployment-block" data-deployment-id="{{ $deployment->appDeploymentId }}"></span>
+ <span class="glyphicon glyphicon-trash delete-app-deployment" style="cursor:pointer;" data-toggle="modal" data-target="#delete-app-deployment-block" data-deployment-id="{{ $deployment->appDeploymentId }}"></span>
+ </div>
+ </h4>
+ </div>
+ <div id="collapse-{{$index}}" class="panel-collapse collapse">
+ <div class="panel-body">
+ <div class="app-deployment-block">
+ @include('partials/deployment-block', array( 'deploymentObject' => $deployment, 'computeResources' => $computeResources, 'modules' => $modules) )
+ </div>
+ </div>
+ </div>
+ </div>
+ @endforeach
+ </div>
+ @endif
+
+ <div class="load-cmd-ui hide">
+ <input name="moduleLoadCmds[]" type="text" class="form-control" placeholder="Module Load Command"/>
+ </div>
+
+ <div class="lib-prepend-path-ui hide">
+ <div class="col-md-12 well">
+ <input name="libraryPrependPathName[]" type="text" class="col-md-4" placeholder="Name"/>
+ <input name="libraryPrependPathValue[]" type="text" class="col-md-8" placeholder="Value"/>
+ </div>
+ </div>
+
+ <div class="lib-append-path-ui hide">
+ <div class="col-md-12 well">
+ <input name="libraryAppendPathName[]" type="text" class="col-md-4" placeholder="Name"/>
+ <input name="libraryAppendPathValue[]" type="text" class="col-md-8" placeholder="Value"/>
+ </div>
+ </div>
+
+ <div class="environment-ui hide">
+ <div class="col-md-12 well">
+ <input name="environmentName[]" type="text" class="col-md-4" placeholder="Name"/>
+ <input name="environmentValue[]" type="text" class="col-md-8" placeholder="Value"/>
+ </div>
+ </div>
+
+ <div class="pre-job-command-ui hide">
+ <div class="col-md-12 well">
+ <input name="preJobCommand[]" type="text" class="col-md-12" placeholder="Pre Job Command"/>
+ </div>
+ </div>
+
+ <div class="post-job-command-ui hide">
+ <div class="col-md-12 well">
+ <input name="postJobCommand[]" type="text" class="col-md-12" placeholder="Post Job Command"/>
+ </div>
+ </div>
+
+ <div class="modal fade" id="edit-app-deployment-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+ <div class="modal-dialog">
+ <form action="{{URL::to('/')}}/app/deployment-edit" method="POST">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h3 class="text-center">Edit Application Deployment</h3>
+ </div>
+ <div class="modal-body row">
+ <div class="app-deployment-form-content col-md-12">
+ </div>
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="submit" class="btn btn-primary" value="Update"/>
+ <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+
+ <div class="modal fade" id="create-app-deployment-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+ <div class="modal-dialog">
+ <form action="{{URL::to('/')}}/app/deployment-create" method="POST">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h3 class="text-center">Create Application Deployment</h3>
+ </div>
+ <div class="modal-body row">
+ <div class="col-md-12">
+ <div class="create-app-deployment-block">
+ @include('partials/deployment-block', array( 'computeResources' => $computeResources, 'modules' => $modules) )
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="submit" class="btn btn-primary" value="Create"/>
+ <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+
+ <div class="modal fade" id="delete-app-deployment-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+ <div class="modal-dialog">
+
+ <form action="{{URL::to('/')}}/app/deployment-delete" method="POST">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h3 class="text-center">Delete Confirmation Application Deployment</h3>
+ </div>
+ <div class="modal-body">
+ <input type="hidden" class="form-control delete-deploymentId" name="appDeploymentId"/>
+ Do you really want to delete the Application Deployment - <span class="delete-deployment-id"></span>
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="submit" class="btn btn-danger" value="Delete"/>
+ <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+ </div>
+ </div>
+ </div>
+
+ </form>
+
+
+ </div>
+ </div>
+
+ </div>
+
+</div>
+
+@stop
+
+@section('scripts')
+ @parent
+ {{ HTML::script('js/deployment.js') }}
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/application/interface.blade.php
----------------------------------------------------------------------
diff --git a/app/views/application/interface.blade.php b/app/views/application/interface.blade.php
new file mode 100644
index 0000000..1057099
--- /dev/null
+++ b/app/views/application/interface.blade.php
@@ -0,0 +1,165 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+ {{ HTML::style('css/style.css') }}
+@stop
+
+@section('content')
+
+<div class="container">
+ <div class="col-md-offset-2 col-md-8">
+
+ <div class="row">
+ <button class="btn btn-default create-app-interface">Create a new Application Interface</button>
+ </div>
+ @if( count( $appInterfaces) )
+ @if( Session::has("message"))
+ <div class="row">
+ <div class="alert alert-success alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ {{ Session::get("message") }}
+ </div>
+ </div>
+ {{ Session::forget("message") }}
+ @endif
+ <div class="row">
+
+ <div class="col-md-6">
+ <h3>Existing Application Interfaces :</h3>
+ </div>
+ <div class="col-md-6" style="margin-top:3.5%">
+ <input type="text" class="col-md-12 filterinput" placeholder="Search by Interface Name" />
+ </div>
+ </div>
+ <div class="panel-group" id="accordion">
+ @foreach( $appInterfaces as $index => $interface )
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a class="accordion-toggle collapsed interface-name" data-toggle="collapse" data-parent="#accordion" href="#collapse-{{$index}}">
+ {{ $interface->applicationName }}
+ </a>
+ <div class="pull-right col-md-2 interface-options fade">
+ <span class="glyphicon glyphicon-pencil edit-app-interface" style="cursor:pointer;" data-toggle="modal" data-target="#edit-app-interface-block" data-interface-id="{{ $interface->applicationInterfaceId }}"></span>
+ <span class="glyphicon glyphicon-trash delete-app-interface" style="cursor:pointer;" data-toggle="modal" data-target="#delete-app-interface-block" data-interface-id="{{ $interface->applicationInterfaceId }}"></span>
+ </div>
+ </h4>
+ </div>
+ <div id="collapse-{{$index}}" class="panel-collapse collapse">
+ <div class="panel-body">
+ <div class="app-interface-block">
+ @include('partials/interface-block', array( 'interfaceObject' => $interface, 'dataTypes' => $dataTypes, 'modules' => $modules) )
+ </div>
+ </div>
+ </div>
+ </div>
+ @endforeach
+ </div>
+ @endif
+
+ </div>
+
+ <div class="app-module-block hide">
+ <div class="input-group">
+ <select name="applicationModules[]" class="app-module-select form-control">
+ @foreach( $modules as $index=> $module)
+ <option value="{{ $module->appModuleId}}">{{ $module->appModuleName }}</option>
+ @endforeach
+ </select>
+ <span class="input-group-addon remove-app-module" style="cursor:pointer;">x</span>
+ </div>
+ </div>
+
+ <div class="app-input-block hide">
+ @include('partials/interface-input-block', array( 'dataTypes' => $dataTypes) )
+ </div>
+
+ <div class="app-output-block hide">
+ @include('partials/interface-output-block', array( 'dataTypes' => $dataTypes) )
+ </div>
+</div>
+
+<div class="modal fade" id="edit-app-interface-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true" data-backdrop="static">
+ <div class="modal-dialog">
+ <form action="{{URL::to('/')}}/app/interface-edit" method="POST" id="edit-app-interface-form">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+ <h3 class="text-center">Edit Application Interface</h3>
+ </div>
+ <div class="modal-body row">
+ <div class="app-interface-form-content col-md-12">
+ </div>
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="button" class="submit-edit-app-interface-form btn btn-primary" value="Update"/>
+ <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+ <input type="submit" class="btn btn-primary hide really-submit-edit-app-interface-form" value=""/>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
+
+<div class="modal fade" id="create-app-interface-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true" data-backdrop="static">
+ <div class="modal-dialog">
+ <form action="{{URL::to('/')}}/app/interface-create" method="POST" id="create-app-interface-form">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+ <h3 class="text-center">Create Application Interface</h3>
+ </div>
+ <div class="modal-body row">
+ <div class="col-md-12">
+ <div class="create-app-interface-block">
+ @include('partials/interface-block', array( 'dataTypes' => $dataTypes, 'modules' => $modules) )
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="button" class="btn btn-primary submit-create-app-interface-form" value="Create"/>
+ <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+ <input type="submit" class="btn btn-primary hide really-submit-create-app-interface-form" value=""/>
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
+
+<div class="modal fade" id="delete-app-interface-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+ <div class="modal-dialog">
+
+ <form action="{{URL::to('/')}}/app/interface-delete" method="POST">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h3 class="text-center">Delete Confirmation Application Interface</h3>
+ </div>
+ <div class="modal-body">
+ <input type="hidden" class="form-control delete-interfaceid" name="appInterfaceId"/>
+ Do you really want to delete the Application Interface - <span class="delete-interface-name"></span>
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="submit" class="btn btn-danger" value="Delete"/>
+ <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+ </div>
+ </div>
+ </div>
+
+ </form>
+
+
+ </div>
+ </div>
+
+@stop
+
+@section('scripts')
+ @parent
+ {{ HTML::script('js/interface.js') }}
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/application/module.blade.php
----------------------------------------------------------------------
diff --git a/app/views/application/module.blade.php b/app/views/application/module.blade.php
new file mode 100644
index 0000000..006f330
--- /dev/null
+++ b/app/views/application/module.blade.php
@@ -0,0 +1,189 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+ {{ HTML::style('css/style.css') }}
+@stop
+
+@section('content')
+
+<div class="container">
+ <div class="col-md-offset-2 col-md-8">
+
+ <button class="btn btn-default create-app-module" data-toggle="modal" data-target="#new-app-module-block">Create a new Application Module</button>
+
+ @if( count( $modules) )
+ @if( Session::has("message"))
+ <div class="row">
+ <div class="alert alert-success alert-dismissible" role="alert">
+ <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
+ {{ Session::get("message") }}
+ </div>
+ </div>
+ {{ Session::forget("message") }}
+ @endif
+ <div class="row">
+ <div class="col-md-6">
+ <h3>Existing Modules :</h3>
+ </div>
+ <div class="col-md-6" style="margin-top:3.5%">
+ <input type="text" class="col-md-12 filterinput" placeholder="Search by Module Name" />
+ </div>
+ </div>
+ <div class="panel-group" id="accordion">
+ @foreach( $modules as $index => $module )
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse-{{$index}}">
+ {{ $module->appModuleName }}
+ </a>
+ <div class="pull-right col-md-2 module-options fade">
+ <span class="glyphicon glyphicon-pencil edit-app-module" style="cursor:pointer;" data-toggle="modal" data-target="#edit-app-module-block" data-module-data="{{ htmlentities(json_encode( $module) ) }}"></span>
+ <span class="glyphicon glyphicon-trash delete-app-module" style="cursor:pointer;" data-toggle="modal" data-target="#delete-app-module-block" data-module-data="{{ htmlentities(json_encode( $module) ) }}"></span>
+ </div>
+ </h4>
+ </div>
+ <div id="collapse-{{$index}}" class="panel-collapse collapse">
+ <div class="panel-body">
+ {{ $module->appModuleDescription }}
+ </div>
+ </div>
+ </div>
+ @endforeach
+ </div>
+ @endif
+
+
+ <div class="modal fade" id="new-app-module-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+ <div class="modal-dialog">
+
+ <form action="{{URL::to('/')}}/app/module-create" method="POST">
+
+ <div class="modal-content">
+ <div class="modal-header">
+ <h3 class="text-center">Create a new Application Module</h3>
+ </div>
+ <div class="modal-body">
+ @include('partials/module-block')
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="submit" class="btn btn-primary" value="Save"/>
+ <input type="reset" class="reset-create-form btn btn-success" value ="Reset"/>
+ </div>
+ </div>
+ </div>
+
+ </form>
+
+
+ </div>
+ </div>
+
+ <div class="modal fade" id="edit-app-module-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+ <div class="modal-dialog">
+
+ <form action="{{URL::to('/')}}/app/module-edit" method="POST">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h3 class="text-center">Edit Application Module</h3>
+ </div>
+ <div class="modal-body">
+ <input type="hidden" class="form-control edit-moduleid" name="appModuleId"/>
+ @include('partials/module-block')
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="submit" class="btn btn-primary" value="Update"/>
+ <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+ </div>
+ </div>
+ </div>
+
+ </form>
+
+
+ </div>
+ </div>
+
+ <div class="modal fade" id="delete-app-module-block" tabindex="-1" role="dialog" aria-labelledby="add-modal" aria-hidden="true">
+ <div class="modal-dialog">
+
+ <form action="{{URL::to('/')}}/app/module-delete" method="POST">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h3 class="text-center">Delete Confirmation Application Module</h3>
+ </div>
+ <div class="modal-body">
+ <input type="hidden" class="form-control delete-moduleid" name="appModuleId"/>
+
+ Do you really want to delete the Application Module - <span class="delete-module-name"></span>
+ </div>
+ <div class="modal-footer">
+ <div class="form-group">
+ <input type="submit" class="btn btn-danger" value="Delete"/>
+ <input type="button" class="btn btn-default" data-dismiss="modal" value ="Cancel"/>
+ </div>
+ </div>
+ </div>
+
+ </form>
+
+
+ </div>
+ </div>
+
+@stop
+
+@section('scripts')
+ @parent
+ <script type="text/javascript">
+
+ $(".panel-title").hover(
+ function(){
+ $(this).find(".module-options").addClass("in");
+ },
+ function(){
+ $(this).find(".module-options").removeClass("in");
+ }
+ );
+
+ $('.filterinput').keyup(function() {
+ var a = $(this).val();
+ if (a.length > 0) {
+ children = ($("#accordion").children());
+
+ var containing = children.filter(function () {
+ var regex = new RegExp('\\b' + a, 'i');
+ return regex.test($('a', this).text());
+ }).slideDown();
+ children.not(containing).slideUp();
+ } else {
+ children.slideDown();
+ }
+ return false;
+ });
+
+ $(".create-app-module").click( function(){
+ //reset form to clear it out if it got filled by edit modules
+ $(".reset-create-form").click();
+ })
+
+ $(".edit-app-module").click( function(){
+ var moduleData = $(this).data("module-data");
+ console.log( moduleData);
+ $(".edit-name").val( moduleData.appModuleName);
+ $(".edit-desc").val( moduleData.appModuleDescription);
+ $(".edit-version").val( moduleData.appModuleVersion);
+ $(".edit-moduleid").val( moduleData.appModuleId)
+ });
+
+ $(".delete-app-module").click( function(){
+ var moduleData = $(this).data("module-data");
+ $(".delete-module-name").html( moduleData.appModuleName);
+ $(".delete-moduleid").val( moduleData.appModuleId)
+ });
+ </script>
+
+@stop
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/emails/auth/reminder.blade.php
----------------------------------------------------------------------
diff --git a/app/views/emails/auth/reminder.blade.php b/app/views/emails/auth/reminder.blade.php
new file mode 100755
index 0000000..aebea9e
--- /dev/null
+++ b/app/views/emails/auth/reminder.blade.php
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ </head>
+ <body>
+ <h2>Password Reset</h2>
+
+ <div>
+ To reset your password, complete this form: {{ URL::to('password/reset', array($token)) }}.<br/>
+ This link will expire in {{ Config::get('auth.reminder.expire', 60) }} minutes.
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/airavata-php-gateway/blob/a325e292/app/views/experiment/create-complete.blade.php
----------------------------------------------------------------------
diff --git a/app/views/experiment/create-complete.blade.php b/app/views/experiment/create-complete.blade.php
new file mode 100644
index 0000000..a3628f6
--- /dev/null
+++ b/app/views/experiment/create-complete.blade.php
@@ -0,0 +1,128 @@
+@extends('layout.basic')
+
+@section('page-header')
+ @parent
+@stop
+
+@section('content')
+<div class="col-md-offset-3 col-md-6">
+
+ <h1>Create a new experiment</h1>
+ <form action="{{URL::to('/')}}/experiment/create" method="POST" role="form" enctype="multipart/form-data">
+
+ <input type="hidden" name="experiment-name" value="{{$experimentName}}">
+ <input type="hidden" name="experiment-description" value="{{$experimentDescription}}">
+ <input type="hidden" name="project" value="{{$project}}">
+ <input type="hidden" name="application" value="{{$application}}">
+
+ <div class="form-group required">
+ <label for="experiment-name" class="control-label">Experiment Name</label>
+ <input type="text" class="form-control" name="experiment-name" id="experiment-name" placeholder="Enter experiment name" autofocus required="required" {{ $disabled }} value="{{ $experimentName }}">
+ </div>
+ <div class="form-group">
+ <label for="experiment-description">Experiment Description</label>
+ <textarea class="form-control" name="experiment-description" id="experiment-description" placeholder="Optional: Enter a short description of the experiment" {{ $disabled }}>{{ $experimentDescription }}</textarea>
+ </div>
+ <div class="form-group required">
+ <label for="project" class="control-label">Project</label>
+ {{ Utilities::create_project_select($project, !$disabled) }}
+ </div>
+ <div class="form-group">
+ <label for="application">Application</label>
+ {{ Utilities::create_application_select($application, !$disabled) }}
+ </div>
+
+ <div class="panel panel-default">
+ <div class="panel-heading">Application configuration</div>
+ <div class="panel-body">
+ <label>Application input</label>
+ <div class="well">
+ <input type="hidden" id="allowedFileSize" value="{{$allowedFileSize}}"/>
+ {{ Utilities::create_inputs($application, true) }}
+ </div>
+ <div class="form-group">
+ <label for="compute-resource">Compute Resource</label>';
+ {{ Utilities::create_compute_resources_select($application, null) }}
+ </div>
+ <div class="form-group">
+ <label for="node-count">Node Count</label>
+ <input type="number" class="form-control" name="node-count" id="node-count" value="1" min="1">
+ </div>
+ <div class="form-group">
+ <label for="cpu-count">Total Core Count</label>
+ <input type="number" class="form-control" name="cpu-count" id="cpu-count" value="4" min="1">
+ </div>
+ <div class="form-group">
+ <label for="wall-time">Wall Time Limit</label>
+ <div class="input-group">
+ <input type="number" class="form-control" name="wall-time" id="wall-time" value="30" min="0">
+ <span class="input-group-addon">minutes</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <h3>Notifications</h3>
+ <div class="form-group well">
+ <label for=""></label>
+ <input type="checkbox" id="enableEmail" name="enableEmailNotification" value="1">Do you want to receive email notifications for status changes in the experiment?<br/>
+ <div class="emailSection hide">
+ <h4>Enter Email Address here.</h4>
+ <div class="emailAddresses">
+ <input type="email" id="emailAddresses" class="form-control" name="emailAddresses[]" placeholder="Email"/>
+ </div>
+ <button type="button" class="addEmail btn btn-default">Add another Email</button>
+ </div>
+ </div>
+
+
+ <div class="btn-toolbar">
+ <div class="btn-group">
+ <button name="save" type="submit" class="btn btn-primary" value="Save">Save</button>
+ <button name="launch" type="submit" class="btn btn-success" id="expLaunch" value="Save and launch">Save and launch</button>
+ </div>
+
+ <a href="{{URL::to('/')}}/experiment/create" class="btn btn-default" role="button">Start over</a>
+ </div>
+
+ </form>
+
+
+</div>
+
+
+@stop
+
+@section('scripts')
+ @parent
+ <script>
+ $('.file-input').bind('change', function() {
+
+ var inputFileSize = Math.round( this.files[0].size/(1024*1024) );
+ if( inputFileSize > $("#allowedFileSize").val())
+ {
+ alert( "The input file size is greater than the allowed file size (" + $("#allowedFileSize").val() + " MB) in a form. Please upload another file.");
+ $(this).val("");
+ }
+
+ });
+
+ $("#enableEmail").change( function(){
+ if( this.checked)
+ {
+ $("#emailAddresses").attr("required", "required");
+ $(this).parent().children(".emailSection").removeClass("hide");
+ }
+ else
+ {
+ $(this).parent().children(".emailSection").addClass("hide");
+ $("#emailAddresses").removeAttr("required");
+ }
+
+ });
+
+ $(".addEmail").click( function(){
+ var emailInput = $(this).parent().find("#emailAddresses").clone();
+ emailInput.removeAttr("id").removeAttr("required").val("").appendTo(".emailAddresses");
+ });
+ </script>
+@stop
\ No newline at end of file