| @@ -0,0 +1,183 @@ | ||
| {% extends "layouts/layout-jumbotron.twig" %} | ||
| {% set page_group = "loggedout" %} | ||
|
|
||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
|
|
||
| {% set page = page | merge({ | ||
| "title" : "Register", | ||
| "description" : "Register for a new UserFrosting account.", | ||
| "active_page" : "account/register" | ||
| }) %} | ||
|
|
||
| {{ parent() }} | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <h1>Let's get started!</h1> | ||
| <p class="lead">Registration is fast and simple.</p> | ||
| {% include 'components/common/alerts.twig' %} | ||
| <form name="register" method="post" action="{{site.uri.public}}/account/register" class="form-horizontal"> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Username</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-edit"></i></span> | ||
| <input type="text" class="form-control" name="user_name" autocomplete="off" value="" placeholder="User name"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Display Name</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-edit"></i></span> | ||
| <input type="text" class="form-control" name="display_name" autocomplete="off" value="" placeholder="Display name"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Email</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-envelope"></i></span> | ||
| <input type="text" class="form-control" name="email" placeholder="Email address" value=""> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Password</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-key"></i></span> | ||
| <input type="password" class="form-control" name="password" autocomplete="off" value="" placeholder="8-50 characters"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Confirm password</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-key"></i></span> | ||
| <input type="password" class="form-control" name="passwordc" autocomplete="off" value="" placeholder="Re-enter your password"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% if site.enable_captcha %} | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Confirm captcha code</label> | ||
| <div class="col-sm-4"> | ||
| <div class="input-group"><span class="input-group-addon"><i class="fa fa-fw fa-eye"></i></span> | ||
| <input type="text" class="form-control" id="captcha-input" name="captcha" autocomplete="off" value="" placeholder="Organics only!"> | ||
| </div> | ||
| </div> | ||
| <div class="col-sm-4"> | ||
| <img src="{{captcha_image}}" id="captcha" data-target="#captcha-input"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if site.show_terms_on_register %} | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| By registering an account with {{site.site_title}}, you accept the <a href="#" data-toggle="modal" data-target="#tos">terms and conditions</a>. | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| <br> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div> | ||
| <button type="submit" name="btn_register" class="btn btn-success">Register</button> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="collapse"> | ||
| <label>Spiderbro: Don't change me bro, I'm tryin'a catch some flies!</label> | ||
| <input name="spiderbro" id="spiderbro" value="http://"/> | ||
| </div> | ||
| </form> | ||
| {% include 'components/jumbotron/jumbotron-links.twig' %} | ||
| {% endblock %} | ||
|
|
||
| {% block fragments %} | ||
| <div id="tos" class="modal fade" tabindex="-1" data-width="760" style="display: none;"> | ||
| <div class="modal-header"> | ||
| <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||
| <h4 class="modal-title">Terms and Conditions for {{site.site_title}}</h4> | ||
| </div> | ||
| <div class="modal-body"> | ||
| {% include 'components/common/tos.twig' %} | ||
| </div> | ||
| <div class="modal-footer"> | ||
| <button type="button" data-dismiss="modal" class="btn btn-primary">Got it!</button> | ||
| </div> | ||
| </div> | ||
| {% endblock %} | ||
|
|
||
| {% block page_scripts %} | ||
| <script> | ||
| $(document).ready(function() { | ||
| // Process form | ||
| ufFormSubmit( | ||
| $("form[name='register']"), | ||
| {{ validators | raw }}, | ||
| $("#userfrosting-alerts"), | ||
| function(data, statusText, jqXHR) { | ||
| // Forward to login page on success | ||
| window.location.replace(site['uri']['public'] + "/account/login"); | ||
| }, | ||
| function() { | ||
| // Reload captcha | ||
| $("#captcha").captcha(); | ||
| } | ||
| ); | ||
| }); | ||
| // This plugin reloads the captcha in the specified field | ||
| (function( $ ) { | ||
| $.fn.captcha = function() { | ||
| var field = $(this); | ||
| console.log("Reloading captcha"); | ||
| var img_src = site['uri']['public'] + "/account/captcha?" + new Date().getTime(); | ||
| return $.ajax({ | ||
| type: "GET", | ||
| url: img_src, | ||
| dataType: "text" | ||
| }).then(function(data, statusText, jqXHR) { // Pass the deferral back | ||
| field.attr('src', data); | ||
| var target = field.data('target'); | ||
| $(target).val(""); | ||
| return data; | ||
| }); | ||
| }; | ||
| }( jQuery )); | ||
| </script> | ||
| {% endblock %} |
| @@ -0,0 +1,61 @@ | ||
| {% extends "layouts/layout-jumbotron.twig" %} | ||
| {% set page_group = "loggedout" %} | ||
|
|
||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
|
|
||
| {% set page = page | merge({ | ||
| "title" : "Resend Activation", | ||
| "description" : "Resend the activation email for your new UserFrosting account.", | ||
| "active_page" : "" | ||
| }) %} | ||
|
|
||
| {{ parent() }} | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <h1>Account Activation</h1> | ||
| <p class="lead">Please enter your username and the email address you used to sign up, and your activation email will be resent.</p> | ||
| {% include 'components/common/alerts.twig' %} | ||
| <form class='form-horizontal' role='form' name='resend_activation' action='{{site.uri.public}}/account/resend-activation' method='post'> | ||
| <div class="form-group"> | ||
| <label for="input_user_name" class="control-label col-sm-4">Username</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-edit"></i></span> | ||
| <input id="input_user_name" type="text" class="form-control" placeholder="Username" name="user_name"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="form-group"> | ||
| <label for="input_email" class="control-label col-sm-4">Email</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-envelope"></i></span> | ||
| <input id="input_email" type="text" class="form-control" placeholder="The email address you used to register" name="email"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="form-group"> | ||
| <button type="submit" class="btn btn-success submit" value='Resend'>Resend Activation Email</button> | ||
| </div> | ||
| </form> | ||
| {% endblock %} | ||
|
|
||
| {% block page_scripts %} | ||
| <script> | ||
| $(document).ready(function() { | ||
| // Process form | ||
| ufFormSubmit( | ||
| $("form[name='resend_activation']"), | ||
| {{ validators | raw }}, | ||
| $("#userfrosting-alerts"), | ||
| function(data, statusText, jqXHR) { | ||
| // Forward to home page on success | ||
| window.location.replace(site['uri']['public']); | ||
| } | ||
| ); | ||
| }); | ||
| </script> | ||
| {% endblock %} |
| @@ -0,0 +1,68 @@ | ||
| {% extends "layouts/layout-jumbotron.twig" %} | ||
| {% set page_group = "loggedout" %} | ||
|
|
||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
|
|
||
| {% set page = page | merge({ | ||
| "title" : "Choose a New Password", | ||
| "description" : "Reset your UserFrosting password.", | ||
| "active_page" : "" | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <h1>Reset Password</h1> | ||
| <p class="lead"> | ||
| Please enter your new password to continue. | ||
| </p> | ||
| {% include 'components/common/alerts.twig' %} | ||
| <form class="form-horizontal" role="form" name="reset_password" action="{{site.uri.public}}/account/set-password" method="post"> | ||
| <!-- Prevent browsers from trying to autofill the password field. See http://stackoverflow.com/a/23234498/2970321 --> | ||
| <input type="text" style="display:none"> | ||
| <input type="password" style="display:none"> | ||
| <div class="form-group"> | ||
| <label for="input_password" class="control-label col-sm-4">New Password</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-key"></i></span> | ||
| <input id="input_password" type="password" class="form-control" placeholder="8-50 characters" name="password"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="form-group"> | ||
| <label for="input_passwordc" class="control-label col-sm-4">Confirm New Password</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-key"></i></span> | ||
| <input id="input_passwordc" type="password" class="form-control" placeholder="Re-enter your new password" name="passwordc"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="form-group"> | ||
| <input type="hidden" class="form-control" name="secret_token" value="{{secret_token}}"> | ||
| </div> | ||
| <div class="text-center"> | ||
| <button type="submit" class="btn btn-success">Submit New Password</button> | ||
| </div> | ||
| </form> | ||
| {% endblock %} | ||
|
|
||
| {% block page_scripts %} | ||
| <script> | ||
| $(document).ready(function() { | ||
| // Process form | ||
| ufFormSubmit( | ||
| $("form[name='reset_password']"), | ||
| {{ validators | raw }}, | ||
| $("#userfrosting-alerts"), | ||
| function(data, statusText, jqXHR) { | ||
| // Forward to home page on success | ||
| window.location.replace(site['uri']['public']); | ||
| } | ||
| ); | ||
| }); | ||
| </script> | ||
| {% endblock %} |
| @@ -0,0 +1,5 @@ | ||
| <div id="userfrosting-alerts"> | ||
| {% for alert in page.alerts %} | ||
| <div class="alert alert-{{alert.type}}">{{alert.message}}</div> | ||
| {% endfor %} | ||
| </div> |
| @@ -0,0 +1,50 @@ | ||
| <div id='{{box_id}}' class='modal fade' data-width="760"> | ||
| <div class='modal-header'> | ||
| <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button> | ||
| <h4 class='modal-title'>{{box_title}}</h4> | ||
| </div> | ||
| <div class='modal-body'> | ||
| <form name="auth" method="post" action="{{form_action}}"> | ||
| <div id="form-alerts"> | ||
| </div> | ||
| <div class="alert alert-info"> | ||
| {{subtext}} | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="form-group"> | ||
| <label>Hook</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-code"></i></span> | ||
| <input type="text" class="form-control" name="hook" autocomplete="off" value="{{rule.hook}}" placeholder="Hook name, as specified in the code" {% if 'hook' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="form-group"> | ||
| <label>Conditions</label> | ||
| <textarea rows=4 class="form-control" name="conditions" placeholder="See the AccessCondition class for valid condition functions. Conditions can be combined into boolean expressions." {% if 'conditions' in fields.disabled %}disabled{% endif %}>{{rule.conditions}}</textarea> | ||
| </div> | ||
| </div> | ||
| </div><br> | ||
| <div class="row"> | ||
| <div class="col-xs-8 col-sm-4"> | ||
| <div class="vert-pad"> | ||
| <button type="submit" class="btn btn-block btn-lg btn-success">{{submit_button}}</button> | ||
| </div> | ||
| </div> | ||
| <div class="col-xs-4 col-sm-3 pull-right"> | ||
| <div class="vert-pad"> | ||
| <button type="button" class="btn btn-block btn-lg btn-link" data-dismiss="modal">Cancel</button> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </form> | ||
| <script> | ||
| // Load the validator rules for this form | ||
| var validators = {{validators | raw}}; | ||
| </script> | ||
| </div> | ||
| </div> |
| @@ -0,0 +1,16 @@ | ||
| <div id='{{box_id}}' class='modal fade'> | ||
| <div class='modal-header'> | ||
| <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button> | ||
| <h4 class='modal-title'>{{box_title}}</h4> | ||
| </div> | ||
| <div class='modal-body'> | ||
| <div class='dialog-alert'> | ||
| </div> | ||
| <h4>{{confirm_message}}<br><small>This action cannot be undone.</small></h4> | ||
| <br> | ||
| <div class='btn-group-action'> | ||
| <button type='button' class='btn btn-danger btn-lg btn-block js-confirm'>{{confirm_button}}</button> | ||
| <button type='button' class='btn btn-default btn-lg btn-block' data-dismiss='modal'>Cancel</button> | ||
| </div> | ||
| </div> | ||
| </div> |
| @@ -0,0 +1,124 @@ | ||
| <form name="group" method="post" action="{{form_action}}"> | ||
| <div id="form-alerts"> | ||
| </div> | ||
| <div class="row"> | ||
| {% if 'name' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group"> | ||
| <label>Name</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-edit"></i></span> | ||
| <input type="text" class="form-control" name="name" autocomplete="off" value="{{group.name}}" placeholder="Please enter a name for the group" {% if 'name' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'new_user_title' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group"> | ||
| <label>Title for New Users</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-flag"></i></span> | ||
| <input type="text" class="form-control" name="new_user_title" autocomplete="off" value="{{group.new_user_title}}" placeholder="Default title for new primary members" {% if 'new_user_title' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'theme' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group"> | ||
| <label for="input_theme">Theme</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-paint-brush"></i></span> | ||
| <select id="input_theme" class='form-control select2' name="theme" {% if 'theme' in fields.disabled %}disabled{% endif %}> | ||
| {% for option, label in themes %} | ||
| <option value="{{option}}" {% if (option == group.theme) %}selected{% endif %}>{{label}}</option> | ||
| {% endfor %} | ||
| </select> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'icon' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group "> | ||
| <label>Icon</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon icon-preview"><i class="{{group.icon}}"></i></span> | ||
| <input type="text" class="form-control" name="icon" autocomplete="off" value="{{group.icon}}" placeholder="Group icon for primary members" {% if 'icon' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'landing_page' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group "> | ||
| <label>Landing Page</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon">/</span> | ||
| <input type="text" class="form-control" name="landing_page" autocomplete="off" value="{{group.landing_page}}" placeholder="Landing page for primary members" {% if 'landing_page' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'is_default' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group"> | ||
| <label for="input_is_default">Default for new users?</label> | ||
| <div class='btn-group' data-toggle='buttons'> | ||
| <label class='btn btn-primary {% if (group.is_default == '0') %}active{% endif %}' title='Newly registered users will NOT be automatically assigned to this group.'> | ||
| <input class='form-control' type='radio' name='is_default' value='0' {% if (group.is_default == '0') %}checked{% endif %}> Neither | ||
| </label> | ||
| <label class='btn btn-primary {% if (group.is_default == '1') %}active{% endif %}' title='Newly registered users will be automatically assigned to this group.'> | ||
| <input class='form-control' type='radio' name='is_default' value='1' {% if (group.is_default == '1') %}checked{% endif %}> Default | ||
| </label> | ||
|
|
||
| <label class='btn btn-primary {% if (group.is_default == '2') %}active{% endif %}' title='Newly registered users will be automatically assigned to this group, and it will be their primary group.'> | ||
| <input class='form-control' type='radio' name='is_default' value='2' {% if (group.is_default == '2') %}checked{% endif %}> Default Primary | ||
| </label> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| </div><br> | ||
| <div class="row"> | ||
| {% if "submit" not in buttons.hidden %} | ||
| <div class="col-xs-8 col-sm-4"> | ||
| <div class="vert-pad"> | ||
| <button type="submit" class="btn btn-block btn-lg btn-success"> | ||
| {{submit_button}} | ||
| </button> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "edit" not in buttons.hidden %} | ||
| <div class="col-xs-6 col-sm-3"> | ||
| <div class="vert-pad"> | ||
| <button type="button" class="btn btn-block btn-md btn-primary js-group-edit" data-id="{{group.id}}" data-toggle="modal"> | ||
| <i class="fa fa-edit"></i> Edit | ||
| </button> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "delete" not in buttons.hidden %} | ||
| <div class="col-xs-6 col-sm-3"> | ||
| <div class="vert-pad"> | ||
| <button type="button" class="btn btn-block btn-md btn-danger js-group-delete" data-id="{{group.id}}" data-name="{{group.name}}" data-toggle="modal"> | ||
| <i class="fa fa-trash-o"></i> Delete | ||
| </button> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "cancel" not in buttons.hidden %} | ||
| <div class="col-xs-4 col-sm-3 pull-right"> | ||
| <div class="vert-pad"> | ||
| <button type="button" class="btn btn-block btn-lg btn-link" data-dismiss="modal">Cancel</button> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| </div> | ||
| </form> | ||
| <script> | ||
| // Load the validator rules for this form | ||
| var validators = {{validators | raw}}; | ||
| </script> |
| @@ -0,0 +1,9 @@ | ||
| <div id='{{box_id}}' class='modal fade' data-width="760"> | ||
| <div class='modal-header'> | ||
| <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button> | ||
| <h4 class='modal-title'>{{box_title}}</h4> | ||
| </div> | ||
| <div class='modal-body'> | ||
| {% include "components/common/group-info-form.twig" %} | ||
| </div> | ||
| </div> |
| @@ -0,0 +1,99 @@ | ||
| {# This contains a series of <script> blocks, each of which is a client-side Handlebars template. #} | ||
| {% verbatim %} | ||
| <script id="user-table-column-info" type="text/x-handlebars-template"> | ||
| <td data-text="{{user.user_name}}"> | ||
| <strong> | ||
| <a href="{{site.uri.public}}/users/u/{{user.id}}">{{user.user_name}} ({{user.display_name}})</a> | ||
| </strong> | ||
| <div> | ||
| <i>{{user.title}}</i> | ||
| </div> | ||
| <div> | ||
| <i class="fa fa-envelope"></i> <a href="mailto:{{user.email}}">{{user.email}}</a> | ||
| </div> | ||
| </td> | ||
| </script> | ||
|
|
||
| <script id="user-table-column-registered-since" type="text/x-handlebars-template"> | ||
| {{#if user.sign_up_time }} | ||
| <td data-num="{{dateFormat user.sign_up_time format='x'}}"> | ||
| {{dateFormat user.sign_up_time format="dddd"}}<br>{{dateFormat user.sign_up_time format="MMM Do, YYYY h:mm a"}} | ||
| </td> | ||
| {{ else }} | ||
| <td data-num="0"> | ||
| <i>Unknown</i> | ||
| </td> | ||
| {{/if }} | ||
| </script> | ||
|
|
||
| <script id="user-table-column-last-sign-in" type="text/x-handlebars-template"> | ||
| {{#if user.last_sign_in_time }} | ||
| <td data-num="{{dateFormat user.last_sign_in_time format='x'}}"> | ||
| {{dateFormat user.last_sign_in_time format="dddd"}}<br>{{dateFormat user.last_sign_in_time format="MMM Do, YYYY h:mm a"}} | ||
| </td> | ||
| {{ else }} | ||
| <td data-num="0"> | ||
| <i>Brand new!</i> | ||
| </td> | ||
| {{/if }} | ||
| </script> | ||
|
|
||
| <script id="user-table-column-actions" type="text/x-handlebars-template"> | ||
| <td> | ||
| <div class="btn-group"> | ||
| {{#ifCond user.flag_enabled 0 }} | ||
| <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> | ||
| Disabled | ||
| <span class="caret"></span> | ||
| </button> | ||
| {{ else }} | ||
| {{#ifCond user.flag_verified 0 }} | ||
| <button type="button" class="btn btn-warning dropdown-toggle" data-toggle="dropdown"> | ||
| Unactivated | ||
| <span class="caret"></span> | ||
| </button> | ||
| {{ else }} | ||
| <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> | ||
| Active | ||
| <span class="caret"></span> | ||
| </button> | ||
| {{/ifCond }} | ||
| {{/ifCond }} | ||
| <ul class="dropdown-menu" role="menu"> | ||
| {{#ifCond user.flag_verified 0 }} | ||
| <li> | ||
| <a href="#" data-id="{{user.id}}" class="js-user-activate"> | ||
| <i class="fa fa-bolt"></i> Activate user | ||
| </a> | ||
| </li> | ||
| {{/ifCond }} | ||
| <li> | ||
| <a href="#" data-id="{{user.id}}" class="js-user-edit" data-target="#dialog-user-edit" data-toggle="modal"> | ||
| <i class="fa fa-edit"></i> Edit user | ||
| </a> | ||
| </li> | ||
| <li> | ||
| <a href="#" data-id="{{user.id}}" class="js-user-password" data-target="#dialog-user-password" data-toggle="modal"> | ||
| <i class="fa fa-key"></i> Change password | ||
| </a> | ||
| </li> | ||
| <li> | ||
| {{#ifCond user.flag_enabled 1 }} | ||
| <a href="#" data-id="{{user.id}}" class="js-user-disable"> | ||
| <i class="fa fa-minus-circle"></i> Disable user | ||
| </a> | ||
| {{ else }} | ||
| <a href="#" data-id="{{user.id}}" class="js-user-enable"> | ||
| <i class="fa fa-plus-circle"></i> Enable user | ||
| </a> | ||
| {{/ifCond }} | ||
| </li> | ||
| <li> | ||
| <a href="#" data-id="{{user.id}}" class="js-user-delete" data-user_name="{{user.user_name}}" data-target="#dialog-user-delete" data-toggle="modal"> | ||
| <i class="fa fa-trash-o"></i> Delete user</a> | ||
| </li> | ||
| </ul> | ||
| </div> | ||
| </td> | ||
| </script> | ||
| {% endverbatim %} |
| @@ -0,0 +1,15 @@ | ||
| <div id="{{pager_id}}" class="pager pager-lg tablesorter-pager"> | ||
| <span class='pager-control first' title='First page'><i class='fa fa-angle-double-left'></i></span> | ||
| <span class='pager-control prev' title='Previous page'><i class='fa fa-angle-left'></i></span> | ||
| <span class='pagedisplay'></span> <!-- this can be any element, including an input --> | ||
| <span class='pager-control next' title='Next page'><i class='fa fa-angle-right'></i></span> | ||
| <span class='pager-control last' title= 'Last page'><i class='fa fa-angle-double-right'></i></span> | ||
| <br><br> | ||
| Jump to Page: <select class='gotoPage'></select> | ||
| • Show: <select class='pagesize'> | ||
| <option value='2'>2</option> | ||
| <option value='5'>5</option> | ||
| <option value='10'>10</option> | ||
| <option value='100'>100</option> | ||
| </select> | ||
| </div> |
| @@ -0,0 +1,133 @@ | ||
| <!-- Generated by http://www.bennadel.com/coldfusion/privacy-policy-generator.htm --> | ||
| <h2> | ||
| Web Site Terms and Conditions of Use | ||
| </h2> | ||
|
|
||
| <h3> | ||
| 1. Terms | ||
| </h3> | ||
|
|
||
| <p> | ||
| By accessing this web site, you are agreeing to be bound by these | ||
| web site Terms and Conditions of Use, all applicable laws and regulations, | ||
| and agree that you are responsible for compliance with any applicable local | ||
| laws. If you do not agree with any of these terms, you are prohibited from | ||
| using or accessing this site. The materials contained in this web site are | ||
| protected by applicable copyright and trade mark law. | ||
| </p> | ||
|
|
||
| <h3> | ||
| 2. Use License | ||
| </h3> | ||
|
|
||
| <ol type="a"> | ||
| <li> | ||
| Permission is granted to temporarily download one copy of the materials | ||
| (information or software) on {{site.site_title}}'s web site for personal, | ||
| non-commercial transitory viewing only. This is the grant of a license, | ||
| not a transfer of title, and under this license you may not: | ||
|
|
||
| <ol type="i"> | ||
| <li>modify or copy the materials;</li> | ||
| <li>use the materials for any commercial purpose, or for any public display (commercial or non-commercial);</li> | ||
| <li>attempt to decompile or reverse engineer any software contained on {{site.site_title}}'s web site;</li> | ||
| <li>remove any copyright or other proprietary notations from the materials; or</li> | ||
| <li>transfer the materials to another person or "mirror" the materials on any other server.</li> | ||
| </ol> | ||
| </li> | ||
| <li> | ||
| This license shall automatically terminate if you violate any of these restrictions and may be terminated by {{site.site_title}} at any time. Upon terminating your viewing of these materials or upon the termination of this license, you must destroy any downloaded materials in your possession whether in electronic or printed format. | ||
| </li> | ||
| </ol> | ||
|
|
||
| <h3> | ||
| 3. Disclaimer | ||
| </h3> | ||
|
|
||
| <ol type="a"> | ||
| <li> | ||
| The materials on {{site.site_title}}'s web site are provided "as is". {{site.site_title}} makes no warranties, expressed or implied, and hereby disclaims and negates all other warranties, including without limitation, implied warranties or conditions of merchantability, fitness for a particular purpose, or non-infringement of intellectual property or other violation of rights. Further, {{site.site_title}} does not warrant or make any representations concerning the accuracy, likely results, or reliability of the use of the materials on its Internet web site or otherwise relating to such materials or on any sites linked to this site. | ||
| </li> | ||
| </ol> | ||
|
|
||
| <h3> | ||
| 4. Limitations | ||
| </h3> | ||
|
|
||
| <p> | ||
| In no event shall {{site.site_title}} or its suppliers be liable for any damages (including, without limitation, damages for loss of data or profit, or due to business interruption,) arising out of the use or inability to use the materials on {{site.site_title}}'s Internet site, even if {{site.site_title}} or a {{site.site_title}} authorized representative has been notified orally or in writing of the possibility of such damage. Because some jurisdictions do not allow limitations on implied warranties, or limitations of liability for consequential or incidental damages, these limitations may not apply to you. | ||
| </p> | ||
|
|
||
| <h3> | ||
| 5. Revisions and Errata | ||
| </h3> | ||
|
|
||
| <p> | ||
| The materials appearing on {{site.site_title}}'s web site could include technical, typographical, or photographic errors. {{site.site_title}} does not warrant that any of the materials on its web site are accurate, complete, or current. {{site.site_title}} may make changes to the materials contained on its web site at any time without notice. {{site.site_title}} does not, however, make any commitment to update the materials. | ||
| </p> | ||
|
|
||
| <h3> | ||
| 6. Links | ||
| </h3> | ||
|
|
||
| <p> | ||
| {{site.site_title}} has not reviewed all of the sites linked to its Internet web site and is not responsible for the contents of any such linked site. The inclusion of any link does not imply endorsement by {{site.site_title}} of the site. Use of any such linked web site is at the user's own risk. | ||
| </p> | ||
|
|
||
| <h3> | ||
| 7. Site Terms of Use Modifications | ||
| </h3> | ||
|
|
||
| <p> | ||
| {{site.site_title}} may revise these terms of use for its web site at any time without notice. By using this web site you are agreeing to be bound by the then current version of these Terms and Conditions of Use. | ||
| </p> | ||
|
|
||
| <h3> | ||
| 8. Governing Law | ||
| </h3> | ||
|
|
||
| <p> | ||
| Any claim relating to {{site.site_title}}'s web site shall be governed by the laws of {{site.site_location}} without regard to its conflict of law provisions. | ||
| </p> | ||
|
|
||
| <p> | ||
| General Terms and Conditions applicable to Use of a Web Site. | ||
| </p> | ||
|
|
||
|
|
||
|
|
||
| <h2> | ||
| Privacy Policy | ||
| </h2> | ||
|
|
||
| <p> | ||
| Your privacy is very important to us. Accordingly, we have developed this Policy in order for you to understand how we collect, use, communicate and disclose and make use of personal information. The following outlines our privacy policy. | ||
| </p> | ||
|
|
||
| <ul> | ||
| <li> | ||
| Before or at the time of collecting personal information, we will identify the purposes for which information is being collected. | ||
| </li> | ||
| <li> | ||
| We will collect and use of personal information solely with the objective of fulfilling those purposes specified by us and for other compatible purposes, unless we obtain the consent of the individual concerned or as required by law. | ||
| </li> | ||
| <li> | ||
| We will only retain personal information as long as necessary for the fulfillment of those purposes. | ||
| </li> | ||
| <li> | ||
| We will collect personal information by lawful and fair means and, where appropriate, with the knowledge or consent of the individual concerned. | ||
| </li> | ||
| <li> | ||
| Personal data should be relevant to the purposes for which it is to be used, and, to the extent necessary for those purposes, should be accurate, complete, and up-to-date. | ||
| </li> | ||
| <li> | ||
| We will protect personal information by reasonable security safeguards against loss or theft, as well as unauthorized access, disclosure, copying, use or modification. | ||
| </li> | ||
| <li> | ||
| We will make readily available to customers information about our policies and practices relating to the management of personal information. | ||
| </li> | ||
| </ul> | ||
|
|
||
| <p> | ||
| We are committed to conducting our business in accordance with these principles in order to ensure that the confidentiality of personal information is protected and maintained. | ||
| </p> |
| @@ -0,0 +1,169 @@ | ||
| <form name="user" method="post" action="{{form_action}}"> | ||
| <div id="{{alerts_id | default('form-alerts')}}"> | ||
| </div> | ||
| <div class="row"> | ||
| {% if 'user_name' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group"> | ||
| <label>Username</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-edit"></i></span> | ||
| <input type="text" class="form-control" name="user_name" autocomplete="off" value="{{target_user.user_name}}" placeholder="Please enter the user name" {% if 'user_name' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'display_name' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group "> | ||
| <label>Display Name</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-edit"></i></span> | ||
| <input type="text" class="form-control" name="display_name" autocomplete="off" value="{{target_user.display_name}}" placeholder="Please enter the display name" {% if 'display_name' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'email' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group "> | ||
| <label>Email</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><a href="mailto: {{target_user.email}}"><i class="fa fa-envelope"></i></a></span> | ||
| <input type="text" class="form-control" name="email" autocomplete="off" value="{{target_user.email}}" placeholder="Email goes here" {% if 'email' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'title' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group "> | ||
| <label>Title</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-edit"></i></span> | ||
| <input type="text" class="form-control" name="title" autocomplete="off" value="{{target_user.title}}" placeholder="" {% if 'title' in fields.disabled %}disabled{% endif %}> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group "> | ||
| <label>Last Sign-in</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-calendar"></i></span> | ||
| <input type="text" class="form-control" name="last_sign_in_time" autocomplete="off" value="{% if target_user.last_sign_in_time %}{{target_user.last_sign_in_time | date('M j, Y g:i a')}}{% else %}Brand new!{% endif %}" disabled> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="col-sm-6"> | ||
| <div class="form-group "> | ||
| <label>Registered Since</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-calendar"></i></span> | ||
| <input type="text" class="form-control" name="sign_up_time" autocomplete="off" value="{% if target_user.sign_up_time %}{{target_user.sign_up_time | date('M j, Y g:i a')}}{% else %}Unknown{% endif %}" disabled> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% if 'locale' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <div class="form-group"> | ||
| <label for="input_locale">Locale</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-language"></i></span> | ||
| <select id="input_locale" class='form-control select2' name="locale" {% if 'locale' in fields.disabled %}disabled{% endif %}> | ||
| {% for option, label in locales %} | ||
| <option value="{{option}}" {% if (option == target_user.locale) %}selected{% endif %}>{{label}}</option> | ||
| {% endfor %} | ||
| </select> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if 'groups' not in fields.hidden %} | ||
| <div class="col-sm-6"> | ||
| <h5>Groups</h5> | ||
| <ul class="list-group permission-summary-rows"> | ||
| {% for group in groups %} | ||
| <li class="list-group-item"> | ||
| {{group.name}} | ||
| <span class="pull-right"> | ||
| <input type="checkbox" name="groups[{{group.id}}]" class="form-control bootstrapswitch" data-id="{{group.id}}" {% if group.member %}checked{% endif %} {% if 'groups' in fields.disabled %}disabled{% endif %}> | ||
| {% if 'primary_group_id' not in fields.hidden %} | ||
| <button type="button" class="bootstrapradio btn btn-xs" name="primary_group_id" value="{{group.id}}" title="Set as primary group" data-selected="{% if group.id == target_user.primary_group_id %}true{% else %}false{% endif %}" {% if not group.member or 'primary_group_id' in fields.disabled %}disabled{% endif %}> | ||
| <i class="fa fa-home"></i> | ||
| </button> | ||
| {% endif %} | ||
| </span> | ||
| </li> | ||
| {% endfor %} | ||
| </ul> | ||
| </div> | ||
| {% endif %} | ||
| </div><br> | ||
| <div class="row"> | ||
| {% if "submit" not in buttons.hidden %} | ||
| <div class="col-xs-8 col-sm-4"> | ||
| <div class="vert-pad"> | ||
| <button type="submit" class="btn btn-block btn-lg btn-success"> | ||
| {{submit_button}} | ||
| </button> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "edit" not in buttons.hidden %} | ||
| <div class="col-xs-6 col-sm-3"> | ||
| <div class="vert-pad"> | ||
| <button type="button" class="btn btn-block btn-md btn-primary js-user-edit" data-id="{{target_user.id}}" data-toggle="modal"> | ||
| <i class="fa fa-edit"></i> Edit | ||
| </button> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "activate" not in buttons.hidden %} | ||
| <div class="col-xs-6 col-sm-3"> | ||
| <div class="vert-pad"> | ||
| {% if target_user.flag_verified == "0" %} | ||
| <button type="button" class="btn btn-block btn-md btn-warning js-user-activate" data-id="{{target_user.id}}"> | ||
| <i class="fa fa-bolt"></i> Activate | ||
| </button> | ||
| {% endif %} | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "enable" not in buttons.hidden %} | ||
| <div class="col-xs-6 col-sm-3"> | ||
| <div class="vert-pad"> | ||
| {% if target_user.flag_enabled == "1" %} | ||
| <button type="button" class="btn btn-block btn-md btn-warning js-user-disable" data-id="{{target_user.id}}"> | ||
| <i class="fa fa-minus-circle"></i> Disable | ||
| </button> | ||
| {% else %} | ||
| <button type="button" class="btn btn-block btn-md btn-warning js-user-enable" data-id="{{target_user.id}}"> | ||
| <i class="fa fa-plus-circle"></i> Enable | ||
| </button> | ||
| {% endif %} | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "delete" not in buttons.hidden %} | ||
| <div class="col-xs-6 col-sm-3"> | ||
| <div class="vert-pad"> | ||
| <button type="button" class="btn btn-block btn-md btn-danger js-user-delete" data-id="{{target_user.id}}" data-user_name="{{target_user.user_name}}" data-toggle="modal"> | ||
| <i class="fa fa-trash-o"></i> Delete | ||
| </button> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| {% if "cancel" not in buttons.hidden %} | ||
| <div class="col-xs-4 col-sm-3 pull-right"> | ||
| <div class="vert-pad"> | ||
| <button type="button" class="btn btn-block btn-lg btn-link" data-dismiss="modal">Cancel</button> | ||
| </div> | ||
| </div> | ||
| {% endif %} | ||
| </div> | ||
| </form> | ||
| <script> | ||
| // Load the validator rules for this form | ||
| var validators = {{validators | raw}}; | ||
| </script> |
| @@ -0,0 +1,9 @@ | ||
| <div id='{{box_id}}' class='modal fade' data-width="760"> | ||
| <div class='modal-header'> | ||
| <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button> | ||
| <h4 class='modal-title'>{{box_title}}</h4> | ||
| </div> | ||
| <div class='modal-body'> | ||
| {% include "components/common/user-info-form.twig" %} | ||
| </div> | ||
| </div> |
| @@ -0,0 +1,9 @@ | ||
| <div id='{{box_id}}' class='panel panel-primary'> | ||
| <div class='panel-heading'> | ||
| <h2 class='panel-title pull-left'>{{box_title}}</h2> | ||
| <div class='clearfix'></div> | ||
| </div> | ||
| <div class='panel-body'> | ||
| {% include "components/common/user-info-form.twig" %} | ||
| </div> | ||
| </div> |
| @@ -0,0 +1,71 @@ | ||
| <div id='{{box_id}}' class='modal fade' data-width="760"> | ||
| <div class='modal-header'> | ||
| <button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button> | ||
| <h4 class='modal-title'>{{box_title}}</h4> | ||
| </div> | ||
| <div class='modal-body'> | ||
| <form name="user_password" method="post" action="{{form_action}}"> | ||
| <!-- Prevent browsers from trying to autofill the password field. See http://stackoverflow.com/a/23234498/2970321 --> | ||
| <input type="text" style="display:none"> | ||
| <input type="password" style="display:none"> | ||
| <div id="form-alerts"> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <div class="radio"> | ||
| <label> | ||
| <input type="radio" name="change_password_mode" id="change_password_mode_link" value="link" checked> | ||
| <input type="hidden" name="flag_password_reset" value="1"> | ||
| Send the user a link that will allow them to choose their own password | ||
| </label> | ||
| </div> | ||
| </div> | ||
| <div class="col-sm-12"> | ||
| <div class="radio"> | ||
| <label> | ||
| <input type="radio" name="change_password_mode" id="change_password_mode_manual" value="manual"> | ||
| Set the user's password as: | ||
| </label> | ||
| </div> | ||
| <div class="row controls-password"> | ||
| <div class="col-sm-11 col-sm-offset-1"> | ||
| <div class="form-group"> | ||
| <label>Password</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-key"></i></span> | ||
| <input type="password" class="form-control" name="password" autocomplete="off" value="" placeholder="8-50 characters"> | ||
| </div> | ||
| </div> | ||
| <div class="form-group"> | ||
| <label>Confirm password</label> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-key"></i></span> | ||
| <input type="password" class="form-control" name="passwordc" autocomplete="off" value="" placeholder="Confirm password"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div><br> | ||
| <div class="row"> | ||
| <div class="col-xs-8 col-sm-4"> | ||
| <div class="vert-pad"> | ||
| <button type="submit" class="btn btn-block btn-lg btn-success"> | ||
| Submit | ||
| </button> | ||
| </div> | ||
| </div> | ||
| <div class="col-xs-4 col-sm-3 pull-right"> | ||
| <div class="vert-pad"> | ||
| <button type="button" class="btn btn-block btn-lg btn-link" data-dismiss="modal">Cancel</button> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </form> | ||
| </div> | ||
| </div> | ||
|
|
||
| <script> | ||
| // Load the validator rules for this form | ||
| var validators = {{validators | raw}}; | ||
| </script> |
| @@ -0,0 +1,53 @@ | ||
| <div class="sidebar-nav navbar-collapse"> | ||
| <ul class="nav" id="side-menu"> | ||
| <li class="sidebar-search"> | ||
| <div class="input-group custom-search-form"> | ||
| <input type="text" class="form-control" placeholder="Search..."> | ||
| <span class="input-group-btn"> | ||
| <button class="btn btn-default" type="button"> | ||
| <i class="fa fa-search"></i> | ||
| </button> | ||
| </span> | ||
| </div> | ||
| <!-- /input-group --> | ||
| </li> | ||
| <li> | ||
| <a href="{{site.uri.public}}/dashboard"><i class="fa fa-dashboard fa-fw"></i> Dashboard</a> | ||
| </li> | ||
|
|
||
| {% if checkAccess('uri_zerg') %} | ||
| <li> | ||
| <a href="{{site.uri.public}}/zerg"><i class="sc sc-zerg fa fa-fw"></i> Zerg</a> | ||
| </li> | ||
| {% endif %} | ||
| {% if checkAccess('uri_users') %} | ||
| <li> | ||
| <a href="{{site.uri.public}}/users"><i class="fa fa-users fa-fw"></i> {{ translate("MENU_USERS") }}</a> | ||
| </li> | ||
| {% endif %} | ||
| {% if checkAccess('uri_group_users', { ('primary_group_id') : 4 }) %} | ||
| <li> | ||
| <a href="{{site.uri.public}}/users/zerglings"><i class="sc sc-zergling fa-fw"></i> Zerglings</a> | ||
| </li> | ||
| {% endif %} | ||
| {% if checkAccess('uri_site_settings') or checkAccess('uri_manage_groups') %} | ||
| <li> | ||
| <a href="#"><i class="fa fa-wrench fa-fw"></i> {{ translate("MENU_CONFIGURATION") }}<span class="fa arrow"></span></a> | ||
| <ul class="nav nav-second-level"> | ||
| {% if checkAccess('uri_site_settings') %} | ||
| <li> | ||
| <a href="{{site.uri.public}}/config/settings"><i class="fa fa-globe fa-fw"></i> {{ translate("MENU_SITE_SETTINGS") }}</a> | ||
| </li> | ||
| {% endif %} | ||
| {% if checkAccess('uri_manage_groups') %} | ||
| <li> | ||
| <a href="{{site.uri.public}}/groups"><i class="fa fa-tags fa-fw"></i> {{ translate("MENU_GROUPS") }}</a> | ||
| </li> | ||
| {% endif %} | ||
| </ul> | ||
| <!-- /.nav-second-level --> | ||
| </li> | ||
| {% endif %} | ||
| </ul> | ||
| </div> | ||
| <!-- /.sidebar-collapse --> |
| @@ -0,0 +1,207 @@ | ||
| <ul class="nav navbar-top-links navbar-right"> | ||
| <li class="dropdown"> | ||
| <a class="dropdown-toggle" data-toggle="dropdown" href="#"> | ||
| <i class="fa fa-envelope fa-fw"></i> <i class="fa fa-caret-down"></i> | ||
| </a> | ||
| <ul class="dropdown-menu dropdown-messages"> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <strong>John Smith</strong> | ||
| <span class="pull-right text-muted"> | ||
| <em>Yesterday</em> | ||
| </span> | ||
| </div> | ||
| <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eleifend...</div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <strong>John Smith</strong> | ||
| <span class="pull-right text-muted"> | ||
| <em>Yesterday</em> | ||
| </span> | ||
| </div> | ||
| <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eleifend...</div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <strong>John Smith</strong> | ||
| <span class="pull-right text-muted"> | ||
| <em>Yesterday</em> | ||
| </span> | ||
| </div> | ||
| <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eleifend...</div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a class="text-center" href="#"> | ||
| <strong>Read All Messages</strong> | ||
| <i class="fa fa-angle-right"></i> | ||
| </a> | ||
| </li> | ||
| </ul> | ||
| <!-- /.dropdown-messages --> | ||
| </li> | ||
| <!-- /.dropdown --> | ||
| <li class="dropdown"> | ||
| <a class="dropdown-toggle" data-toggle="dropdown" href="#"> | ||
| <i class="fa fa-tasks fa-fw"></i> <i class="fa fa-caret-down"></i> | ||
| </a> | ||
| <ul class="dropdown-menu dropdown-tasks"> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <p> | ||
| <strong>Task 1</strong> | ||
| <span class="pull-right text-muted">40% Complete</span> | ||
| </p> | ||
| <div class="progress progress-striped active"> | ||
| <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%"> | ||
| <span class="sr-only">40% Complete (success)</span> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <p> | ||
| <strong>Task 2</strong> | ||
| <span class="pull-right text-muted">20% Complete</span> | ||
| </p> | ||
| <div class="progress progress-striped active"> | ||
| <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%"> | ||
| <span class="sr-only">20% Complete</span> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <p> | ||
| <strong>Task 3</strong> | ||
| <span class="pull-right text-muted">60% Complete</span> | ||
| </p> | ||
| <div class="progress progress-striped active"> | ||
| <div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%"> | ||
| <span class="sr-only">60% Complete (warning)</span> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <p> | ||
| <strong>Task 4</strong> | ||
| <span class="pull-right text-muted">80% Complete</span> | ||
| </p> | ||
| <div class="progress progress-striped active"> | ||
| <div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"> | ||
| <span class="sr-only">80% Complete (danger)</span> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a class="text-center" href="#"> | ||
| <strong>See All Tasks</strong> | ||
| <i class="fa fa-angle-right"></i> | ||
| </a> | ||
| </li> | ||
| </ul> | ||
| <!-- /.dropdown-tasks --> | ||
| </li> | ||
| <!-- /.dropdown --> | ||
| <li class="dropdown"> | ||
| <a class="dropdown-toggle" data-toggle="dropdown" href="#"> | ||
| <i class="fa fa-bell fa-fw"></i> <i class="fa fa-caret-down"></i> | ||
| </a> | ||
| <ul class="dropdown-menu dropdown-alerts"> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <i class="fa fa-comment fa-fw"></i> New Comment | ||
| <span class="pull-right text-muted small">4 minutes ago</span> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <i class="fa fa-twitter fa-fw"></i> 3 New Followers | ||
| <span class="pull-right text-muted small">12 minutes ago</span> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <i class="fa fa-envelope fa-fw"></i> Message Sent | ||
| <span class="pull-right text-muted small">4 minutes ago</span> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <i class="fa fa-tasks fa-fw"></i> New Task | ||
| <span class="pull-right text-muted small">4 minutes ago</span> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a href="#"> | ||
| <div> | ||
| <i class="fa fa-upload fa-fw"></i> Server Rebooted | ||
| <span class="pull-right text-muted small">4 minutes ago</span> | ||
| </div> | ||
| </a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li> | ||
| <a class="text-center" href="#"> | ||
| <strong>See All Alerts</strong> | ||
| <i class="fa fa-angle-right"></i> | ||
| </a> | ||
| </li> | ||
| </ul> | ||
| <!-- /.dropdown-alerts --> | ||
| </li> | ||
| <!-- /.dropdown --> | ||
| <li class="dropdown"> | ||
| <a class="dropdown-toggle" data-toggle="dropdown" href="#"> | ||
| <i class="{{user.icon}} fa-fw"></i> {{user.user_name}} <i class="fa fa-caret-down"></i> | ||
| </a> | ||
| <ul class="dropdown-menu dropdown-user"> | ||
| <li><a href="{{site.uri.public}}/account/settings"><i class="fa fa-gear fa-fw"></i> Settings</a> | ||
| </li> | ||
| <li class="divider"></li> | ||
| <li><a href="{{site.uri.public}}/account/logout"><i class="fa fa-sign-out fa-fw"></i> Logout</a> | ||
| </li> | ||
| </ul> | ||
| <!-- /.dropdown-user --> | ||
| </li> | ||
| <!-- /.dropdown --> | ||
| </ul> | ||
| <!-- /.navbar-top-links --> |
| @@ -0,0 +1,21 @@ | ||
| <!-- Navigation --> | ||
| <nav class="navbar navbar-default navbar-userfrosting navbar-fixed-top" role="navigation" style="margin-bottom: 0"> | ||
| <div class="navbar-header"> | ||
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | ||
| <span class="sr-only">Toggle navigation</span> | ||
| <span class="icon-bar"></span> | ||
| <span class="icon-bar"></span> | ||
| <span class="icon-bar"></span> | ||
| </button> | ||
| <a class="navbar-brand" href="{{site.uri.public}}">{{site.site_title}}</a> | ||
| </div> | ||
| <!-- /.navbar-header --> | ||
|
|
||
| {% include 'components/dashboard/menus/topbar.twig' %} | ||
| <div class="sidebar-wrapper"> | ||
| <div class="navbar-default navbar-userfrosting sidebar" role="navigation"> | ||
| {% include 'components/dashboard/menus/sidebar.twig' %} | ||
| </div> | ||
| <!-- /.navbar-static-side --> | ||
| </div> | ||
| </nav> |
| @@ -0,0 +1,20 @@ | ||
| {% set can_register = site.can_register|default(false) %} | ||
| <div class="jumbotron-links"> | ||
| {% if can_register %} | ||
| <div class='row'> | ||
| <div class='col-md-12'> | ||
| <a href='{{site.uri.public}}/account/register' class='btn btn-link' role='button' value='Register'>Not a member yet? Register here.</a> | ||
| </div> | ||
| </div> | ||
| {% endif%} | ||
| <div class='row'> | ||
| <div class='col-md-12'> | ||
| <a href='{{site.uri.public}}/account/forgot-password' class='btn btn-link' role='button' value='Forgot Password'>Forgot your password?</a> | ||
| </div> | ||
| </div> | ||
| <div class='row'> | ||
| <div class='col-md-12'> | ||
| <a href='{{site.uri.public}}/account/resend-activation' class='btn btn-link' role='button' value='Activate'>Resend activation email</a> | ||
| </div> | ||
| </div> | ||
| </div> |
| @@ -0,0 +1,18 @@ | ||
| {% set navigation_bar = [['', 'Home'], ['account/login', 'Login']] %} | ||
| {% set can_register = site.can_register|default(false) %} | ||
| {% if can_register %} | ||
| {% set navigation_bar = navigation_bar|merge([['account/register', 'Register']]) %} | ||
| {% endif%} | ||
| {% set active_page = page.active_page|default('') %} | ||
| {% block navigation %} | ||
| <div class="header"> | ||
| <ul class="nav navbar-nav nav-pills pull-right" id="navigation"> | ||
| {% for item in navigation_bar %} | ||
| <li{% if item[0] == active_page %} class="active"{% endif%}> | ||
| <a role="menuitem" href="{{site.uri.public}}/{{item[0]}}">{{item[1]}}</a> | ||
| </li> | ||
| {% endfor %} | ||
| </ul> | ||
| <h3 class="text-muted">{{site.site_title}}</h3> | ||
| </div> | ||
| {% endblock %} |
| @@ -0,0 +1,74 @@ | ||
| {% extends "layouts/layout-dashboard.twig" %} | ||
| {% set page_group = "auth" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Authorization | " ~ group.name, | ||
| "description" : "Authorization and access control settings for " ~ group.name ~ "." | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <h1>Authorization rules for group '{{group.name}}'</h1> | ||
| <div class="table-responsive"> | ||
| <table id="table-auth" class="tablesorter table table-bordered table-hover table-striped" data-sortlist="[[0, 0]]"> | ||
| <thead> | ||
| <tr> | ||
| <th class="sorter-metatext">Hook <i class="fa fa-sort"></i></th> | ||
| <th class="sorter-metanum">Conditions <i class="fa fa-sort"></i></th> | ||
| <th class="sorter-metanum"> <i class="fa fa-sort"></i></th> | ||
| </tr> | ||
| </thead> | ||
| <tbody> | ||
| {% for rule in rules %} | ||
| <tr> | ||
| <td data-text="{{rule.hook}}"> | ||
| {{rule.hook}} | ||
| </td> | ||
| <td data-text="{{rule.conditions}}"> | ||
| {{rule.conditions}} | ||
| </td> | ||
| <td> | ||
| <div class="btn-group"> | ||
| <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> | ||
| Actions | ||
| <span class="caret"></span> | ||
| </button> | ||
| <ul class="dropdown-menu" role="menu"> | ||
| <li> | ||
| <a href="#" data-id="{{rule.id}}" class="js-auth-edit" data-target="#dialog-auth-edit" data-toggle="modal"> | ||
| <i class="fa fa-edit"></i> Edit rule | ||
| </a> | ||
| </li> | ||
| <li> | ||
| <a href="#" data-id="{{rule.id}}" class="js-auth-delete" data-owner="{{group.name}}" data-hook="{{rule.hook}}" data-target="#dialog-auth-delete" data-toggle="modal"> | ||
| <i class="fa fa-trash-o"></i> Delete rule</a> | ||
| </li> | ||
| </ul> | ||
| </div> | ||
| </td> | ||
| </tr> | ||
| {% endfor %} | ||
| </tbody> | ||
| </table> | ||
| {% include 'components/common/table-tablesorter-default.twig' with {'pager_id' : 'table-auth-pager'} %} | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-md-6 "> | ||
| <button type="button" class="btn btn-success js-auth-create" data-toggle="modal" data-id="{{group.id}}" data-target="#dialog-auth-create"> | ||
| <i class="fa fa-plus-square"></i> Create New Rule | ||
| </button> | ||
| </div> | ||
| </div> | ||
| {% endblock %} | ||
| {% block page_scripts %} | ||
| <script> | ||
| $(document).ready(function() { | ||
| ufTable('table-auth'); | ||
| }); | ||
| </script> | ||
| {% endblock %} |
| @@ -0,0 +1,142 @@ | ||
| {% extends "layouts/layout-dashboard.twig" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Site Settings", | ||
| "description" : "Global settings for the site, including registration and activation settings, site title, admin emails, and default languages." | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
| {% block content %} | ||
| <div class="row"> | ||
| <div class="col-md-8"> | ||
| <div class='panel panel-primary'> | ||
| <div class='panel-heading'> | ||
| <h3 class='panel-title'><i class='fa fa-globe'></i> Site Settings</h3> | ||
| </div> | ||
| <div class='panel-body'> | ||
| <div id="settings-alerts"> | ||
| <div class='alert alert-success'>All settings have been saved</div> | ||
| </div> | ||
| <form class='form-horizontal' role='form' name='settings' action='{{site.uri.public}}/config/settings' method='post'> | ||
| {% for plugin_name, plugin in settings %} | ||
| {% for name, setting in plugin %} | ||
| <div class="form-group"> | ||
| <label for="input_{{name}}" class="col-xs-4 col-sm-3 col-lg-2 control-label">{{setting.label}}</label> | ||
| <div class="col-xs-8 col-sm-9 col-lg-10"> | ||
| {% if (setting.type == 'text') %} | ||
| <input type='text' id="input_{{name}}" class="form-control" name="{{plugin_name}}[{{name}}]" value='{{setting.value}}'> | ||
| {% elseif (setting.type == 'select') %} | ||
| <select id="input_{{name}}" class='form-control select2' name="{{plugin_name}}[{{name}}]"> | ||
| {% for option, label in setting.options %} | ||
| <option value="{{option}}" {% if (option == setting.value) %}selected{% endif %}>{{label}}</option> | ||
| {% endfor %} | ||
| </select> | ||
| {% elseif (setting.type == 'toggle') %} | ||
| <input type='checkbox' id="input_{{name}}" class="form-control bootstrapswitch" name="{{plugin_name}}[{{name}}]" value="{{setting.value}}" data-off-text="{{setting.options[0]}}" data-on-text="{{setting.options[1]}}" {% if (setting.value == 1) %}checked{% endif %}> | ||
| {% elseif (setting.type == 'readonly') %} | ||
| <input type='input' id="input_{{name}}" class="form-control bootstrap-switch" name="{{plugin_name}}[{{name}}]" value='{{setting.value}}' disabled"> | ||
| {% endif %} | ||
| <p class="help-block">{{setting.description}}</p> | ||
| </div> | ||
| </div> | ||
| {% endfor %} | ||
| {% endfor %} | ||
| </form> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="col-md-4"> | ||
| <div class='panel panel-primary'> | ||
| <div class='panel-heading'> | ||
| <h3 class='panel-title'><i class='fa fa-server'></i> System Information</h3> | ||
| </div> | ||
| <div class='panel-body'> | ||
| {% for name, value in info %} | ||
| <p class="h6">{{name}}</p> | ||
| <pre><code>{{value}}</code></pre> | ||
| {% endfor %} | ||
| </div> | ||
| <div class="panel-footer"> | ||
| <a class="btn btn-link" href="{{site.uri.public}}/phpinfo">View phpinfo</a> | ||
| <a class="btn btn-link" href="{{site.uri.public}}/sliminfo">View Slim Info</a> | ||
| </div> | ||
| </div> | ||
| <div class='panel panel-primary'> | ||
| <div class='panel-heading'> | ||
| <h3 class='panel-title'><i class='fa fa-wrench'></i> Admin Tools</h3> | ||
| </div> | ||
| <div class='panel-body'> | ||
| <p> | ||
| Rebuild minified CSS and JS: <a class="btn btn-primary" href="{{site.uri.public}}/config/build">Rebuild</a> | ||
| </p> | ||
| <p class="help-block">This may take some time, please be patient and wait for the page to refresh.</p> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-md-12"> | ||
| <div class='panel panel-primary'> | ||
| <div class='panel-heading'> | ||
| <h3 class='panel-title'><i class='fa fa-warning'></i> Error Log</h3> | ||
| </div> | ||
| <div class='panel-body'> | ||
| <div class="well well-sm"><strong>{{error_log.path}}</strong></div> | ||
| {% for msg in error_log.messages %} | ||
| <code>{{msg}}</code><br> | ||
| {% endfor %} | ||
| </div> | ||
| <div class="panel-footer"> | ||
| <a class="btn btn-link" href="{{site.uri.public}}/errorlog">View complete error log</a> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endblock %} | ||
| {% block page_scripts %} | ||
| <script> | ||
| $(document).ready(function() { | ||
| var timer; | ||
| // Autosave text fields | ||
| $("form[name='settings'] input[type=text]").keyup(function () { | ||
| clearTimeout(timer); // Clear the timer so we don't end up with dupes. | ||
| $("#settings-alerts").html("<div class='alert alert-warning'>Saving...</div>"); | ||
| timer = setTimeout(function() { // assign timer a new timeout | ||
| $("form[name='settings']").submit(); | ||
| }, 700); | ||
| }); | ||
|
|
||
| // Autosave switches and selects | ||
| $("form[name='settings'] input[type=checkbox]").on("change", function () { | ||
| $("#settings-alerts").html("<div class='alert alert-warning'>Saving...</div>"); | ||
| $("form[name='settings']").submit(); | ||
| }); | ||
|
|
||
| $("form[name='settings'] select").on("change", function () { | ||
| $("#settings-alerts").html("<div class='alert alert-warning'>Saving...</div>"); | ||
| $("form[name='settings']").submit(); | ||
| }); | ||
|
|
||
| // Process form | ||
| ufFormSubmit( | ||
| $("form[name='settings']"), | ||
| { "" : "" }, | ||
| $("#userfrosting-alerts"), | ||
| function(data, statusText, jqXHR) { | ||
| // Display messages on success | ||
| $('#userfrosting-alerts').flashAlerts().done(function() { | ||
| $("#settings-alerts").html("<div class='alert alert-success'>All settings have been saved</div>"); | ||
| }); | ||
| }, | ||
| function() { | ||
| $("#settings-alerts").html("<div class='alert alert-danger'>Could not save settings.</div>"); | ||
| } | ||
| ); | ||
| }); | ||
| </script> | ||
| {% endblock %} |
| @@ -0,0 +1,354 @@ | ||
| /*! | ||
| * Start Bootstrap - SB Admin 2 Bootstrap Admin Theme (http://startbootstrap.com) | ||
| * Code licensed under the Apache License v2.0. | ||
| * For details, see http://www.apache.org/licenses/LICENSE-2.0. | ||
| */ | ||
|
|
||
| body { | ||
| background-color: #f8f8f8; | ||
| } | ||
|
|
||
| #wrapper { | ||
| width: 100%; | ||
| } | ||
|
|
||
| #page-wrapper { | ||
| padding: 105px 15px; | ||
| min-height: 568px; | ||
| background-color: #fff; | ||
| } | ||
|
|
||
| @media(min-width:768px) { | ||
| #page-wrapper { | ||
| position: inherit; | ||
| margin: 0 0 0 250px; | ||
| padding: 60px 30px 30px 30px; | ||
| border-left: 1px solid #e7e7e7; | ||
| } | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links { | ||
| margin-right: 0; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links li { | ||
| display: inline-block; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links li:last-child { | ||
| margin-right: 15px; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links li a { | ||
| padding: 15px; | ||
| min-height: 50px; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-menu li { | ||
| display: block; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-menu li:last-child { | ||
| margin-right: 0; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-menu li a { | ||
| padding: 3px 20px; | ||
| min-height: 0; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-menu li a div { | ||
| white-space: normal; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-messages, | ||
| .navbar-userfrosting .navbar-top-links .dropdown-tasks, | ||
| .navbar-userfrosting .navbar-top-links .dropdown-alerts { | ||
| width: 310px; | ||
| min-width: 0; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-messages { | ||
| margin-left: 5px; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-tasks { | ||
| margin-left: -59px; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-alerts { | ||
| margin-left: -123px; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-user { | ||
| right: 0; | ||
| left: auto; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar .sidebar-nav.navbar-collapse { | ||
| padding-right: 0; | ||
| padding-left: 0; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar .sidebar-search { | ||
| padding: 15px; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar ul li { | ||
| border-bottom: 1px solid #e7e7e7; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar ul li a.active { | ||
| background-color: #eee; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar .arrow { | ||
| float: right; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar .fa.arrow:before { | ||
| content: "\f104"; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar .active>a>.fa.arrow:before { | ||
| content: "\f107"; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar .nav-second-level li, | ||
| .navbar-userfrosting .sidebar .nav-third-level li { | ||
| border-bottom: 0!important; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar .nav-second-level li a { | ||
| padding-left: 37px; | ||
| } | ||
|
|
||
| .navbar-userfrosting .sidebar .nav-third-level li a { | ||
| padding-left: 52px; | ||
| } | ||
|
|
||
| @media(min-width:768px) { | ||
| .navbar-userfrosting .sidebar { | ||
| z-index: 1; | ||
| position: absolute; | ||
| width: 250px; | ||
| margin-top: 51px; | ||
| } | ||
|
|
||
| .navbar-userfrosting .navbar-top-links .dropdown-messages, | ||
| .navbar-userfrosting .navbar-top-links .dropdown-tasks, | ||
| .navbar-userfrosting .navbar-top-links .dropdown-alerts { | ||
| margin-left: auto; | ||
| } | ||
| } | ||
|
|
||
| .btn-outline { | ||
| color: inherit; | ||
| background-color: transparent; | ||
| transition: all .5s; | ||
| } | ||
|
|
||
| .btn-primary.btn-outline { | ||
| color: #428bca; | ||
| } | ||
|
|
||
| .btn-success.btn-outline { | ||
| color: #5cb85c; | ||
| } | ||
|
|
||
| .btn-info.btn-outline { | ||
| color: #5bc0de; | ||
| } | ||
|
|
||
| .btn-warning.btn-outline { | ||
| color: #f0ad4e; | ||
| } | ||
|
|
||
| .btn-danger.btn-outline { | ||
| color: #d9534f; | ||
| } | ||
|
|
||
| .btn-primary.btn-outline:hover, | ||
| .btn-success.btn-outline:hover, | ||
| .btn-info.btn-outline:hover, | ||
| .btn-warning.btn-outline:hover, | ||
| .btn-danger.btn-outline:hover { | ||
| color: #fff; | ||
| } | ||
|
|
||
| .chat { | ||
| margin: 0; | ||
| padding: 0; | ||
| list-style: none; | ||
| } | ||
|
|
||
| .chat li { | ||
| margin-bottom: 10px; | ||
| padding-bottom: 5px; | ||
| border-bottom: 1px dotted #999; | ||
| } | ||
|
|
||
| .chat li.left .chat-body { | ||
| margin-left: 60px; | ||
| } | ||
|
|
||
| .chat li.right .chat-body { | ||
| margin-right: 60px; | ||
| } | ||
|
|
||
| .chat li .chat-body p { | ||
| margin: 0; | ||
| } | ||
|
|
||
| .panel .slidedown .glyphicon, | ||
| .chat .glyphicon { | ||
| margin-right: 5px; | ||
| } | ||
|
|
||
| .chat-panel .panel-body { | ||
| height: 350px; | ||
| overflow-y: scroll; | ||
| } | ||
|
|
||
| .login-panel { | ||
| margin-top: 25%; | ||
| } | ||
|
|
||
| .flot-chart { | ||
| display: block; | ||
| height: 400px; | ||
| } | ||
|
|
||
| .flot-chart-content { | ||
| width: 100%; | ||
| height: 100%; | ||
| } | ||
|
|
||
| .dataTables_wrapper { | ||
| position: relative; | ||
| clear: both; | ||
| } | ||
|
|
||
| table.dataTable thead .sorting, | ||
| table.dataTable thead .sorting_asc, | ||
| table.dataTable thead .sorting_desc, | ||
| table.dataTable thead .sorting_asc_disabled, | ||
| table.dataTable thead .sorting_desc_disabled { | ||
| background: 0 0; | ||
| } | ||
|
|
||
| table.dataTable thead .sorting_asc:after { | ||
| content: "\f0de"; | ||
| float: right; | ||
| font-family: fontawesome; | ||
| } | ||
|
|
||
| table.dataTable thead .sorting_desc:after { | ||
| content: "\f0dd"; | ||
| float: right; | ||
| font-family: fontawesome; | ||
| } | ||
|
|
||
| table.dataTable thead .sorting:after { | ||
| content: "\f0dc"; | ||
| float: right; | ||
| font-family: fontawesome; | ||
| color: rgba(50,50,50,.5); | ||
| } | ||
|
|
||
| .btn-circle { | ||
| width: 30px; | ||
| height: 30px; | ||
| padding: 6px 0; | ||
| border-radius: 15px; | ||
| text-align: center; | ||
| font-size: 12px; | ||
| line-height: 1.428571429; | ||
| } | ||
|
|
||
| .btn-circle.btn-lg { | ||
| width: 50px; | ||
| height: 50px; | ||
| padding: 10px 16px; | ||
| border-radius: 25px; | ||
| font-size: 18px; | ||
| line-height: 1.33; | ||
| } | ||
|
|
||
| .btn-circle.btn-xl { | ||
| width: 70px; | ||
| height: 70px; | ||
| padding: 10px 16px; | ||
| border-radius: 35px; | ||
| font-size: 24px; | ||
| line-height: 1.33; | ||
| } | ||
|
|
||
| .show-grid [class^=col-] { | ||
| padding-top: 10px; | ||
| padding-bottom: 10px; | ||
| border: 1px solid #ddd; | ||
| background-color: #eee!important; | ||
| } | ||
|
|
||
| .show-grid { | ||
| margin: 15px 0; | ||
| } | ||
|
|
||
| .huge { | ||
| font-size: 40px; | ||
| } | ||
|
|
||
| .panel-green { | ||
| border-color: #5cb85c; | ||
| } | ||
|
|
||
| .panel-green .panel-heading { | ||
| border-color: #5cb85c; | ||
| color: #fff; | ||
| background-color: #5cb85c; | ||
| } | ||
|
|
||
| .panel-green a { | ||
| color: #5cb85c; | ||
| } | ||
|
|
||
| .panel-green a:hover { | ||
| color: #3d8b3d; | ||
| } | ||
|
|
||
| .panel-red { | ||
| border-color: #d9534f; | ||
| } | ||
|
|
||
| .panel-red .panel-heading { | ||
| border-color: #d9534f; | ||
| color: #fff; | ||
| background-color: #d9534f; | ||
| } | ||
|
|
||
| .panel-red a { | ||
| color: #d9534f; | ||
| } | ||
|
|
||
| .panel-red a:hover { | ||
| color: #b52b27; | ||
| } | ||
|
|
||
| .panel-yellow { | ||
| border-color: #f0ad4e; | ||
| } | ||
|
|
||
| .panel-yellow .panel-heading { | ||
| border-color: #f0ad4e; | ||
| color: #fff; | ||
| background-color: #f0ad4e; | ||
| } | ||
|
|
||
| .panel-yellow a { | ||
| color: #f0ad4e; | ||
| } | ||
|
|
||
| .panel-yellow a:hover { | ||
| color: #df8a13; | ||
| } |
| @@ -0,0 +1,20 @@ | ||
| {% extends "layouts/layout-simple.twig" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "404 Error", | ||
| "description" : "We couldn't deliver. We're sorry." | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
| {% block content %} | ||
| <div class="container text-center"> | ||
| <h1>Error 404</h1> | ||
| <img class="img-fluid m-b-1 m-x-auto" src="{{site.uri.image}}/fry.png"> | ||
| <br><br> | ||
| <p class="lead">Either way, click <a href="{{site.uri.public}}">here</a> to return to the front page.</p> | ||
| </div> <!-- /container --> | ||
| {% endblock %} |
| @@ -0,0 +1,20 @@ | ||
| {% extends "layouts/layout-simple.twig" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Server Misconfiguration", | ||
| "description" : "Your server doesn't seem to be properly configured for UserFrosting." | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
| {% block content %} | ||
| <div class="container text-center"> | ||
| <h1>Your server doesn't seem to be configured properly.</h1> | ||
| <img class="img-fluid m-b-1 m-x-auto" src="{{site.uri.image}}/eniac.png"> | ||
| <br><br> | ||
| <p class="lead">Specifically, it looks like you are using Apache but don't have the <code>mod_rewrite</code> module enabled. Please see the <a href="http://www.userfrosting.com/troubleshooting/#blank-page">troubleshooting guide</a> to get this sorted out.</p> | ||
| </div> <!-- /container --> | ||
| {% endblock %} |
| @@ -0,0 +1,20 @@ | ||
| {% extends "layouts/layout-simple.twig" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Your account may have been compromised", | ||
| "description" : "Your account may have been compromised. You have been logged out for your safety." | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
| {% block content %} | ||
| <div class="container text-center"> | ||
| <h1>Your account may have been compromised!</h1> | ||
| <img class="img-fluid m-b-1 m-x-auto" src="{{site.uri.image}}/compromised.jpg"> | ||
| <br><br> | ||
| <p class="lead">Someone may have used your login information to access this page. For your safety, all sessions were logged out. Please <a href="{{site.uri.public}}/account/login">log in</a> and check your account for suspicious activity. You may also wish to change your password.</p> | ||
| </div> <!-- /container --> | ||
| {% endblock %} |
| @@ -0,0 +1,20 @@ | ||
| {% extends "layouts/layout-simple.twig" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Database Error", | ||
| "description" : "There's something wrong. We can't connect to the database." | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
| {% block content %} | ||
| <div class="container text-center"> | ||
| <h1>We can't seem to connect to the database.</h1> | ||
| <img class="img-fluid m-b-1 m-x-auto" src="{{site.uri.image}}/database.png"> | ||
| <br><br> | ||
| <p class="lead">Have you tried hacking into the mainframe? Seriously though, check your PHP error log to figure out what's up. You probably just need to enter your database credentials in <code>userfrosting/config-userfrosting.php</code>. If you are sure that your credentials are fine, try simply reloading the page.</p> | ||
| </div> <!-- /container --> | ||
| {% endblock %} |
| @@ -0,0 +1,113 @@ | ||
| {% extends "layouts/layout-dashboard.twig" %} | ||
| {% set page_group = "group" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Groups", | ||
| "description" : "Group management, authorization rules, add/remove groups, etc." | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <div class="row"> | ||
| <div class="col-md-12"> | ||
| <div class='panel panel-primary'> | ||
| <div class='panel-heading'> | ||
| <h3 class='panel-title'><i class='fa fa-users'></i> Groups</h3> | ||
| </div> | ||
| <div class='panel-body'> | ||
| <div class="table-responsive"> | ||
| <table id="table-groups" class="tablesorter table table-bordered table-hover table-striped tablesorter-bootstrap" data-sortlist="[[0, 0]]"> | ||
| <thead> | ||
| <tr> | ||
| <th class="sorter-metatext" data-column-name="group_name">Group Name <i class="fa fa-sort"></i></th> | ||
| <th class="sorter-metatext" data-column-name="landing_page">Landing Page <i class="fa fa-sort"></i></th> | ||
| <th class="sorter-metatext" data-column-name="new_user_title">New User Title <i class="fa fa-sort"></i></th> | ||
| <th class="sorter-metatext" data-column-name="theme">Theme <i class="fa fa-sort"></i></th> | ||
| <th data-column-name="flag_can_delete">Actions <i class="fa fa-sort"></i></th> | ||
| </tr> | ||
| </thead> | ||
| <tbody> | ||
| {% for group in groups %} | ||
| <tr> | ||
| <td data-text="{{group.name}}"> | ||
| <strong> | ||
| <i class="{{group.icon}} fa-fw"></i> {{group.name}} | ||
| </strong> | ||
| <div> | ||
| {% if group.is_default == "2" %} | ||
| <i>Default Primary Group</i> | ||
| {% elseif group.is_default == "1" %} | ||
| <i>Default Group</i> | ||
| {% endif %} | ||
| </div> | ||
| </td> | ||
| <td> | ||
| {{group.landing_page}} | ||
| </td> | ||
| <td> | ||
| {{group.new_user_title}} | ||
| </td> | ||
| <td> | ||
| {{group.theme}} | ||
| </td> | ||
| <td> | ||
| <div class="btn-group"> | ||
| <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"> | ||
| Actions | ||
| <span class="caret"></span> | ||
| </button> | ||
| <ul class="dropdown-menu" role="menu"> | ||
| <li> | ||
| <a href="#" data-id="{{group.id}}" class="js-group-edit" data-target="#dialog-group-edit" data-toggle="modal"> | ||
| <i class="fa fa-edit"></i> Edit group | ||
| </a> | ||
| </li> | ||
| <li> | ||
| <a href="{{site.uri.public}}/groups/g/{{group.id}}/auth"> | ||
| <i class="fa fa-key"></i> Authorization rules | ||
| </a> | ||
| </li> | ||
| <li> | ||
| {% if group.can_delete == 1 %} | ||
| <a href="#" data-id="{{group.id}}" class="js-group-delete" data-name="{{group.name}}" data-target="#dialog-group-delete" data-toggle="modal"> | ||
| <i class="fa fa-trash-o"></i> Delete group | ||
| </a> | ||
| {% endif %} | ||
| </li> | ||
| </ul> | ||
| </div> | ||
| </td> | ||
| </tr> | ||
| {% endfor %} | ||
| </tbody> | ||
| </table> | ||
| {% include 'components/common/table-tablesorter-default.twig' with {'pager_id' : 'table-groups-pager'} %} | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-md-6 "> | ||
| <button type="button" class="btn btn-success js-group-create" data-toggle="modal" data-target="#dialog-group-create"> | ||
| <i class="fa fa-plus-square"></i> Create New Group | ||
| </button> | ||
| </div> | ||
| <div class="col-md-6 text-right "> | ||
| <a href="#">View All Groups <i class="fa fa-arrow-circle-right"></i></a> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| {% endblock %} | ||
| {% block page_scripts %} | ||
| <script> | ||
| $(document).ready(function() { | ||
| ufTable('table-groups'); | ||
| }); | ||
| </script> | ||
| {% endblock %} | ||
|
|
| @@ -0,0 +1,26 @@ | ||
| {% extends "layouts/layout-jumbotron.twig" %} | ||
| {% set page_group = "loggedout" %} | ||
|
|
||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
|
|
||
| {% set page = page | merge({ | ||
| "title" : "A secure, modern user management system for PHP.", | ||
| "description" : "Main landing page for public access to this website.", | ||
| "active_page" : "" | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <h1>Welcome to {{site.site_title}}!</h1> | ||
| <p class="lead">A secure, modern user management system based on the Slim Framework and the Twig templating engine.</p> | ||
| {% include 'components/common/alerts.twig' %} | ||
| <div class="row"> | ||
| <div class="col-sm-12"> | ||
| <a href="{{site.uri.public}}/account/login" class="btn btn-success" role="button" value="Login">Login</a> | ||
| </div> | ||
| </div> | ||
| {% include 'components/jumbotron/jumbotron-links.twig' %} | ||
| {% endblock %} |
| @@ -0,0 +1,34 @@ | ||
| {% extends "layouts/layout-simple.twig" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Installation Error", | ||
| "description" : "Installation page for UserFrosting" | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <div class="container"> | ||
| <h1 class = "text-center">Something's not right here.</h1> | ||
| <br> | ||
| <div class="row"> | ||
| <div class="col-xs-12 col-sm-4 col-md-6" > | ||
| <img class="img-fluid m-x-auto" src="{{site.uri.image}}/stuck.jpg"> | ||
| </div> | ||
| <div class="col-xs-12 col-sm-8 col-md-6"> | ||
| <p class="h3 text-center">Please fix the following errors, then <a href="{{site.uri.public}}/install">reload</a>.</p> | ||
| {% for message in messages %} | ||
| <div class="list-group"> | ||
| <div class="list-group-item list-group-item-danger"> | ||
| <h4 class="list-group-item-heading">{{message.title}}</h4> | ||
| <p class="list-group-item-text">{{message.message | raw}}</p> | ||
| </div> | ||
| </div> | ||
| {% endfor %} | ||
| </div> | ||
| </div> <!-- /container --> | ||
| {% endblock %} |
| @@ -0,0 +1,127 @@ | ||
| {% extends "layouts/layout-simple.twig" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Installation | Register Master Account", | ||
| "description" : "Set up the master account for your installation of UserFrosting" | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
|
|
||
| {% block content %} | ||
| <div class="container container-narrow"> | ||
| <h1 class="text-center">Register Master Account</h1> | ||
| <hr> | ||
| {% include 'components/common/alerts.twig' %} | ||
| <div class="alert alert-info"> | ||
| <i class='fa fa-hand-o-right'></i> The master account must be created before any other user accounts can be created. The master account will have full permissions to all access-controlled resources on your UserFrosting installation, regardless of any individual- or group-level permissions that they have been assigned. | ||
| </div> | ||
| <form name="register" method="post" action="{{site.uri.public}}/install/master" class="form-horizontal"> | ||
| <div class="row"> | ||
| <div class="col-xs-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Username</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-edit"></i></span> | ||
| <input type="text" class="form-control" name="user_name" autocomplete="off" value="" placeholder="User name"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-xs-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Display Name</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-edit"></i></span> | ||
| <input type="text" class="form-control" name="display_name" autocomplete="off" value="" placeholder="Display name"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-xs-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Email</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-envelope"></i></span> | ||
| <input type="text" class="form-control" name="email" placeholder="Email address" value=""> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-xs-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Password</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-key"></i></span> | ||
| <input type="password" class="form-control" name="password" autocomplete="off" value="" placeholder="8-50 characters"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-xs-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Confirm password</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-key"></i></span> | ||
| <input type="password" class="form-control" name="passwordc" autocomplete="off" value="" placeholder="Re-enter your password"> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="row"> | ||
| <div class="col-xs-12"> | ||
| <div class="form-group"> | ||
| <label class="control-label col-sm-4">Configuration Token</label> | ||
| <div class="col-sm-8"> | ||
| <div class="input-group"> | ||
| <span class="input-group-addon"><i class="fa fa-fw fa-key"></i></span> | ||
| <input type="text" class="form-control" name="root_account_config_token" autocomplete="off" value="" placeholder="Look in your '{{table_config}}' table for the value of 'root_account_config_token'."> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| <div class="form-group text-center"> | ||
| <button type="submit" class="btn btn-lg btn-success">Register</button> | ||
| </div> | ||
| <div class="collapse"> | ||
| <label>Spiderbro: Don't change me bro, I'm tryin'a catch some flies!</label> | ||
| <input name="spiderbro" id="spiderbro" value="http://"/> | ||
| </div> | ||
| </form> | ||
| </div> | ||
| </div> <!-- /container --> | ||
| {% endblock %} | ||
| {% block page_scripts %} | ||
| <script> | ||
| $(document).ready(function() { | ||
| // Process form | ||
| ufFormSubmit( | ||
| $("form[name='register']"), | ||
| {{ validators | raw }}, | ||
| $("#userfrosting-alerts"), | ||
| function(data, statusText, jqXHR) { | ||
| // Forward to login page on success | ||
| window.location.replace(site['uri']['public'] + "/account/login"); | ||
| } | ||
| ); | ||
| }); | ||
| </script> | ||
| {% endblock %} |
| @@ -0,0 +1,37 @@ | ||
| {% extends "layouts/layout-simple.twig" %} | ||
|
|
||
| {# Set page properties (page.*) here. #} | ||
| {% block page %} | ||
| {# By putting this in a special block, we ensure that it will be set AFTER the default values are set in the parent template, | ||
| but BEFORE the page itself is rendered. #} | ||
| {% set page = page | merge({ | ||
| "title" : "Installation", | ||
| "description" : "Installation page for UserFrosting" | ||
| }) %} | ||
| {{ parent() }} | ||
| {% endblock %} | ||
| {% block content %} | ||
| <div class="container"> | ||
| <h1 class = "text-center">Congratulations.<br><small>UserFrosting is ready to rock.</small></h1> | ||
| <br> | ||
| <div class="row p-b-1"> | ||
| <div class="col-xs-12 col-sm-4 col-lg-6" > | ||
| <img class="img-fluid m-b-1 m-x-auto" src="{{site.uri.image}}/install-ready.jpg"> | ||
| </div> | ||
| <div class="col-xs-12 col-sm-8 col-lg-6"> | ||
| {% for message in messages %} | ||
| <div class="list-group"> | ||
| <div class="list-group-item list-group-item-{{message.class}}"> | ||
| <h4 class="list-group-item-heading">{{message.title | raw}}</h4> | ||
| <p class="list-group-item-text">{{message.message | raw}}</p> | ||
| </div> | ||
| </div> | ||
| {% endfor %} | ||
| <div class="text-center"> | ||
| <p class="h3">Next Step</p> | ||
| <a href="{{site.uri.public}}/install/master" class="btn btn-lg btn-success">Create Master Account <i class='fa fa-angle-right'></i></a> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </div> <!-- /container --> | ||
| {% endblock %} |