This commit is contained in:
Tim Bendt
2025-11-25 00:16:35 -05:00
commit 6b9ef7ca55
6757 changed files with 1003748 additions and 0 deletions

942
installer/assets/css/style.css Executable file
View File

@@ -0,0 +1,942 @@
/* CSS Reset */
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
margin:0;
padding:0;
border:0;
font-weight:inherit;
font-style:inherit;
font-size:100%;
font-family:inherit;
vertical-align:baseline;
}
blockquote:before, blockquote:after, q:before, q:after {
content:"";
}
blockquote, q {
quotes:"" "";
}
a img {
border:none;
}
p {
margin:0 0 20px;
clear:both;
line-height:1.6;
}
/* Headings */
h1, h2, h3, h4, h5, h6 {
font-weight:normal;
margin-bottom:10px;
}
h1 {
font-size:24px;
font-weight:bold;
}
h2 {
font-size:18px;
font-weight:bold;
border-bottom:1px solid #ccc;
padding-bottom:5px;
margin-bottom:25px;
}
h3 {
font-size:14px;
font-weight:bold;
}
h4 {
font-weight:bold;
}
h5 {
font-size:12px;
}
h6 {
font-size:11px;
}
/* Base */
body {
background:#D6E4EE;
font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;
color:#666;
line-height:1.5;
font-size:75%;
}
#statusBar {
width:780px;
margin:0 auto;
text-align:right;
}
#statusBar a {
color:#666;
text-decoration:none;
padding:0 0 0 20px;
background:url('../img/warning_16.png') center left no-repeat;
}
#wrapper {
width:960px;
margin: 60px auto;
}
#wrapper h1 a.homelink {
padding:40px;
text-indent:-9999px;
display:block;
width:260px;
}
.home #wrapper {
margin:20px auto;
}
#wrapper p.error {
color:#990000;
padding:10px 20px;
}
#wrapper p.success {
color:green;
border:1px solid green;
padding:5px 20px;
background:#f3f3f3;
}
#header {
}
span.small_instruction {
font-size:12px;
line-height:10px!important;
display:block;
margin:0 0 20px 0 ;
}
.col2 {
width:200px;
}
td.col3 {
font-size:12px;
background-color:rgba(255,255,255,0.8);
text-indent:20px;
color:#777;
}
#headerInvoice {
height:118px;
margin:0 auto;
background:url('../img/invoice_header.png') no-repeat;
}
#header ul#navigation {
width:400px;
float:right;
list-style:none;
padding:0;
margin:20px 0 0 0;
}
#header ul#navigation li {
float:left;
margin:0 10px 0 0;
padding:0;
}
#header ul#navigation li a {
padding:5px 10px 3px 10px;
background:#f2f2f2;
margin:0;
text-decoration:none;
color:#69D2E7;
}
#header ul#navigation li a:hover, #header ul#navigation li a.active {
background:#fff;
}
#content {
background: #fff;
padding:10px 40px 20px;
clear:both;
margin-bottom:10px;
-moz-border-radius:10px 0 10px 10px;
-webkit-border-radius:10px 0 10px 10px;
}
#footer {
text-align:right;
}
#wrapper h1 {
margin:0px 0 50px 0 ;
text-indent:-9999px;
}
h2.toggle {
line-height:46px;
text-indent:60px;
cursor:pointer;
}
h1, h3, h4 {
color:#69D2E7;
}
a {
color:#69D2E7;
}
h2 {
color:#fa6900;
}
.orangered {
color:#fa6900
}
h2.plus {
background:url('../img/add_48.png') center left no-repeat;
}
h2.minus {
background:url('../img/cancel_48.png') center left no-repeat;
}
/*
input[type="text"], input[type="password"], textarea {
-moz-border-radius:5px;
-webkit-border-radius:5px;
background-color:#F2F2F2;
border:1px solid #69D2E7;
border-radius:5px;
font: inherit;
color:#F38630;
padding:4px 2px;
}
*/
.col2 input[type="text"] {
width:180px;
}
.center {
text-align:center;
padding:40px 0 10px 0;
}
#addSuccess {
height:175px;
margin:10px 0;
}
#addSuccess h1 {
line-height:46px;
text-indent:60px;
background:url('../img/accepted_48.png') center left no-repeat;
margin:0 0 0 0;
}
#addSuccess a {
}
#addSuccess span {
padding:10px 40px;
border:1px solid #69D2E7;
color:#F38630;
margin:20px auto;
font-size:160%;
}
.receipt {
margin-left: 20px
}
.receipt th {
text-align: right;
font-size: 1.3em;
}
.receipt td {
font-size: 1.3em
}
.centered_x {
margin-left: auto; margin-right: auto
}
.bordered {
padding: 15px;
border: 1px solid #ddd;
background-color: #ffffff
}
.pad_left {
padding: 0 0 0 15px
}
.pad_right {
padding: 0 15px 0 0
}
.tight {
line-height:140%;
}
p.pancake {
text-align:right;
font-size:12px;
}
p.pancake a {
text-decoration:none;
}
span.small {
font-size:10px;
}
span.small a, p.key a {
text-decoration:none;
}
.paidInv {
background:#f1ffbf;
border:1px solid #a6d50f;
padding:10px 20px 15px;
margin-bottom:20px;
-moz-border-radius:5px;
-webkit-border:5px;
border-radius:5px;
-moz-box-shadow:1px 1px rgba(255, 255, 255, 0.6) inset;
-webkit-box-shadow:1px 1px rgba(255, 255, 255, 0.6) inset;
}
.paidInv span {
color:green;
font-size:24px;
}
.outstanding {
background:#fecdc6;
border:1px solid #f45d43;
padding:10px 20px 15px;
margin-bottom:20px;
-moz-border-radius:5px;
-webkit-border:5px;
border-radius:5px;
-moz-box-shadow:1px 1px rgba(255, 255, 255, 0.6) inset;
-webkit-box-shadow:1px 1px rgba(255, 255, 255, 0.6) inset;
}
.outstanding span {
color:#990000;
font-size:24px;
}
.notification {
border-width:1px;
border-style:solid;
padding:17px 17px 17px 17px;
margin-bottom:15px;
-moz-border-radius:5px;
-webkit-border:5px;
border-radius:5px;
-moz-box-shadow:1px 1px rgba(255, 255, 255, 0.6) inset;
-webkit-box-shadow:1px 1px rgba(255, 255, 255, 0.6) inset;
}
.notification.success {
background:#f1ffbf;
border-color:#a6d50f;
}
.notification.error {
background:#fecdc6;
border-color:#f45d43;
}
div.notification p {
margin: 0 0 3px 0;
padding: 0px;
}
#logo {
float:left;
position:relative;
top:22px;
}
table {
border-collapse:separate;
border-spacing:0px;
}
caption, th, td {
text-align:left;
font-weight:normal;
}
table, td, th {
vertical-align:middle;
}
td {
width:230px;
}
table {
width:100%;
}
thead td, thead th {
background-color:#E6E6E6;
}
tr td, thead th {
color:#404040;
padding:8px 0;
}
tr td.first, thead th.first {
border-left:0;
}
tr td {
vertical-align:middle;
}
thead td, thead th {
font-weight:bold;
padding:8px;
color:#333333;
}
tbody th {
padding:0 8px;
text-align:left;
}
td.alt {
background: #F5FAFA;
}
.listtable {
border: 1px solid #999999;
border-collapse: collapse;
}
.listtable thead td, .listtable thead th {
background: #394754 url('../img/nav-bg.gif') repeat-x top;
color: #FFFFFF;
padding: 5px 8px;
}
.listtable tr td {
border: 1px solid #999999;
padding: 5px 5px 5px 8px;
}
#nav {
line-height: 100%;
float:right;
margin-top:47px;
}
#nav li {
margin: 0 0 0 10px;
float: left;
position: relative;
list-style: none;
}
/* main level link */
#nav a {
background: #394754 url('../img/nav-bg.gif') repeat-x top;
font-weight: bold;
color: #fff;
text-decoration: none;
display: block;
padding: 8px 15px;
margin: 0;
border: 1px solid #394754;
-webkit-border-radius: 5px 5px 0px 0px;
-moz-border-radius: 5px 5px 0px 0px;
text-shadow: 0 1px 1px rgba(0, 0, 0, .3);
}
#nav a:hover {
background: #525f6d;
text-shadow: 0 1px 0 rgba(255, 255, 255, 1);
}
/* main level link hover */
#nav .current a, #nav li:hover > a {
background: #525f6d url('../img/nav-hover.gif') repeat-x top;
text-shadow: 0 1px 0 #394754;
}
/* sub levels link hover */
#nav ul li:hover a, #nav li:hover li a {
background: none;
border: none;
color: #666;
-webkit-box-shadow: none;
-moz-box-shadow: none;
}
#nav ul a:hover {
background: #728496 !important;
color: #fff !important;
-webkit-border-radius: 0;
-moz-border-radius: 0;
text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
}
/* dropdown */
#nav li:hover > ul {
display: block;
}
/* level 2 list */
#nav ul {
display: none;
margin: 0;
padding: 0;
width: 120px;
position: absolute;
top: 30px;
left: 0;
background: #f2f2f2 url('../img/nav-dd-bg.gif') repeat-x bottom;
border: solid 1px #d9d9d9;
-webkit-border-radius: 0px 5px 5px 5px;
-moz-border-radius: 0px 5px 5px 5px;
border-radius: 0px 5px 5px 5px;
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
}
#nav ul li {
float: none;
margin: 0;
padding: 0;
z-index:10;
}
#nav ul a {
font-weight: normal;
text-shadow: 0 1px 0 #fff;
}
/* level 3+ list */
#nav ul ul {
left: 181px;
top: -3px;
}
/* rounded corners of first and last link */
#nav ul li:first-child > a {
-webkit-border-top-left-radius: 0;
-moz-border-radius-topleft: 0;
-webkit-border-top-right-radius: 5px;
-moz-border-radius-topright: 5px;
}
#nav ul li:last-child > a {
-webkit-border-bottom-left-radius: 5px;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-right-radius: 5px;
-moz-border-radius-bottomright: 5px;
}
/* clearfix */
#nav:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
#nav {
display: inline-block;
}
html[xmlns] #nav {
display: block;
}
* html #nav {
height: 1%;
}
/* Forms */
form label {
padding-top:2px;
display: block;
color:#444;
font-size:14px;
font-weight:bold;
float:left;
width:150px;
}
form p {
margin-bottom:10px;
padding-bottom:20px;
}
form div.row {
clear:both;
margin-bottom:20px;
}
form .row label {
width:130px;
}
form input[type="radio"], form input[type="checkbox"] {
width:auto;
}
form .row .checkbox, form .row .radio {
width:auto;
margin-right:10px;
}
form .row .checkbox {
margin-left:10px;
}
form input, form textarea, form select {
background: #FFFFFF url('../img/input-bg.gif') repeat-x top;
-moz-border-radius:4px;
-webkit-border-radius:4px;
border:1px solid #afafaf;
outline:medium none;
padding:4px 6px;
margin:0;
color:#555;
}
form input:focus, form textarea:focus {
color: #000;
background: #FFFEDE;
border: 1px solid #aaa;
}
form input.error {
border:1px solid #e17984;
background:#f8dbdd;
color:#b36069;
}
form input {
/* width:150px; */
}
form input.small {
width:50px;
}
form input.large {
width:250px;
}
form optgroup {
background:#f7f7f7;
}
fieldset {
margin-bottom:15px;
}
form.nocol label {
float:none;
margin-bottom:5px;
}
form.nocol div.row {
margin-bottom:15px;
}
.auto {
width:100px;
}
.25 {
width:25px!important;
}
.50 {
width:50px!important;
}
.75 {
width:75px!important;
}
.100 {
width:100px;
}
.200 {
width:200px;
}
.300 {
width:300px;
}
#add-row {
margin:10px 0;
}
form textarea {
margin-bottom:20px;
}
ul#file-inputs,
ul#file-inputs li {
list-style: none;
margin: 0px;
padding: 0px;
}
.file_remove td {
text-decoration: line-through;
}
.btn_remove {
color: #C60D22;
padding:5px 0px 5px 26px;
border:0;
font-size:12px;
background:url('../img/cross_24.png') center left no-repeat;
cursor: pointer;
}
.button, button, .button2, .button:visited, .button2:visited {
-webkit-border-radius:5px 5px 5px 5px;
-o-border-radius:5px 5px 5px 5px;
-moz-border-radius:5px 5px 5px 5px;
border-radius:5px 5px 5px 5px;
background: #6abe18;
background: -moz-linear-gradient(top, #cbe951, #9dd254 5%, #5eac11);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #cbe951), color-stop(.03, #9dd254), to(#5eac11));
border-color:#53A40C #53A40C #468F0A;
border-style:solid;
border-width:1px;
color:#FFFFFF;
display:inline-block;
font-family:Arial,Helvetica,sans-serif;
font-size:14px;
font-weight:bold;
padding:9px 18px;
text-align:center;
text-decoration:none;
text-shadow:0 1px 1px #316903;
width:auto;
}
.button:hover, button:hover, .button2:hover {
background: #61b212;
background: -moz-linear-gradient(top, #cbe951, #98ca53 5%, #55a10b);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #cbe951), color-stop(.03, #98ca53), to(#55a10b));
border-bottom:1px solid #468F0A;
color:#FFFFFF;
}
.button:focus, button:focus, .button2:focus {
-moz-box-shadow:0 2px 5px #346C13 inset, 0 1px 0 #D0E0C7;
background: #61b212;
background: -moz-linear-gradient(top, #cbe951, #98ca53 5%, #55a10b);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #cbe951), color-stop(.03, #98ca53), to(#55a10b));
border:medium none;
color:#FFFFFF;
padding:10px 19px;
text-shadow:0 -1px 1px #316903;
}
.btn_grey{
/* GENERAL */
padding:5px 10px;
text-decoration: none;
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: bold;
text-align: center;
display:inline-block;
margin-top:-10px;
/* BACKGROUND GRADIENTS */
background: #E6E6E6;
background: -moz-linear-gradient(top, #FFF, #f5f5f5 5%, #e2e2e2 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #FFF), color-stop(.03, #f5f5f5), to(#e2e2e2));
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f5f5f5', EndColorStr='#e2e2e2'); /* IE6,IE7 only */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#f5f5f5', EndColorStr='#e2e2e2')"; /* IE8 only */
/* BORDER RADIUS */
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
/* BORDERS */
border:1px solid #d0d0d0;
border-bottom:1px solid #b5b5b5;
/* TEXT COLOR & SHADOW */
color:#5e5e5e;
text-shadow: 1px 1px 1px #FFF;
}
.btn_grey:hover {
/* BACKGROUND GRADIENTS */
background: #EEE;
background: -moz-linear-gradient(top, #FFF, #e5e5e5 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #FFF), to(#e5e5e5));
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFFFFF', EndColorStr='#e5e5e5'); /* IE6,IE7 only */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#FFFFFF', EndColorStr='#e5e5e5')"; /* IE8 only */
}
.btn_grey:focus {
/* GENERAL */
padding:5px 10px 4px 10px;
/* TEXT COLOR & SHADOW */
color:#FFF;
text-shadow: -1px -1px 1px #888;
/* BORDERS */
border:none;
/* BACKGROUND GRADIENTS */
background:#999;
background: -moz-linear-gradient(top, #999, #777 5%, #AFAFAF);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #999), color-stop(.05, #777), to(#AFAFAF));
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#777777', EndColorStr='#AFAFAF'); /* IE6,IE7 only */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#777777', EndColorStr='#AFAFAF')"; /* IE8 only */
/* INNER SHADOW & OUTER SHADOW */
box-shadow: inset 0px 2px 5px #444, 0 1px 0px #DDD;
-webkit-box-shadow: inset 0px 2px 5px #444, 0 1px 0px #DDD;
-moz-box-shadow: inset 0px 2px 7px #444, 0 1px 0px #DDD;
}
/* ========================== */
/* = Big notification boxes = */
/* ========================== */
.no_object_notification {
min-height:800px;
border:8px solid #ccc;
background:#f2f2f2 url('../../../third_party/themes/admin/pancake/img/good_stack.png') 650px 560px no-repeat!important;
margin:20px 0 20px 40px;
overflow:hidden;
}
.super-warning {
border:8px solid #DF0B24!important;
}
span.bad-news {
color:red;
display:block;
clear:both;
}
.no_object_notification h2, .no_object_notification h4 {
color:#666;
font-size:36px!important;
margin: 20px 0 0 0px!important;
font-family: 'Paytone One', arial, serif!important;
text-shadow:0 2px #fff!important;
}
.no_object_notification p {
margin:20px 0 0 0px;
font-size:18px;
}
.no_object_notification p.call_to_action {
clear:both;
width:450px;
}
.no_object_notification p.call_to_action a.blue-btn {
float:right;
}
/* ==================== */
/* = Installer Styles = */
/* ==================== */
ul.requirements {
list-style:none;
margin:20px 0 20px 20px ;
}
ul.requirements {
/*color:#4ECDC4;*/
color:#999;
}
ul.requirements li {
height:26px;
padding:2px 0 0 30px;
background:url('../../../third_party/themes/pancake/img/ui_icons/arrow_right_small.png') top left no-repeat;
}
.success {
color:#6abe18;
}
.col1 {
width:140px;
text-align:right;
padding-right:4px;
}
.col3 {
font-size:12px;
color:#69D2E7;
}
.pass {
color: #3EA224;
font-weight: bold;
font-size: 200%;
}
.fail {
color: #FF3000;
font-weight: bold;
font-size: 200%;
}
.focus {
background:#C5D4D9;
}
hr {
margin-top: 20px;
margin-left: 0px;
border: 0;
border-bottom: 1px solid #ccc;
}
.checks-table {
margin-top: 30px;
margin-bottom: 20px;
}
.checks-table td {
background-color: rgba(242, 242, 242, 0.75);
}
p.notification {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
}
code {
white-space: pre;
font-family: monospace;
background: #ddd;
padding: 4px;
border-radius: 4px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
installer/assets/img/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
installer/assets/img/nav-bg.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

4
installer/assets/js/jquery-1.11.2.min.js vendored Executable file

File diff suppressed because one or more lines are too long

10
installer/assets/js/main.js Executable file
View File

@@ -0,0 +1,10 @@
$('input, select, textarea').bind({
focusin: function () {
var wrapper = $(this).closest('tr');
$(wrapper).addClass('focus');
},
focusout: function () {
var wrapper = $(this).closest('tr');
$(wrapper).removeClass('focus');
}
});

103
installer/config/autoload.php Executable file
View File

@@ -0,0 +1,103 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| AUTO-LOADER
| -------------------------------------------------------------------
| This file specifies which systems should be loaded by default.
|
| In order to keep the framework as light-weight as possible only the
| absolute minimal resources are loaded by default. For example,
| the database is not connected to automatically since no assumption
| is made regarding whether you intend to use it. This file lets
| you globally define which systems you would like loaded with every
| request.
|
| -------------------------------------------------------------------
| Instructions
| -------------------------------------------------------------------
|
| These are the things you can load automatically:
|
| 1. Libraries
| 2. Helper files
| 3. Custom config files
| 4. Language files
| 5. Models
|
*/
/*
| -------------------------------------------------------------------
| Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
| $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/
$autoload['libraries'] = array('session');
/*
| -------------------------------------------------------------------
| Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('url', 'form', 'language');
/*
| -------------------------------------------------------------------
| Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
| config files. Otherwise, leave it blank.
|
*/
$autoload['config'] = array();
/*
| -------------------------------------------------------------------
| Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file. For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();
/*
| -------------------------------------------------------------------
| Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['model'] = array('model1', 'model2');
|
*/
$autoload['model'] = array();
/* End of file autoload.php */
/* Location: ./application/config/autoload.php */

3
installer/config/config.php Executable file
View File

@@ -0,0 +1,3 @@
<?php include FCPATH.'system/pancake/config/config.php';
$config['sess_use_database'] = FALSE;

1
installer/config/constants.php Executable file
View File

@@ -0,0 +1 @@
<?php include FCPATH.'system/pancake/config/constants.php';

62
installer/config/database.php Executable file
View File

@@ -0,0 +1,62 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the "Database Connection"
| page of the User Guide.
|
| -------------------------------------------------------------------
| EXPLANATION OF VARIABLES
| -------------------------------------------------------------------
|
| ['hostname'] The hostname of your database server.
| ['username'] The username used to connect to the database
| ['password'] The password used to connect to the database
| ['database'] The name of the database you want to connect to
| ['dbdriver'] The database type. ie: mysql. Currently supported:
mysql, mysqli, postgre, odbc, mssql, sqlite, oci8
| ['dbprefix'] You can add an optional prefix, which will be added
| to the table name when using the Active Record class
| ['pconnect'] TRUE/FALSE - Whether to use a persistent connection
| ['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
| ['cache_on'] TRUE/FALSE - Enables/disables query caching
| ['cachedir'] The path to the folder where cache files should be stored
| ['char_set'] The character set used in communicating with the database
| ['dbcollat'] The character collation used in communicating with the database
| ['swap_pre'] A default table prefix that should be swapped with the dbprefix
| ['autoinit'] Whether or not to automatically initialize the database.
| ['stricton'] TRUE/FALSE - forces "Strict Mode" connections
| - good for ensuring strict SQL while developing
|
| The $active_group variable lets you choose which connection group to
| make active. By default there is only one group (the "default" group).
|
| The $active_record variables lets you determine whether or not to load
| the active record class
*/
$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "";
$db['default']['password'] = "";
$db['default']['database'] = "";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
/* End of file database.php */
/* Location: ./application/config/database.php */

15
installer/config/doctypes.php Executable file
View File

@@ -0,0 +1,15 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$_doctypes = array(
'xhtml11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
'xhtml1-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
'xhtml1-trans' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
'xhtml1-frame' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
'html5' => '<!DOCTYPE html>',
'html4-strict' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',
'html4-trans' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
'html4-frame' => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'
);
/* End of file doctypes.php */
/* Location: ./application/config/doctypes.php */

View File

@@ -0,0 +1,64 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| Foreign Characters
| -------------------------------------------------------------------
| This file contains an array of foreign characters for transliteration
| conversion used by the Text helper
|
*/
$foreign_characters = array('223' => "ss", // ß
'224' => "a",
'225' => "a",
'226' => "a",
'229' => "a",
'227' => "ae",
'230' => "ae",
'228' => "ae",
'231' => "c",
'232' => "e", // è
'233' => "e", // é
'234' => "e", // ê
'235' => "e", // ë
'236' => "i",
'237' => "i",
'238' => "i",
'239' => "i",
'241' => "n",
'242' => "o",
'243' => "o",
'244' => "o",
'245' => "o",
'246' => "oe", // ö
'249' => "u",
'250' => "u",
'251' => "u",
'252' => "ue", // ü
'255' => "y",
'257' => "aa",
'269' => "ch",
'275' => "ee",
'291' => "gj",
'299' => "ii",
'311' => "kj",
'316' => "lj",
'326' => "nj",
'353' => "sh",
'363' => "uu",
'382' => "zh",
'256' => "aa",
'268' => "ch",
'274' => "ee",
'290' => "gj",
'298' => "ii",
'310' => "kj",
'315' => "lj",
'325' => "nj",
'352' => "sh",
'362' => "uu",
'381' => "zh",
);
/* End of file foreign_chars.php */
/* Location: ./application/config/foreign_chars.php */

16
installer/config/hooks.php Executable file
View File

@@ -0,0 +1,16 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Hooks
| -------------------------------------------------------------------------
| This file lets you define "hooks" to extend CI without hacking the core
| files. Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/hooks.html
|
*/
/* End of file hooks.php */
/* Location: ./application/config/hooks.php */

10
installer/config/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

11
installer/config/license.php Executable file
View File

@@ -0,0 +1,11 @@
<?php
if (!defined('BASEPATH')) {
exit('No direct script access allowed');
}
$config = [];
$config["first_name"] = "Timothy";
$config["last_name"] = "Bendt";
$config["license_key"] = "PAN-B144B7ZGZ1J8QPMK";
$config["email"] = "sirtimbly@gmail.com";

105
installer/config/mimes.php Executable file
View File

@@ -0,0 +1,105 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| MIME TYPES
| -------------------------------------------------------------------
| This file contains an array of mime types. It is used by the
| Upload class to help identify allowed file types.
|
*/
$mimes = array( 'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),
'bin' => 'application/macbinary',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => array('application/octet-stream', 'application/x-msdownload'),
'class' => 'application/octet-stream',
'psd' => 'application/x-photoshop',
'so' => 'application/octet-stream',
'sea' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => array('application/pdf', 'application/x-download'),
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'),
'wbxml' => 'application/wbxml',
'wmlc' => 'application/wmlc',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'gtar' => 'application/x-gtar',
'gz' => 'application/x-gzip',
'php' => 'application/x-httpd-php',
'php4' => 'application/x-httpd-php',
'php3' => 'application/x-httpd-php',
'phtml' => 'application/x-httpd-php',
'phps' => 'application/x-httpd-php-source',
'js' => 'application/x-javascript',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'tar' => 'application/x-tar',
'tgz' => array('application/x-tar', 'application/x-gzip-compressed'),
'xhtml' => 'application/xhtml+xml',
'xht' => 'application/xhtml+xml',
'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => array('audio/mpeg', 'audio/mpg'),
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'rv' => 'video/vnd.rn-realvideo',
'wav' => 'audio/x-wav',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'jpeg' => array('image/jpeg', 'image/pjpeg'),
'jpg' => array('image/jpeg', 'image/pjpeg'),
'jpe' => array('image/jpeg', 'image/pjpeg'),
'png' => array('image/png', 'image/x-png'),
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'shtml' => 'text/html',
'txt' => 'text/plain',
'text' => 'text/plain',
'log' => array('text/plain', 'text/x-log'),
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'xml' => 'text/xml',
'xsl' => 'text/xml',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'doc' => 'application/msword',
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'word' => array('application/msword', 'application/octet-stream'),
'xl' => 'application/excel',
'eml' => 'message/rfc822'
);
/* End of file mimes.php */
/* Location: ./application/config/mimes.php */

17
installer/config/profiler.php Executable file
View File

@@ -0,0 +1,17 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Profiler Sections
| -------------------------------------------------------------------------
| This file lets you determine whether or not various sections of Profiler
| data are displayed when the Profiler is enabled.
| Please see the user guide for info:
|
| http://codeigniter.com/user_guide/general/profiling.html
|
*/
/* End of file profiler.php */
/* Location: ./application/config/profiler.php */

43
installer/config/routes.php Executable file
View File

@@ -0,0 +1,43 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
| example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
| http://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There is one reserved routes:
|
| $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
*/
$route['default_controller'] = "wizard";
$route['wizard(:any)'] = "wizard$1";
$route['(:any)'] = "wizard/error";
/* End of file routes.php */
/* Location: ./application/config/routes.php */

66
installer/config/smileys.php Executable file
View File

@@ -0,0 +1,66 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| SMILEYS
| -------------------------------------------------------------------
| This file contains an array of smileys for use with the emoticon helper.
| Individual images can be used to replace multiple simileys. For example:
| :-) and :) use the same image replacement.
|
| Please see user guide for more info:
| http://codeigniter.com/user_guide/helpers/smiley_helper.html
|
*/
$smileys = array(
// smiley image name width height alt
':-)' => array('grin.gif', '19', '19', 'grin'),
':lol:' => array('lol.gif', '19', '19', 'LOL'),
':cheese:' => array('cheese.gif', '19', '19', 'cheese'),
':)' => array('smile.gif', '19', '19', 'smile'),
';-)' => array('wink.gif', '19', '19', 'wink'),
';)' => array('wink.gif', '19', '19', 'wink'),
':smirk:' => array('smirk.gif', '19', '19', 'smirk'),
':roll:' => array('rolleyes.gif', '19', '19', 'rolleyes'),
':-S' => array('confused.gif', '19', '19', 'confused'),
':wow:' => array('surprise.gif', '19', '19', 'surprised'),
':bug:' => array('bigsurprise.gif', '19', '19', 'big surprise'),
':-P' => array('tongue_laugh.gif', '19', '19', 'tongue laugh'),
'%-P' => array('tongue_rolleye.gif', '19', '19', 'tongue rolleye'),
';-P' => array('tongue_wink.gif', '19', '19', 'tongue wink'),
':P' => array('raspberry.gif', '19', '19', 'raspberry'),
':blank:' => array('blank.gif', '19', '19', 'blank stare'),
':long:' => array('longface.gif', '19', '19', 'long face'),
':ohh:' => array('ohh.gif', '19', '19', 'ohh'),
':grrr:' => array('grrr.gif', '19', '19', 'grrr'),
':gulp:' => array('gulp.gif', '19', '19', 'gulp'),
'8-/' => array('ohoh.gif', '19', '19', 'oh oh'),
':down:' => array('downer.gif', '19', '19', 'downer'),
':red:' => array('embarrassed.gif', '19', '19', 'red face'),
':sick:' => array('sick.gif', '19', '19', 'sick'),
':shut:' => array('shuteye.gif', '19', '19', 'shut eye'),
':-/' => array('hmm.gif', '19', '19', 'hmmm'),
'>:(' => array('mad.gif', '19', '19', 'mad'),
':mad:' => array('mad.gif', '19', '19', 'mad'),
'>:-(' => array('angry.gif', '19', '19', 'angry'),
':angry:' => array('angry.gif', '19', '19', 'angry'),
':zip:' => array('zip.gif', '19', '19', 'zipper'),
':kiss:' => array('kiss.gif', '19', '19', 'kiss'),
':ahhh:' => array('shock.gif', '19', '19', 'shock'),
':coolsmile:' => array('shade_smile.gif', '19', '19', 'cool smile'),
':coolsmirk:' => array('shade_smirk.gif', '19', '19', 'cool smirk'),
':coolgrin:' => array('shade_grin.gif', '19', '19', 'cool grin'),
':coolhmm:' => array('shade_hmm.gif', '19', '19', 'cool hmm'),
':coolmad:' => array('shade_mad.gif', '19', '19', 'cool mad'),
':coolcheese:' => array('shade_cheese.gif', '19', '19', 'cool cheese'),
':vampire:' => array('vampire.gif', '19', '19', 'vampire'),
':snake:' => array('snake.gif', '19', '19', 'snake'),
':exclaim:' => array('exclaim.gif', '19', '19', 'excaim'),
':question:' => array('question.gif', '19', '19', 'question') // no comma after last item
);
/* End of file smileys.php */
/* Location: ./application/config/smileys.php */

177
installer/config/user_agents.php Executable file
View File

@@ -0,0 +1,177 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| USER AGENT TYPES
| -------------------------------------------------------------------
| This file contains four arrays of user agent data. It is used by the
| User Agent Class to help identify browser, platform, robot, and
| mobile device data. The array keys are used to identify the device
| and the array values are used to set the actual name of the item.
|
*/
$platforms = array (
'windows nt 6.0' => 'Windows Longhorn',
'windows nt 5.2' => 'Windows 2003',
'windows nt 5.0' => 'Windows 2000',
'windows nt 5.1' => 'Windows XP',
'windows nt 4.0' => 'Windows NT 4.0',
'winnt4.0' => 'Windows NT 4.0',
'winnt 4.0' => 'Windows NT',
'winnt' => 'Windows NT',
'windows 98' => 'Windows 98',
'win98' => 'Windows 98',
'windows 95' => 'Windows 95',
'win95' => 'Windows 95',
'windows' => 'Unknown Windows OS',
'os x' => 'Mac OS X',
'ppc mac' => 'Power PC Mac',
'freebsd' => 'FreeBSD',
'ppc' => 'Macintosh',
'linux' => 'Linux',
'debian' => 'Debian',
'sunos' => 'Sun Solaris',
'beos' => 'BeOS',
'apachebench' => 'ApacheBench',
'aix' => 'AIX',
'irix' => 'Irix',
'osf' => 'DEC OSF',
'hp-ux' => 'HP-UX',
'netbsd' => 'NetBSD',
'bsdi' => 'BSDi',
'openbsd' => 'OpenBSD',
'gnu' => 'GNU/Linux',
'unix' => 'Unknown Unix OS'
);
// The order of this array should NOT be changed. Many browsers return
// multiple browser types so we want to identify the sub-type first.
$browsers = array(
'Flock' => 'Flock',
'Chrome' => 'Chrome',
'Opera' => 'Opera',
'MSIE' => 'Internet Explorer',
'Internet Explorer' => 'Internet Explorer',
'Shiira' => 'Shiira',
'Firefox' => 'Firefox',
'Chimera' => 'Chimera',
'Phoenix' => 'Phoenix',
'Firebird' => 'Firebird',
'Camino' => 'Camino',
'Netscape' => 'Netscape',
'OmniWeb' => 'OmniWeb',
'Safari' => 'Safari',
'Mozilla' => 'Mozilla',
'Konqueror' => 'Konqueror',
'icab' => 'iCab',
'Lynx' => 'Lynx',
'Links' => 'Links',
'hotjava' => 'HotJava',
'amaya' => 'Amaya',
'IBrowse' => 'IBrowse'
);
$mobiles = array(
// legacy array, old values commented out
'mobileexplorer' => 'Mobile Explorer',
// 'openwave' => 'Open Wave',
// 'opera mini' => 'Opera Mini',
// 'operamini' => 'Opera Mini',
// 'elaine' => 'Palm',
'palmsource' => 'Palm',
// 'digital paths' => 'Palm',
// 'avantgo' => 'Avantgo',
// 'xiino' => 'Xiino',
'palmscape' => 'Palmscape',
// 'nokia' => 'Nokia',
// 'ericsson' => 'Ericsson',
// 'blackberry' => 'BlackBerry',
// 'motorola' => 'Motorola'
// Phones and Manufacturers
'motorola' => "Motorola",
'nokia' => "Nokia",
'palm' => "Palm",
'iphone' => "Apple iPhone",
'ipod' => "Apple iPod Touch",
'sony' => "Sony Ericsson",
'ericsson' => "Sony Ericsson",
'blackberry' => "BlackBerry",
'cocoon' => "O2 Cocoon",
'blazer' => "Treo",
'lg' => "LG",
'amoi' => "Amoi",
'xda' => "XDA",
'mda' => "MDA",
'vario' => "Vario",
'htc' => "HTC",
'samsung' => "Samsung",
'sharp' => "Sharp",
'sie-' => "Siemens",
'alcatel' => "Alcatel",
'benq' => "BenQ",
'ipaq' => "HP iPaq",
'mot-' => "Motorola",
'playstation portable' => "PlayStation Portable",
'hiptop' => "Danger Hiptop",
'nec-' => "NEC",
'panasonic' => "Panasonic",
'philips' => "Philips",
'sagem' => "Sagem",
'sanyo' => "Sanyo",
'spv' => "SPV",
'zte' => "ZTE",
'sendo' => "Sendo",
// Operating Systems
'symbian' => "Symbian",
'SymbianOS' => "SymbianOS",
'elaine' => "Palm",
'palm' => "Palm",
'series60' => "Symbian S60",
'windows ce' => "Windows CE",
// Browsers
'obigo' => "Obigo",
'netfront' => "Netfront Browser",
'openwave' => "Openwave Browser",
'mobilexplorer' => "Mobile Explorer",
'operamini' => "Opera Mini",
'opera mini' => "Opera Mini",
// Other
'digital paths' => "Digital Paths",
'avantgo' => "AvantGo",
'xiino' => "Xiino",
'novarra' => "Novarra Transcoder",
'vodafone' => "Vodafone",
'docomo' => "NTT DoCoMo",
'o2' => "O2",
// Fallback
'mobile' => "Generic Mobile",
'wireless' => "Generic Mobile",
'j2me' => "Generic Mobile",
'midp' => "Generic Mobile",
'cldc' => "Generic Mobile",
'up.link' => "Generic Mobile",
'up.browser' => "Generic Mobile",
'smartphone' => "Generic Mobile",
'cellphone' => "Generic Mobile"
);
// There are hundreds of bots but these are the most common.
$robots = array(
'googlebot' => 'Googlebot',
'msnbot' => 'MSNBot',
'slurp' => 'Inktomi Slurp',
'yahoo' => 'Yahoo',
'askjeeves' => 'AskJeeves',
'fastcrawler' => 'FastCrawler',
'infoseek' => 'InfoSeek Robot 1.0',
'lycos' => 'Lycos'
);
/* End of file user_agents.php */
/* Location: ./application/config/user_agents.php */

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

332
installer/controllers/wizard.php Executable file
View File

@@ -0,0 +1,332 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Pancake
* A simple, fast, self-hosted invoicing application
*
* @package Pancake
* @author Pancake Dev Team
* @copyright Copyright (c) 2014, Pancake Payments
* @license http://pancakeapp.com/license
* @link http://pancakeapp.com
* @since Version 1.0
*/
// ------------------------------------------------------------------------
/**
* The install wizard controller
*
* @subpackage Controllers
* @category Wizard
* @property Installer $installer
*/
class Wizard extends CI_Controller {
/**
* @var string The path to the config folder
*/
private $config_path;
/**
* @var string The path to the config.php file
*/
private $config_file;
/**
* @var string The path to the stripe.php config file
*/
private $stripe_config_file;
/**
* @var string The path to the uploads folder
*/
private $upload_path;
// ------------------------------------------------------------------------
public function __construct() {
parent::__construct();
# Disable all caching for Varnish.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: private");
header("Pragma: no-cache");
$this->config_path = FCPATH . 'system/pancake/config';
$this->config_file = $this->config_path . "/config.php";
$this->stripe_config_file = $this->config_path . "/stripe.php";
$this->upload_path = FCPATH . 'uploads/';
require_once FCPATH . 'system/pancake/helpers/pancake_helper.php';
include_once FCPATH . 'system/pancake/libraries/Asset.php';
Asset::add_path(APPPATH . 'assets/');
Asset::set_asset_url(BASE_URL);
}
public function _detect_url_rewriting() {
include_once APPPATH . 'libraries/HTTP_Request.php';
$http = new HTTP_Request();
try {
$url_without_index_php = BASE_URL . "admin";
$contents = $http->request($url_without_index_php);
if (stristr($contents, "run the installer") === false) {
$contents = $http->request(BASE_URL . "index.php/admin");
if (stristr($contents, "run the installer") === false) {
$contents = $http->request(BASE_URL . "index.php?/admin");
if (stristr($contents, "run the installer") === false) {
# Could not detect any valid way to access Pancake, so assume it works if there's a .htaccess and it's Apache, otherwise default to "index.php".
$htaccess_servers = array(
"Apache",
"LiteSpeed",
"WebServerX",
"1984",
);
$use_index_php = "index.php";
foreach ($htaccess_servers as $server) {
if (strpos($_SERVER["SERVER_SOFTWARE"], $server) !== false) {
$use_index_php = is_file(FCPATH . '.htaccess') ? '' : 'index.php';
}
}
} else {
# Found "run the installer", works with index.php?.
$use_index_php = "index.php?";
}
} else {
# Found "run the installer", works with index.php.
$use_index_php = "index.php";
}
} else {
# Found "run the installer", works without index.php.
$use_index_php = "";
}
} catch (Exception $e) {
# Could not detect URL Rewriting correctly; defaulting to "index.php?".
$use_index_php = "index.php?";
}
if ($use_index_php !== $this->config->item("index_page")) {
if (is_really_writable($this->config_file)) {
file_put_contents($this->config_file, str_replace("\$config['index_page'] = \$config['index_page'];", "\$config['index_page'] = '$use_index_php'; #CORRECTED", file_get_contents($this->config_file)));
if (strstr(file_get_contents($this->config_file), "#CORRECTED") !== false) {
# Everything is OK; the file was corrected.
return true;
} else {
# Something went wrong while updating the file.
return false;
}
} else {
# The file can't be corrected.
return false;
}
} else {
# Everything is OK; detection was correct.
return true;
}
}
public function _detect_tls12() {
\Stripe\Stripe::setApiKey("sk_test_BQokikJOvBiI2HlWgH4olfQ2");
\Stripe\Stripe::$apiBase = "https://api-tls12.stripe.com";
$curl = new \Stripe\HttpClient\CurlClient([CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2]);
\Stripe\ApiRequestor::setHttpClient($curl);
try {
\Stripe\Charge::all();
return true;
} catch (\Stripe\Error\ApiConnection $e) {
# Try without the CURLOPT.
$curl = new \Stripe\HttpClient\CurlClient();
\Stripe\ApiRequestor::setHttpClient($curl);
try {
\Stripe\Charge::all();
# Fix stripe.php config file.
if (is_really_writable($this->stripe_config_file)) {
file_put_contents($this->stripe_config_file, str_replace("[CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2]", "[]", file_get_contents($this->stripe_config_file)));
if (strstr(file_get_contents($this->stripe_config_file), "\$config['stripe_curlopts'] = [];") !== false) {
# Everything is OK; the file was corrected.
return true;
} else {
# Something went wrong while updating the file.
return false;
}
} else {
# The file can't be corrected.
return false;
}
} catch (\Stripe\Error\ApiConnection $e) {
# Cannot work with or without the CURLOPT trickery.
return false;
}
}
}
public function index() {
if ($_POST) {
$this->load->library('form_validation');
$data = [];
$this->form_validation->set_rules('db_host', 'Database Host', 'required');
$this->form_validation->set_rules('db_user', 'Database Username', 'required');
$this->form_validation->set_rules('db_pass', 'Database Password', 'required');
$this->form_validation->set_rules('db_name', 'Database Name', 'required');
$this->form_validation->set_rules('db_port', 'Database Port', 'required');
$this->form_validation->set_rules('username', 'Username', 'required|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'required|min_length[5]|matches[password_confirm]');
$this->form_validation->set_rules('password_confirm', 'Password Confirmation', 'required');
if ($this->form_validation->run()) {
$data['hostname'] = $this->input->post('db_host');
$data['database'] = $this->input->post('db_name');
$data['dbprefix'] = 'pancake_';
$data['username'] = $this->input->post('db_user');
$data['password'] = $this->input->post('db_pass');
$data['port'] = $this->input->post('db_port');
$data['port'] = (!$data['port']) ? '3306' : $data['port'];
$db = $this->_check_db($data["hostname"], $data["username"], $data["password"], $data["database"], $data["port"]);
if ($db["success"]) {
if ($db["is_installed"]) {
$this->_output_step("steps/stop");
return;
} else {
$this->load->library('installer');
if ($this->installer->install($data, $this->input->post("username"), $this->input->post("password"))) {
# Redirect to Pancake, showing successful install modal.
redirect("admin");
} else {
$data['error'] = "The installer could not store the database configurations. Make sure that system/pancake/config is writable.";
$this->_output_step('steps/single_step', $data);
return;
}
}
} else {
$data['error'] = 'Database Error: ' . $db["error"];
$this->_output_step('steps/single_step', $data);
return;
}
} else {
$this->_output_step('steps/single_step', $data);
return;
}
} else {
$this->config->load("license");
$checks = $this->_run_checks();
if ($checks['can_continue']) {
$this->_output_step('steps/single_step');
} else {
$this->_output_step('steps/checks', $checks);
}
}
}
public function error() {
$this->_output_step('error');
}
protected function _run_checks() {
$data = array();
$data['is_url_rewriting_working'] = $this->_detect_url_rewriting();
$data['config_writable'] = is_really_writable($this->config_path) ? true : false;
$data['upload_writable'] = is_really_writable($this->upload_path) ? true : false;
$data['license_valid'] = $this->_check_license($this->config->item("license_key"));
$data['curl_installed'] = function_exists('curl_init');
$data['tls12'] = $this->_detect_tls12();
$data['installed'] = array(
'gd' => (extension_loaded('gd') && function_exists('gd_info')),
'json' => (extension_loaded('json') && function_exists('json_encode')),
'dom' => (extension_loaded('dom')),
'xml' => (extension_loaded('xml')),
'mysql' => (extension_loaded('mysqli') || extension_loaded('mysql')),
);
include_once APPPATH . 'libraries/HTTP_Request.php';
$http = new HTTP_Request();
try {
$http->request(MANAGE_PANCAKE_BASE_URL);
$data['manage_pancakeapp'] = true;
} catch (Exception $e) {
$data['manage_pancakeapp'] = false;
}
$can_continue = true;
foreach ($data as $value) {
if (is_array($value)) {
foreach ($value as $subvalue) {
if (!$subvalue) {
$can_continue = false;
break 2;
}
}
} else {
if (!$value) {
$can_continue = false;
break;
}
}
}
$data['can_continue'] = $can_continue;
return $data;
}
protected function _check_db($host, $user, $pass, $name, $port, $prefix = "pancake_") {
$is_installed = false;
if (function_exists("mysqli_connect")) {
$mysqli = @new mysqli($host, $user, $pass, $name, $port);
$success = !$mysqli->connect_error;
$error = $mysqli->connect_error;
if ($success) {
$is_installed = $mysqli->query("show tables like '" . $mysqli->real_escape_string($prefix) . "%'")->num_rows > 0;
}
} else {
$link = @mysql_connect($host . ':' . $port, $user, $pass, true);
if ($link) {
// If the database is not there create it
mysql_query('CREATE DATABASE IF NOT EXISTS ' . $name, $link);
}
$success = ($link && @ mysql_select_db($name, $link));
$error = mysql_error();
if ($success) {
$result = mysql_query("show tables like '" . mysql_real_escape_string($prefix, $link) . "%'", $link);
$is_installed = mysql_num_rows($result) > 0;
}
}
return [
"success" => $success,
"error" => $error,
"is_installed" => $is_installed,
];
}
private function _check_license($key) {
$key = trim($key);
$result = get_url_contents(MANAGE_PANCAKE_BASE_URL . 'verify/key/' . $key, false);
if (empty($result)) {
show_error('Pancake could not verify if the key "' . $key . '" is valid.');
}
return ($result === 'valid');
}
private function _output_step($view, $data = array()) {
$content = $this->load->view($view, $data, true);
$this->load->view('template', array('content' => $content));
}
}
/* End of file wizard.php */

View File

@@ -0,0 +1 @@
<?php include FCPATH.'system/pancake/core/Pancake_Exceptions.php';

1
installer/core/Pancake_URI.php Executable file
View File

@@ -0,0 +1 @@
<?php include FCPATH.'system/pancake/core/Pancake_URI.php';

10
installer/core/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

34
installer/errors/error_404.php Executable file
View File

@@ -0,0 +1,34 @@
<html>
<head>
<title>404 Page Not Found</title>
<style type="text/css">
body {
background-color: #fff;
margin: 40px;
font-family: Lucida Grande, Verdana, Sans-serif;
font-size: 12px;
color: #000;
}
#content {
border: #999 1px solid;
background-color: #fff;
padding: 20px 20px 12px 20px;
}
h1 {
font-weight: normal;
font-size: 14px;
color: #990000;
margin: 0 0 4px 0;
}
</style>
</head>
<body>
<div id="content">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>

34
installer/errors/error_db.php Executable file
View File

@@ -0,0 +1,34 @@
<html>
<head>
<title>Database Error</title>
<style type="text/css">
body {
background-color: #fff;
margin: 40px;
font-family: Lucida Grande, Verdana, Sans-serif;
font-size: 12px;
color: #000;
}
#content {
border: #999 1px solid;
background-color: #fff;
padding: 20px 20px 12px 20px;
}
h1 {
font-weight: normal;
font-size: 14px;
color: #990000;
margin: 0 0 4px 0;
}
</style>
</head>
<body>
<div id="content">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>

View File

@@ -0,0 +1,34 @@
<html>
<head>
<title>Error</title>
<style type="text/css">
body {
background-color: #fff;
margin: 40px;
font-family: Lucida Grande, Verdana, Sans-serif;
font-size: 12px;
color: #000;
}
#content {
border: #999 1px solid;
background-color: #fff;
padding: 20px 20px 12px 20px;
}
h1 {
font-weight: normal;
font-size: 14px;
color: #990000;
margin: 0 0 4px 0;
}
</style>
</head>
<body>
<div id="content">
<h1><?php echo $heading; ?></h1>
<?php echo $message; ?>
</div>
</body>
</html>

10
installer/errors/error_php.php Executable file
View File

@@ -0,0 +1,10 @@
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
<h4>A PHP Error was encountered</h4>
<p>Severity: <?php echo $severity; ?></p>
<p>Message: <?php echo $message; ?></p>
<p>Filename: <?php echo $filepath; ?></p>
<p>Line Number: <?php echo $line; ?></p>
</div>

View File

@@ -0,0 +1 @@
<?php include FCPATH.'system/pancake/errors/error_php_custom.php';

View File

@@ -0,0 +1 @@
<?php include FCPATH.'system/pancake/errors/error_php_custom.php';

10
installer/errors/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,19 @@
<?php
/**
* Set Value
*
* We have removed the part using form validation.
*
* @access public
* @param string
* @return mixed
*/
function set_value($field = '', $default = '')
{
if ( ! isset($_POST[$field]))
{
return $default;
}
return form_prep($_POST[$field], $field);
}

10
installer/helpers/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

10
installer/hooks/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

10
installer/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1 @@
<?php include FCPATH.'system/pancake/libraries/HTTP_Request.php';

10
installer/libraries/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

239
installer/libraries/installer.php Executable file
View File

@@ -0,0 +1,239 @@
<?php defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Pancake
* A simple, fast, self-hosted invoicing application
*
* @package Pancake
* @author Pancake Dev Team
* @copyright Copyright (c) 2010, Pancake Payments
* @license http://pancakeapp.com/license
* @link http://pancakeapp.com
* @since Version 1.0
*/
// ------------------------------------------------------------------------
/**
* Installer Library
*
* @subpackage Libraries
* @category Installer
*/
class Installer {
/**
* @var object The global CI object
*/
private $_ci;
public $dbdriver = 'mysqli';
/**
* Loads in the CI super object
*
* @access public
* @return void
*/
public function __construct() {
$this->_ci = &get_instance();
if (!function_exists('mysqli_connect')) {
$this->dbdriver = 'mysql';
}
}
public function install($config, $username, $password) {
$config['dbdriver'] = $this->dbdriver;
$config['db_debug'] = true;
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";
$config['autoinit'] = true;
$this->_ci->load->database($config);
$this->_ci->load->dbforge();
$has_utf8mb4 = (version_compare($this->_ci->db->version(), "5.5") == 1);
if ($has_utf8mb4) {
$config['char_set'] = "utf8mb4";
$config['dbcollat'] = "utf8mb4_general_ci";
}
$schema = file_get_contents(APPPATH . 'schema/pancake.sql');
if (!$this->_write_db_config($config, $has_utf8mb4)) {
return false;
}
$data["username"] = $username;
$data["password"] = $password;
$data['salt'] = substr(md5(uniqid(rand(), true)), 0, 10);
$data['password'] = sha1($data['password'] . $data['salt']);
$data['dbprefix'] = $config['dbprefix'];
$data['version'] = file_get_contents(FCPATH . 'system/pancake/VERSION');
$data['rss_password'] = random_string('alnum', 12);
$data['timezone'] = @date_default_timezone_get();
// Include migration config to know which migration to start from
include './system/pancake/config/migration.php';
$data['migration'] = $config['migration_version'];
$data['now'] = time();
$data['now_datetime'] = date("Y-m-d H:i:s");
$this->_ci->config->load("license");
$data["site_name"] = "Pancake";
$data["first_name"] = $this->_ci->config->item("first_name");
$data["notify_email"] = $this->_ci->config->item("email");
$data["last_name"] = $this->_ci->config->item("last_name");
$data["license_key"] = $this->_ci->config->item("license_key");
$data["currency"] = "USD";
$data["tax_rate"] = "0";
$data["theme"] = "flat-pancake";
$data["mailing_address"] = "";
foreach ($data as $key => $val) {
if (strtoupper($key) == "TAX_RATE") {
// Fixes an issue with MySQL in Strict Mode if the tax was empty.
$val = (float) $val;
}
$escaped_val = $this->_ci->db->escape_str($val);
$schema = str_replace('{' . strtoupper($key) . '}', $escaped_val, $schema);
}
$schema = explode('-- split --', $schema);
foreach ($schema as $query) {
if (stristr($query, "charset = utf8") !== false && $has_utf8mb4) {
$query = str_ireplace("charset = utf8", "charset = utf8mb4", $query);
}
if (!$this->_ci->db->query(rtrim(trim($query), "\n;"))) {
switch ($this->dbdriver) {
case 'mysql':
$error = mysql_error();
break;
case 'mysqli':
$error = mysqli_error($this->_ci->db->conn_id);
break;
}
show_error(strtoupper($this->dbdriver) . ' ERROR: ' . $error);
}
}
$this->_ci->load->helper("cookie");
set_cookie(array(
'name' => 'identity',
'value' => $username,
'expire' => 60 * 60 * 24 * 365 * 2,
));
$salt = sha1($password);
$this->_ci->db->update("users", ['remember_code' => $salt]);
set_cookie(array(
'name' => 'remember_code',
'value' => $salt,
'expire' => 60 * 60 * 24 * 365 * 2,
));
return true;
}
private function _write_db_config($config, $has_utf8mb4) {
$replace = array(
'{HOSTNAME}' => $config['hostname'],
'{USERNAME}' => $config['username'],
'{PASSWORD}' => $config['password'],
'{DATABASE}' => $config['database'],
'{PORT}' => $config['port'],
'{DBPREFIX}' => $config['dbprefix'],
);
$charset = $has_utf8mb4 ? "utf8mb4" : "utf8";
$template = <<<TEMP
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the 'Database Connection'
| page of the User Guide.
|
| -------------------------------------------------------------------
| EXPLANATION OF VARIABLES
| -------------------------------------------------------------------
|
| ['hostname'] The hostname of your database server.
| ['username'] The username used to connect to the database
| ['password'] The password used to connect to the database
| ['database'] The name of the database you want to connect to
| ['dbdriver'] The database type. ie: mysql. Currently supported:
mysql, mysqli, postgre, odbc, mssql, sqlite, oci8
| ['dbprefix'] You can add an optional prefix, which will be added
| to the table name when using the Active Record class
| ['pconnect'] TRUE/FALSE - Whether to use a persistent connection
| ['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
| ['cache_on'] TRUE/FALSE - Enables/disables query caching
| ['cachedir'] The path to the folder where cache files should be stored
| ['char_set'] The character set used in communicating with the database
| ['dbcollat'] The character collation used in communicating with the database
| ['swap_pre'] A default table prefix that should be swapped with the dbprefix
| ['autoinit'] Whether or not to automatically initialize the database.
| ['stricton'] TRUE/FALSE - forces 'Strict Mode' connections
| - good for ensuring strict SQL while developing
|
| The \$active_group variable lets you choose which connection group to
| make active. By default there is only one group (the 'default' group).
|
| The \$active_record variables lets you determine whether or not to load
| the active record class
*/
\$active_group = 'default';
\$active_record = TRUE;
\$db['default']['hostname'] = '{HOSTNAME}';
\$db['default']['username'] = '{USERNAME}';
\$db['default']['password'] = '{PASSWORD}';
\$db['default']['database'] = '{DATABASE}';
\$db['default']['dbdriver'] = '{$this->dbdriver}';
\$db['default']['dbprefix'] = '{DBPREFIX}';
\$db['default']['pconnect'] = FALSE;
\$db['default']['db_debug'] = TRUE;
\$db['default']['cache_on'] = FALSE;
\$db['default']['cachedir'] = '';
\$db['default']['char_set'] = '$charset';
\$db['default']['dbcollat'] = '{$charset}_general_ci';
\$db['default']['swap_pre'] = '';
\$db['default']['autoinit'] = TRUE;
\$db['default']['stricton'] = TRUE;
\$db['default']['port'] = {PORT};
/* End of file database.php */
/* Location: ./application/config/database.php */
TEMP;
$new_file = str_replace(array_keys($replace), $replace, $template);
$handle = @fopen(FCPATH . 'system/pancake/config/database.php', 'w+');
if ($handle !== false) {
return @fwrite($handle, $new_file);
}
return false;
}
}
/* End of file installer.php */

10
installer/models/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

1362
installer/schema/pancake.sql Executable file

File diff suppressed because it is too large Load Diff

14
installer/views/error.php Executable file
View File

@@ -0,0 +1,14 @@
<h2>Error</h2>
<p>
It looks like Pancake has not been installed. <strong>To run the installer, <?php echo anchor('', 'click here'); ?></strong>.
</p>
<p>Pancake thinks that the URL to your Pancake is:<br /><strong><?php echo BASE_URL;?></strong></p><p>Pancake thinks that you were trying to load the following page:<br /><strong><?php echo $this->uri->uri_string();?></strong></p>
<p>If you haven't installed, and the above information is incorrect, that means that Pancake is having problems making sense of your server's configurations. <a href="<?php echo PANCAKEAPP_COM_BASE_URL; ?>account/support/ticket/new">Start a <strong>free</strong> support ticket</a>, and we'll help you sort it out.</p>
<p class="fail">
If you have any difficulty installing Pancake, don't forget:<br/>
<strong>We can install Pancake for you, for free.</strong><br/>Just
<a href="<?php echo PANCAKEAPP_COM_BASE_URL; ?>account/support/ticket/new">start a
<strong>free</strong> support ticket</a>.
</p>

10
installer/views/index.html Executable file
View File

@@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Directory access is forbidden.</p>
</body>
</html>

View File

@@ -0,0 +1,96 @@
<h2>Your server is missing a couple of things.</h2>
<p class="fail">
If you have any difficulty installing Pancake, don't forget:<br/>
<strong>We can install Pancake for you, for free.</strong><br/>Just
<a href="<?php echo PANCAKEAPP_COM_BASE_URL; ?>account/support/ticket/new">start a
<strong>free</strong> support ticket</a>.
</p>
<p>Please fix the below errors and refresh to re-check.</p>
<table cellspacing="0" class="listtable checks-table">
<thead>
<tr>
<th width="10%">Status</th>
<th>Requirement</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span class="<?php echo $is_url_rewriting_working ? 'pass' : 'fail'; ?>"><?php echo $is_url_rewriting_working ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>Pancake must be able to reliably detect whether URL rewriting is on or off.</td>
</tr>
<tr>
<td>
<span class="<?php echo $manage_pancakeapp ? 'pass' : 'fail'; ?>"><?php echo $manage_pancakeapp ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>Your server must be able to communicate with pancakeapp.com (otherwise you won't be able to receive updates).</td>
</tr>
<tr>
<td>
<span class="<?php echo $license_valid ? 'pass' : 'fail'; ?>"><?php echo $license_valid ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>
<?php if ($license_valid): ?>
Your license key is valid.
<?php else: ?>
Your license key is not valid.
<?php endif; ?>
</td>
</tr>
<tr>
<td>
<span class="<?php echo $curl_installed ? 'pass' : 'fail'; ?>"><?php echo $curl_installed ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>The Curl PHP extension must be installed.</td>
</tr>
<tr>
<td>
<span class="<?php echo $installed['gd'] ? 'pass' : 'fail'; ?>"><?php echo $installed['gd'] ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>The GD PHP extension must be installed.</td>
</tr>
<tr>
<td>
<span class="<?php echo $installed['json'] ? 'pass' : 'fail'; ?>"><?php echo $installed['json'] ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>The JSON PHP extension must be installed.</td>
</tr>
<tr>
<td>
<span class="<?php echo $installed['dom'] ? 'pass' : 'fail'; ?>"><?php echo $installed['dom'] ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>The DOM PHP extension must be installed.</td>
</tr>
<tr>
<td>
<span class="<?php echo $installed['mysql'] ? 'pass' : 'fail'; ?>"><?php echo $installed['mysql'] ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>The MySQL (or MySQLi) PHP extension must be installed.</td>
</tr>
<tr>
<td>
<span class="<?php echo $installed['xml'] ? 'pass' : 'fail'; ?>"><?php echo $installed['xml'] ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>The XML PHP extension must be installed.</td>
</tr>
<tr>
<td><span class="<?php echo $tls12 ? 'pass' : 'fail'; ?>"><?php echo $tls12 ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>Your server must be able to make TLS 1.2 connections to other servers.</td>
</tr>
<tr>
<td>
<span class="<?php echo $config_writable ? 'pass' : 'fail'; ?>"><?php echo $config_writable ? 'PASS' : 'FAIL</span>'; ?></span>
</td>
<td>The system/pancake/config folder must be writable.</td>
</tr>
<tr>
<td>
<span class="<?php echo $upload_writable ? 'pass' : 'fail'; ?>"><?php echo $upload_writable ? 'PASS' : 'FAIL'; ?></span>
</td>
<td>The uploads directory must be writable.</td>
</tr>
</tbody>
</table>

View File

@@ -0,0 +1,8 @@
<h2 class="installed">Congratulations!</h2>
<p>Pancake has been successfully installed on your server!</p>
<p>If you have a couple seconds would you mind telling your friends about us? A quick <a href="http://twitter.com/home?status=I%20just%20installed%20@pancakeapp%20and%20it%20looks%20awesome!%20http://pancakeapp.com">tweet</a> or mention on <a href="http://facebook.com">Facebook</a> is awesome!</p>
<h4>You rule! Now go collect stacks!</h4>
<p class="center"><a href="<?php echo site_url('admin/users/login'); ?>" class="button">Login!</a></p>

View File

@@ -0,0 +1,89 @@
<h2>Let's make some Pancakes!</h2>
<?php
$errors = validation_errors(' ', '<br />');
$has_errors = ($errors || isset($error));
?>
<p class="<?php echo $has_errors ? "fail" : ""; ?>">
If you have any difficulty installing Pancake, don't forget:<br/>
<strong>We can install Pancake for you, for free.</strong><br/>Just
<a href="<?php echo PANCAKEAPP_COM_BASE_URL; ?>account/support/ticket/new">start a
<strong>free</strong> support ticket</a>.
</p>
<hr>
<?php if (isset($error)): ?>
<p class="notification error"><?php echo $error; ?></p>
<?php endif; ?>
<?php if ($errors): ?>
<p class="notification error"><?php echo $errors; ?></p>
<?php endif; ?>
<form method="post" action="" id="form" name="form">
<p>Enter your database connection settings.</p>
<table style="width: 100%;">
<tr>
<th class="col1"><label for="db_host">Database Host:</label></th>
<td class="col2">
<input id="db_host" name="db_host" type="text" size="20" value="<?php echo set_value("db_host", "localhost"); ?>"/>
</td>
<td class="col3">localhost or an ip (192.168.0.1)</td>
</tr>
<tr>
<th class="col1"><label for="db_port">Database Port:</label></th>
<td class="col2">
<input id="db_port" name="db_port" type="text" size="20" value="<?php echo set_value("db_port", "3306"); ?>"/>
</td>
<td class="col3">Which port is MySQL running on? Usually 3306.</td>
</tr>
<tr>
<th class="col1"><label for="db_name">Database Name:</label></th>
<td class="col2">
<input id="db_name" name="db_name" type="text" size="20" value="<?php echo set_value("db_name"); ?>"/>
</td>
<td class="col3">The name of the database to use.</td>
</tr>
<input name="dbprefix" type="hidden" value="pancake_"/>
<tr>
<th class="col1"><label for="db_user">Username:</label></th>
<td class="col2">
<input id="db_user" name="db_user" type="text" size="20" value="<?php echo set_value("db_user"); ?>"/>
</td>
<td class="col3">Your MySQL username.</td>
</tr>
<tr>
<th class="col1"><label for="db_pass">Password:</label></th>
<td class="col2"><input id="db_pass" name="db_pass" type="password" size="20" value=""/>
</td>
<td class="col3">Your MySQL password.</td>
</tr>
</table>
<br/>
<p>Enter the login details you want to use for Pancake.</p>
<table style="width: 100%;">
<tr>
<th class="col1"><label for="username">Admin Username</label></th>
<td class="col2">
<input id="username" name="username" type="text" size="20" value="<?php echo set_value('username', 'admin'); ?>"/>
</td>
<td class="col3">What you want to login with.</td>
</tr>
<tr>
<th class="col1"><label for="password">Password</label></th>
<td class="col2"><input id="password" name="password" type="password" size="20"/></td>
<td class="col3">Choose a password.</td>
</tr>
<tr>
<th class="col1"><label for="password_confirm">Confirm Password</label></th>
<td class="col2"><input id="password_confirm" name="password_confirm" type="password" size="20"/></td>
<td class="col3">Confirm the password.</td>
</tr>
</table>
<br/>
<p class="center">
<button type="submit" class="button">Mmmm... Let's Eat!</button>
</p>
</form>

13
installer/views/steps/stop.php Executable file
View File

@@ -0,0 +1,13 @@
<h2>Stop!</h2>
<p>You have already installed Pancake!<br/>You almost certainly don't want to overwrite all the data you had.</p>
<p>
If you are just updating your Pancake's files manually, you should find the file that was in
<code>system/pancake/config/database.php</code> before the update, and put it back there.
</p>
<p>You cannot use the installer because you've already installed Pancake.</p>
<p class="fail">
If you have any difficulty installing Pancake, don't forget:<br/>
<strong>We can install Pancake for you, for free.</strong><br/>Just
<a href="<?php echo PANCAKEAPP_COM_BASE_URL; ?>account/support/ticket/new">start a
<strong>free</strong> support ticket</a>.
</p>

View File

@@ -0,0 +1,13 @@
<h2>Let's make some Pancakes!</h2>
<p>Ingredient list, make sure you have these to hand:</p>
<ul class="requirements">
<li>License key (in receipt email)</li>
<li>Database name</li>
<li>Database username</li>
<li>Database password</li>
<li>Database host</li>
</ul>
<p>If you have all the information ready yourself, then you're ready to go. Hit the "Install Pancake!" link below to continue.</p>
<p>If for any reason this recipe fails and the file creation doesn't work please try again then <a href="<?php echo PANCAKEAPP_COM_BASE_URL; ?>account/support/ticket/new">open a <strong>free</strong> support ticket</a> if it still does not work.</p>
<p class="center"><a href="<?php echo BASE_URL."index.php?/wizard/step1"; ?>" class="button">Install Pancake!</a></p>

27
installer/views/template.php Executable file
View File

@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<title>Pancake Payments Install Wizard</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="<?php echo Asset::get_src('style.css', 'css'); ?>" media="screen">
<link rel='stylesheet' href='//fonts.googleapis.com/css?family=Paytone+One&v1' media="screen">
</head>
<body>
<div id="wrapper">
<div id="content" class="no_object_notification">
<?php echo $content; ?>
</div>
<!-- /content -->
<div id="footer">
</div>
<!-- /footer -->
</div>
<!-- /wrapper -->
<script src="<?php echo Asset::get_src('jquery-1.11.2.min.js', 'js'); ?>"></script>
<script src="<?php echo Asset::get_src('main.js', 'js'); ?>"></script>
</body>
</html>