Initial Spark Install

This commit is contained in:
Deon George
2017-11-03 16:26:07 +11:00
commit b1a5807eb3
766 changed files with 128896 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
<spark-create-team inline-template>
<div class="panel panel-default">
<div class="panel-heading">Create {{ucfirst(Spark::teamString())}}</div>
<div class="panel-body">
<form class="form-horizontal" role="form" v-if="canCreateMoreTeams">
<!-- Name -->
<div class="form-group" :class="{'has-error': form.errors.has('name')}">
<label class="col-md-4 control-label">{{ ucfirst(Spark::teamString()) }} Name</label>
<div class="col-md-6">
<input type="text" id="create-team-name" class="form-control" name="name" v-model="form.name">
<span class="help-block" v-if="hasTeamLimit">
You currently have @{{ remainingTeams }} {{ str_plural(Spark::teamString()) }} remaining.
</span>
<span class="help-block" v-show="form.errors.has('name')">
@{{ form.errors.get('name') }}
</span>
</div>
</div>
@if (Spark::teamsIdentifiedByPath())
<!-- Slug (Only Shown When Using Paths For Teams) -->
<div class="form-group" :class="{'has-error': form.errors.has('slug')}">
<label class="col-md-4 control-label">{{ ucfirst(Spark::teamString()) }} Slug</label>
<div class="col-md-6">
<input type="text" id="create-team-slug" class="form-control" name="slug" v-model="form.slug">
<p class="help-block" v-show=" ! form.errors.has('slug')">
This slug is used to identify your team in URLs.
</p>
<span class="help-block" v-show="form.errors.has('slug')">
@{{ form.errors.get('slug') }}
</span>
</div>
</div>
@endif
<!-- Create Button -->
<div class="form-group">
<div class="col-md-offset-4 col-md-6">
<button type="submit" class="btn btn-primary"
@click.prevent="create"
:disabled="form.busy">
Create
</button>
</div>
</div>
</form>
<div v-else>
<span class="text-danger">
Your current plan doesn't allow you to create more teams, please <a href="{{ url('/settings#/subscription') }}">upgrade your subscription</a>.
</span>
</div>
</div>
</div>
</spark-create-team>

View File

@@ -0,0 +1,138 @@
<spark-current-teams :user="user" :teams="teams" inline-template>
<div>
<div class="panel panel-default">
<div class="panel-heading">Current {{ ucfirst(str_plural(Spark::teamString())) }}</div>
<div class="panel-body">
<table class="table table-borderless m-b-none">
<thead>
<th></th>
<th>Name</th>
<th>Owner</th>
<th></th>
<th></th>
</thead>
<tbody>
<tr v-for="team in teams">
<!-- Photo -->
<td>
<img :src="team.photo_url" class="spark-team-photo">
</td>
<!-- Team Name -->
<td>
<div class="btn-table-align">
@{{ team.name }}
</div>
</td>
<!-- Owner Name -->
<td>
<div class="btn-table-align">
<span v-if="user.id == team.owner.id">
You
</span>
<span v-else>
@{{ team.owner.name }}
</span>
</div>
</td>
<!-- Edit Button -->
<td>
<a :href="'/settings/{{str_plural(Spark::teamString())}}/'+team.id">
<button class="btn btn-primary">
<i class="fa fa-cog"></i>
</button>
</a>
</td>
<!-- Leave Button -->
<td>
<button class="btn btn-warning" @click="approveLeavingTeam(team)"
data-toggle="tooltip" title="Leave Team"
v-if="user.id !== team.owner_id">
<i class="fa fa-sign-out"></i>
</button>
</td>
@if (Spark::createsAdditionalTeams())
<!-- Delete Button -->
<td>
<button class="btn btn-danger-outline" @click="approveTeamDelete(team)" v-if="user.id === team.owner_id">
<i class="fa fa-times"></i>
</button>
</td>
@endif
</tr>
</tbody>
</table>
</div>
</div>
<!-- Leave Team Modal -->
<div class="modal fade" id="modal-leave-team" tabindex="-1" role="dialog">
<div class="modal-dialog" v-if="leavingTeam">
<div class="modal-content">
<div class="modal-header">
<button type="button " class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">
Leave {{ ucfirst(Spark::teamString()) }} (@{{ leavingTeam.name }})
</h4>
</div>
<div class="modal-body">
Are you sure you want to leave this {{ Spark::teamString() }}?
</div>
<!-- Modal Actions -->
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">No, Go Back</button>
<button type="button" class="btn btn-warning" @click="leaveTeam" :disabled="leaveTeamForm.busy">
Yes, Leave
</button>
</div>
</div>
</div>
</div>
<!-- Delete Team Modal -->
<div class="modal fade" id="modal-delete-team" tabindex="-1" role="dialog">
<div class="modal-dialog" v-if="deletingTeam">
<div class="modal-content">
<div class="modal-header">
<button type="button " class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">
Delete {{ ucfirst(Spark::teamString()) }} (@{{ deletingTeam.name }})
</h4>
</div>
<div class="modal-body">
Are you sure you want to delete this {{ Spark::teamString() }}? If you choose to delete the {{ Spark::teamString() }}, all of the
{{ Spark::teamString() }}'s data will be permanently deleted.
</div>
<!-- Modal Actions -->
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">No, Go Back</button>
<button type="button" class="btn btn-danger" @click="deleteTeam" :disabled="deleteTeamForm.busy">
<span v-if="deleteTeamForm.busy">
<i class="fa fa-btn fa-spinner fa-spin"></i>Deleting
</span>
<span v-else>
Yes, Delete
</span>
</button>
</div>
</div>
</div>
</div>
</div>
</spark-current-teams>

View File

@@ -0,0 +1,14 @@
Hi!
<br><br>
{{ $invitation->team->owner->name }} has invited you to join their {{ Spark::teamString() }}!
<br><br>
Since you already have an account, you may accept the invitation from your
account settings screen.
<br><br>
See you soon!

View File

@@ -0,0 +1,14 @@
Hi!
<br><br>
{{ $invitation->team->owner->name }} has invited you to join their {{ Spark::teamString() }}! If you do not already have an account,
you may click the following link to get started:
<br><br>
<a href="{{ url('register?invitation='.$invitation->token) }}">{{ url('register?invitation='.$invitation->token) }}</a>
<br><br>
See you soon!

View File

@@ -0,0 +1,34 @@
<spark-mailed-invitations :invitations="invitations" inline-template>
<div>
<div class="panel panel-default" v-if="invitations.length > 0">
<div class="panel-heading">Mailed Invitations</div>
<div class="panel-body">
<table class="table table-borderless m-b-none">
<thead>
<th>E-Mail Address</th>
<th></th>
</thead>
<tbody>
<tr v-for="invitation in invitations">
<!-- E-Mail Address -->
<td>
<div class="btn-table-align">
@{{ invitation.email }}
</div>
</td>
<!-- Delete Button -->
<td>
<button class="btn btn-danger-outline" @click="cancel(invitation)">
<i class="fa fa-times"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</spark-mailed-invitations>

View File

@@ -0,0 +1,42 @@
<spark-pending-invitations inline-template>
<div>
<div class="panel panel-default" v-if="invitations.length > 0">
<div class="panel-heading">Pending Invitations</div>
<div class="panel-body">
<table class="table table-borderless m-b-none">
<thead>
<th>{{ ucfirst(Spark::teamString()) }}</th>
<th></th>
<th></th>
</thead>
<tbody>
<tr v-for="invitation in invitations">
<!-- Team Name -->
<td>
<div class="btn-table-align">
@{{ invitation.team.name }}
</div>
</td>
<!-- Accept Button -->
<td>
<button class="btn btn-success" @click="accept(invitation)">
<i class="fa fa-check"></i>
</button>
</td>
<!-- Reject Button -->
<td>
<button class="btn btn-danger-outline" @click="reject(invitation)">
<i class="fa fa-times"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</spark-pending-invitations>

View File

@@ -0,0 +1,53 @@
<spark-send-invitation :user="user" :team="team" :billable-type="billableType" inline-template>
<div class="panel panel-default">
<div class="panel-heading">Send Invitation</div>
<div class="panel-body">
<!-- Success Message -->
<div class="alert alert-success" v-if="form.successful">
The invitation has been sent!
</div>
<form class="form-horizontal" role="form" v-if="canInviteMoreTeamMembers">
<!-- E-Mail Address -->
<div class="form-group" :class="{'has-error': form.errors.has('email')}">
<label class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input type="email" class="form-control" name="email" v-model="form.email">
<span class="help-block" v-if="hasTeamMembersLimit">
You currently have @{{ remainingTeamMembers }} invitation(s) remaining.
</span>
<span class="help-block" v-show="form.errors.has('email')">
@{{ form.errors.get('email') }}
</span>
</div>
</div>
<!-- Send Invitation Button -->
<div class="form-group">
<div class="col-md-offset-4 col-md-6">
<button type="submit" class="btn btn-primary"
@click.prevent="send"
:disabled="form.busy">
<span v-if="form.busy">
<i class="fa fa-btn fa-spinner fa-spin"></i>Sending
</span>
<span v-else>
Send Invitation
</span>
</button>
</div>
</div>
</form>
<div v-else>
<span class="text-danger">
Your current plan doesn't allow you to invite more members, please <a href="{{ url('/settings#/subscription') }}">upgrade your subscription</a>.
</span>
</div>
</div>
</div>
</spark-send-invitation>

View File

@@ -0,0 +1,141 @@
<spark-team-members :user="user" :team="team" inline-template>
<div>
<div class="panel panel-default">
<div class="panel-heading">{{ ucfirst(Spark::teamString()) }} Members (@{{ team.users.length }})</div>
<div class="panel-body">
<table class="table table-borderless m-b-none">
<thead>
<th></th>
<th>Name</th>
<th v-if="roles.length > 1">Role</th>
<th v-if="roles.length > 1"><!-- Edit Team Member Button --></th>
<th></th>
</thead>
<tbody>
<tr v-for="member in team.users">
<!-- Photo -->
<td>
<img :src="member.photo_url" class="spark-profile-photo">
</td>
<!-- Name -->
<td>
<div class="btn-table-align">
<span v-if="member.id === user.id">
You
</span>
<span v-else>
@{{ member.name }}
</span>
</div>
</td>
<!-- Role -->
<td v-if="roles.length > 0">
<div class="btn-table-align">
@{{ teamMemberRole(member) }}
</div>
</td>
<!-- Edit Button -->
<td v-if="roles.length > 0">
<button class="btn btn-primary"
@click="editTeamMember(member)"
v-if="canEditTeamMember(member)">
<i class="fa fa-pencil"></i>
</button>
</td>
<!-- Delete Button -->
<td>
<button class="btn btn-danger-outline"
@click="approveTeamMemberDelete(member)"
v-if="canDeleteTeamMember(member)">
<i class="fa fa-times"></i>
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Update Team Member Modal -->
<div class="modal fade" id="modal-update-team-member" tabindex="-1" role="dialog">
<div class="modal-dialog" v-if="updatingTeamMember">
<div class="modal-content">
<div class="modal-header">
<button type="button " class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">
Edit {{ ucfirst(Spark::teamString()) }} Member (@{{ updatingTeamMember.name }})
</h4>
</div>
<div class="modal-body">
<!-- Update Team Member Form -->
<form class="form-horizontal" role="form">
<div class="form-group" :class="{'has-error': updateTeamMemberForm.errors.has('role')}">
<label class="col-md-4 control-label">{{ ucfirst(Spark::teamString()) }} Member Role</label>
<div class="col-md-6">
<select class="form-control" v-model="updateTeamMemberForm.role">
<option v-for="role in roles" :value="role.value">
@{{ role.text }}
</option>
</select>
<span class="help-block" v-if="updateTeamMemberForm.errors.has('role')">
@{{ updateTeamMemberForm.errors.get('role') }}
</span>
</div>
</div>
</form>
</div>
<!-- Modal Actions -->
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" @click="update" :disabled="updateTeamMemberForm.busy">
Update
</button>
</div>
</div>
</div>
</div>
<!-- Delete Team Member Modal -->
<div class="modal fade" id="modal-delete-member" tabindex="-1" role="dialog">
<div class="modal-dialog" v-if="deletingTeamMember">
<div class="modal-content">
<div class="modal-header">
<button type="button " class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">
Remove {{ ucfirst(Spark::teamString()) }} Member (@{{ deletingTeamMember.name }})
</h4>
</div>
<div class="modal-body">
Are you sure you want to remove this {{ ucfirst(Spark::teamString()) }} member?
</div>
<!-- Modal Actions -->
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">No, Go Back</button>
<button type="button" class="btn btn-danger" @click="deleteMember" :disabled="deleteTeamMemberForm.busy">
Yes, Remove
</button>
</div>
</div>
</div>
</div>
</div>
</spark-team-members>

View File

@@ -0,0 +1,20 @@
<spark-team-membership :user="user" :team="team" :billable-type="billableType" inline-template>
<div>
@if (Auth::user()->ownsTeam($team))
<!-- Send Invitation -->
<div v-if="user && team">
@include('spark::settings.teams.send-invitation')
</div>
<!-- Pending Invitations -->
<div v-if="invitations && invitations.length > 0">
@include('spark::settings.teams.mailed-invitations')
</div>
@endif
<!-- Team Members -->
<div v-if="user && team">
@include('spark::settings.teams.team-members')
</div>
</div>
</spark-team-membership>

View File

@@ -0,0 +1,11 @@
<spark-team-profile :user="user" :team="team" inline-template>
<div>
<div v-if="user && team">
<!-- Update Team Photo -->
@include('spark::settings.teams.update-team-photo')
<!-- Update Team Name -->
@include('spark::settings.teams.update-team-name')
</div>
</div>
</spark-team-profile>

View File

@@ -0,0 +1,156 @@
@extends('spark::layouts.app')
@section('scripts')
@if (Spark::billsUsingStripe())
<script src="https://js.stripe.com/v2/"></script>
@else
<script src="https://js.braintreegateway.com/v2/braintree.js"></script>
@endif
@endsection
@section('content')
<spark-team-settings :user="user" :team-id="{{ $team->id }}" inline-template>
<div class="spark-screen container">
<div class="row">
<!-- Tabs -->
<div class="col-md-4">
<div class="panel panel-default panel-flush">
<div class="panel-heading">
<span v-if="team">
@{{ team.name }} {{ ucfirst(Spark::teamString()) }} Settings
</span>
</div>
<div class="panel-body">
<div class="spark-settings-tabs">
<ul class="nav spark-settings-stacked-tabs" role="tablist">
<!-- Owner Settings -->
@if (Auth::user()->ownsTeam($team))
<li role="presentation" class="active">
<a href="#owner" aria-controls="owner" role="tab" data-toggle="tab">
<i class="fa fa-fw fa-btn fa-edit"></i>{{ ucfirst(Spark::teamString()) }} Profile
</a>
</li>
@endif
<!-- Membership -->
@if (Auth::user()->ownsTeam($team))
<li role="presentation">
@else
<li role="presentation" class="active">
@endif
<a href="#membership" aria-controls="membership" role="tab" data-toggle="tab">
<i class="fa fa-fw fa-btn fa-users"></i>Membership
</a>
</li>
<!-- View All Teams -->
@if (Spark::createsAdditionalTeams())
<li role="presentation">
<a href="/settings#/{{str_plural(Spark::teamString())}}">
<i class="fa fa-fw fa-btn fa-arrow-left"></i>View All {{ ucfirst(str_plural(Spark::teamString())) }}
</a>
</li>
@else
<li role="presentation">
<a href="/settings">
<i class="fa fa-fw fa-btn fa-arrow-left"></i>Your Settings
</a>
</li>
@endif
</ul>
</div>
</div>
</div>
<!-- Billing Tabs -->
@if (Spark::canBillTeams() && Auth::user()->ownsTeam($team))
<div class="panel panel-default panel-flush">
<div class="panel-heading">
{{ ucfirst(Spark::teamString()) }} Billing
</div>
<div class="panel-body">
<div class="spark-settings-tabs">
<ul class="nav spark-settings-stacked-tabs" role="tablist">
@if (Spark::hasPaidTeamPlans())
<!-- Subscription Link -->
<li role="presentation">
<a href="#subscription" aria-controls="subscription" role="tab" data-toggle="tab">
<i class="fa fa-fw fa-btn fa-shopping-bag"></i>Subscription
</a>
</li>
@endif
<!-- Payment Method Link -->
<li role="presentation">
<a href="#payment-method" aria-controls="payment-method" role="tab" data-toggle="tab">
<i class="fa fa-fw fa-btn fa-credit-card"></i>Payment Method
</a>
</li>
<!-- Invoices Link -->
<li role="presentation">
<a href="#invoices" aria-controls="invoices" role="tab" data-toggle="tab">
<i class="fa fa-fw fa-btn fa-history"></i>Invoices
</a>
</li>
</ul>
</div>
</div>
</div>
@endif
</div>
<!-- Tab Panels -->
<div class="col-md-8">
<div class="tab-content">
<!-- Owner Information -->
@if (Auth::user()->ownsTeam($team))
<div role="tabpanel" class="tab-pane active" id="owner">
@include('spark::settings.teams.team-profile')
</div>
@endif
<!-- Membership -->
@if (Auth::user()->ownsTeam($team))
<div role="tabpanel" class="tab-pane" id="membership">
@else
<div role="tabpanel" class="tab-pane active" id="membership">
@endif
<div v-if="team">
@include('spark::settings.teams.team-membership')
</div>
</div>
<!-- Billing Tab Panes -->
@if (Spark::canBillTeams() && Auth::user()->ownsTeam($team))
@if (Spark::hasPaidTeamPlans())
<!-- Subscription -->
<div role="tabpanel" class="tab-pane" id="subscription">
<div v-if="user && team">
@include('spark::settings.subscription')
</div>
</div>
@endif
<!-- Payment Method -->
<div role="tabpanel" class="tab-pane" id="payment-method">
<div v-if="user && team">
@include('spark::settings.payment-method')
</div>
</div>
<!-- Invoices -->
<div role="tabpanel" class="tab-pane" id="invoices">
<div v-if="user && team">
@include('spark::settings.invoices')
</div>
</div>
@endif
</div>
</div>
</div>
</div>
</spark-team-settings>
@endsection

View File

@@ -0,0 +1,39 @@
<spark-update-team-name :user="user" :team="team" inline-template>
<div class="panel panel-default">
<div class="panel-heading">Update {{ ucfirst(Spark::teamString()) }} Name</div>
<div class="panel-body">
<!-- Success Message -->
<div class="alert alert-success" v-if="form.successful">
Your {{ Spark::teamString() }} name has been updated!
</div>
<form class="form-horizontal" role="form">
<!-- Name -->
<div class="form-group" :class="{'has-error': form.errors.has('name')}">
<label class="col-md-4 control-label">Name</label>
<div class="col-md-6">
<input type="text" class="form-control" name="name" v-model="form.name">
<span class="help-block" v-show="form.errors.has('name')">
@{{ form.errors.get('name') }}
</span>
</div>
</div>
<!-- Update Button -->
<div class="form-group">
<div class="col-md-offset-4 col-md-6">
<button type="submit" class="btn btn-primary"
@click.prevent="update"
:disabled="form.busy">
Update
</button>
</div>
</div>
</form>
</div>
</div>
</spark-update-team-name>

View File

@@ -0,0 +1,39 @@
<spark-update-team-photo :user="user" :team="team" inline-template>
<div>
<div class="panel panel-default">
<div class="panel-heading">{{ ucfirst(Spark::teamString()) }} Photo</div>
<div class="panel-body">
<div class="alert alert-danger" v-if="form.errors.has('photo')">
@{{ form.errors.get('photo') }}
</div>
<form class="form-horizontal" role="form">
<!-- Photo Preview-->
<div class="form-group">
<label class="col-md-4 control-label">&nbsp;</label>
<div class="col-md-6">
<span role="img" class="team-photo-preview"
:style="previewStyle">
</span>
</div>
</div>
<!-- Update Button -->
<div class="form-group">
<label class="col-md-4 control-label">&nbsp;</label>
<div class="col-md-6">
<label type="button" class="btn btn-primary btn-upload" :disabled="form.busy">
<span>Select New Photo</span>
<input ref="photo" type="file" class="form-control" name="photo" @change="update">
</label>
</div>
</div>
</form>
</div>
</div>
</div>
</spark-update-team-photo>