Initial commit

This commit is contained in:
root
2026-01-19 17:44:46 +01:00
commit 823af8b11d
8721 changed files with 1130846 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
<div class="panel-body body">
<div id="msg-box" class="alert alert-danger">{$errors}</div>
<form id="nav">
<div class="row">
<div class=" col-md-13">
<div class="panel-body" style="text-align: center">
</div>
</div>
</div>
</form>
</div>
<footer class="modal-footer">
<button class="btn btn-warning btn-s-wide" type="button" id="re-check">{$langs['labels']['Re-check']}</button>
</footer>
<script>
{literal}
$(function(){
{/literal}
var opt = {
action: 'errors',
langs: {$langsJs},
modRewriteUrl: '{$modRewriteUrl}',
apiPath: '{$apiPath}',
serverType: '{$serverType}',
OS: '{$OS}'
}
{literal}
var installScript = new InstallScript(opt);
installScript.showLoading();
installScript.actionsChecking();
})
{/literal}
</script>

View File

@@ -0,0 +1,47 @@
<div class="panel-body body">
<form id="nav">
<div class="row">
<div class=" col-md-13">
<div class="panel-body">
<div class="likes">
<p>
{$langs['labels']['Congratulation! Welcome to EspoCRM']}
</p>
</div>
{if $cronHelp}
<div class="cron-help">
{$cronTitle}
<pre>
{$cronHelp}
</pre>
<p>
{assign var="link" value="<a target=\"_blank\" href=\"https://www.espocrm.com/documentation/administration/server-configuration/#user-content-setup-a-crontab\">{$langs['labels']['Setup instructions']}</a>"}
{assign var="message" value="{$langs['labels']['Crontab setup instructions']|replace:'{SETUP_INSTRUCTIONS}':$link}"}
{$message}
</p>
</div>
{/if}
</div>
</div>
</div>
</form>
</div>
<footer class="modal-footer">
<button class="btn btn-primary" type="button" id="start">{$langs['labels']['Go to EspoCRM']}</button>
</footer>
<script>
{literal}
$(function(){
{/literal}
var langs = {$langsJs};
{literal}
var installScript = new InstallScript({action: 'finish', langs: langs});
})
{/literal}
</script>

View File

@@ -0,0 +1 @@
<p class="credit small">&copy; 2025 <a href="https://www.espocrm.com">EspoCRM, Inc.</a></p>

View File

@@ -0,0 +1,15 @@
<div class="panel-heading main-header">
<img src="../{$logoSrc}" style="height: 43px;">
</div>
<header class="step-header">
<div class="row">
<div class="col-md-10">
<h4>
{$langs['labels']["{$action} page title"]}
</h4>
</div>
<div class="col-md-2 version" style="text-align: right">
{$langs['labels']['Version']} {$version}
</div>
</div>
</header>

View File

@@ -0,0 +1,37 @@
<!doctype html>
<html>
<head>
<title>{$langs['labels']['headerTitle']}</title>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<script type="application/json" data-name="loader-params">{$loaderParams}</script>
{if $isBuilt}
{foreach from=$libFileList item=file}
<script type="text/javascript" src="../{$file}"></script>
{/foreach}
{/if}
<script type="text/javascript" src="js/install.js"></script>
<link href="../{$stylesheet}" rel="stylesheet">
<link href="css/install.css" rel="stylesheet">
<link rel="shortcut icon" href="../client/img/favicon.ico" type="image/x-icon">
</head>
<body class='install-body'>
<a href="index.tpl"></a>
<header id="header"></header>
<div class="container content">
<div class="col-md-offset-1 col-md-10">
<div class="panel panel-default">
{include file="header.tpl"}
{include file="$tplName"}
</div>
</div>
</div>
<footer class="container">{include file="footer.tpl"}</footer>
</body>
</html>

71
install/core/tpl/main.tpl Normal file
View File

@@ -0,0 +1,71 @@
<form id="nav">
<div class="panel-body">
<div id="msg-box" class="alert hide"></div>
<div class="row">
<div class="col-md-12">
<div style="text-align: center">
<div class="content-img margin-bottom">
<img class="devices" src="img/start.png" alt="EspoCRM" style="border-radius: var(--border-radius);">
</div>
{$langs['labels']['Main page header']}
</div>
</div>
</div>
<div class="row margin-top">
<div class="cell cell-language col-md-4">
<label class="field-label-language control-label">{$langs['fields']['Choose your language']}</label>
<div class="field field-language">
<select name="user-lang" class="form-control">
{foreach from=$languageList item=lbl key=val}
{if $val == $fields['user-lang'].value}
<option selected="selected" value="{$val}">{$lbl}</option>
{else}
<option value="{$val}">{$lbl}</option>
{/if}
{/foreach}
</select>
</div>
</div>
<div class="cell cell-theme col-md-4">
<label class="field-label-theme control-label">{$themeLabel}</label>
<div class="field field-language">
<select name="theme" class="form-control">
{foreach from=$themes item=lbl key=val}
{if $val == $fields['theme'].value}
<option selected="selected" value="{$val}">{$lbl}</option>
{else}
<option value="{$val}">{$lbl}</option>
{/if}
{/foreach}
</select>
</div>
</div>
<div class="cell cell-website col-md-4" style="padding-top: 24px; text-align: right;">
<a
target="_blank"
href="https://www.espocrm.com/documentation/administration/installation/"
style="font-weight: 600;"
>{$langs['labels']['Installation Guide']}</a>
</div>
</div>
</div>
<footer class="modal-footer">
<button class="btn btn-primary btn-s-wide" type="button" id="start">{$langs['labels']['Start']}</button>
</footer>
</form>
<script>
{literal}
$(function(){
{/literal}
var langs = {$langsJs};
{literal}
var installScript = new InstallScript({action: 'main', langs: langs});
})
{/literal}
</script>

View File

@@ -0,0 +1,121 @@
<div class="setup-confirmation panel-body body">
<div id="msg-box" class="alert hide"></div>
<form id="nav">
<div class="row">
<table class="table table-striped">
<thead>
<tr>
<th colspan="3">{$langs['labels']['PHP Configuration']}</th>
</tr>
</thead>
<tbody>
{foreach from=$phpRequirementList key=name item=value}
<tr class="list-row">
<td class="cell col-md-5">
{if isset($langs['systemRequirements'][$name])}
{$langs['systemRequirements'][{$name}]}
{else}
{$name}
{/if}
</td>
<td class="cell col-md-3">{$value['actual']}</td>
<td class="cell col-md-4">
{if $value['acceptable'] eq true} <span class="text-success">{$langs['labels']['Success']}</span> {else} <span class="text-danger">{$langs['labels']['Fail']}
{if $value['type'] eq 'lib'} ({$langs['labels']['extension is missing']}) {/if}
{if $value['type'] eq 'param'} ({$value['required']} {$langs['labels']['is recommended']}) {/if}
</span> {/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
<table class="table table-striped">
<thead>
<tr>
<th colspan="2">{$langs['labels']['MySQL Configuration']}</th>
</tr>
</thead>
<tbody>
{foreach from=$mysqlRequirementList key=name item=value}
<tr class="list-row">
<td class="cell col-md-5">
{if isset($langs['systemRequirements'][$name])}
{$langs['systemRequirements'][{$name}]}
{else}
{$name}
{/if}
</td>
<td class="cell col-md-3">{$value['actual']}</td>
<td class="cell col-md-4">
{if $value['acceptable'] eq true} <span class="text-success">{$langs['labels']['Success']}</span> {else} <span class="text-danger">{$langs['labels']['Fail']}
{if $value['type'] eq 'param'} ({$value['required']} {$langs['labels']['is recommended']}) {/if}
</span> {/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
<table class="table table-striped">
<thead>
<tr>
<th colspan="2">{$langs['labels']['Permission Requirements']}</th>
</tr>
</thead>
<tbody>
{foreach from=$permissionRequirementList key=name item=value}
<tr class="list-row">
<td class="cell col-md-5">
{if isset($langs['systemRequirements'][$name])}
{$langs['systemRequirements'][{$name}]}
{else}
{$name}
{/if}
</td>
<td class="cell col-md-3">{$langs['systemRequirements'][{$value['type']}]}</td>
<td class="cell col-md-4">
{if $value['acceptable'] eq true} <span class="text-success">{$langs['labels']['Success']}</span> {else} <span class="text-danger">{$langs['labels']['Fail']}</span> {/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
<div class="cell cell-website pull-right margin-top" style="text-align: right">
<a
target="_blank"
href="https://www.espocrm.com/documentation/administration/server-configuration/"
style="font-weight: 600;"
>{$langs['labels']['Configuration Instructions']}</a>
</div>
</div>
</form>
<div class="space"></div>
</div>
<footer class="modal-footer">
<button class="btn btn-default btn-s-wide pull-left" type="button" id="back">{$langs['labels']['Back']}</button>
<button class="btn btn-warning btn-s-wide" type="button" id="re-check">{$langs['labels']['Re-check']}</button>
<button class="btn btn-primary btn-s-wide" type="button" id="next">{$langs['labels']['Install']}</button>
</footer>
<script>
{literal}
$(function(){
{/literal}
var opt = {
action: 'setupConfirmation',
langs: {$langsJs},
modRewriteUrl: '{$modRewriteUrl}',
apiPath: '{$apiPath}',
serverType: '{$serverType}',
OS: '{$OS}'
}
{literal}
var installScript = new InstallScript(opt);
jQuery('#re-check').click(function(){
installScript.goTo('setupConfirmation');
});
})
{/literal}
</script>

View File

@@ -0,0 +1,44 @@
<div class="panel-body body">
<div id="msg-box" class="alert hide"></div>
<form id="nav">
<div class="row">
<div class=" col-md-12">
<div class="row">
<div class="cell cell-website col-sm-12 form-group">
<div class="field field-website">
<textarea rows="16" class="license-field form-control">{$license}</textarea>
</div>
</div>
</div>
</div>
</div>
<div class="cell cell-website form-group">
<label class="point-lbl" for="license-agree" style="user-select: none;">
<input
type="checkbox"
name="license-agree"
id="license-agree"
class="input-checkbox form-checkbox"
value="1"
{if $fields['license-agree'].value}checked="checked"{/if}
>
{$langs['labels']['I accept the agreement']}
</label>
</div>
</form>
</div>
<footer class="modal-footer">
<button class="btn btn-default btn-s-wide pull-left" type="button" id="back">{$langs['labels']['Back']}</button>
<button class="btn btn-primary btn-s-wide" type="button" id="next">{$langs['labels']['Next']}</button>
</footer>
<script>
{literal}
$(function(){
{/literal}
var langs = {$langsJs};
{literal}
var installScript = new InstallScript({action: 'step1', langs: langs});
})
{/literal}
</script>

View File

@@ -0,0 +1,90 @@
<div class="panel-body body">
<div id="msg-box" class="alert hide"></div>
<form id="nav" autocomplete="off">
<div class="row">
<div class=" col-md-6">
<div class="row">
<div class="cell cell-db-platform col-sm-12 form-group">
<label class="field-label-db-platform control-label">{$langs['fields']['Platform']}</label>
<div class="field field-db-platform">
<select
name="db-platform"
class="main-element form-control"
>
{foreach from=$platforms item=lbl key=val}
{if $val == $fields['db-platform'].value}
<option selected="selected" value="{$val}">{$lbl}</option>
{else}
<option value="{$val}">{$lbl}</option>
{/if}
{/foreach}
</select>
</div>
</div>
<div class="cell cell-website col-sm-12 form-group">
<label class="field-label-website control-label">{$langs['fields']['Host Name']} *</label>
<div class="field field-website">
<input type="text" value="{$fields['host-name'].value}" name="host-name" class="main-element form-control">
</div>
</div>
<div class="cell cell-website col-sm-12 form-group">
<label class="field-label-website control-label">{$langs['fields']['Database Name']} *</label>
<div class="field field-website">
<input type="text" value="{$fields['db-name'].value}" name="db-name" class="main-element form-control">
</div>
</div>
<div class="cell cell-website col-sm-12 form-group">
<label class="field-label-website control-label">{$langs['fields']['Database User Name']} *</label>
<div class="field field-website">
<input type="text" value="{$fields['db-user-name'].value}" name="db-user-name" class="main-element form-control" autocomplete="off">
</div>
</div>
<div class="cell cell-website col-sm-12 form-group">
<label class="field-label-website control-label">{$langs['fields']['Database User Password']}</label>
<div class="field field-website">
<input type="password" value="{$fields['db-user-password'].value}" name="db-user-password" class="main-element form-control" autocomplete="off">
</div>
</div>
</div>
</div>
<div class=" col-md-6">
<div class="row">
<div class="cell cell-website col-sm-12 form-group">
<div class="label-description">
{$langs['labels']['Database Settings Description']}
</div>
</div>
</div>
</div>
</div>
</form>
<div class="row">
<div class=" col-md-6">
<div class="row">
<div class="cell cell-website col-sm-12 form-group">
<div class="btn-panel">
<button class="btn btn-default" type="button" id="test-connection">{$langs['labels']['Test settings']}</button>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="modal-footer">
<button class="btn btn-default btn-s-wide pull-left" type="button" id="back">{$langs['labels']['Back']}</button>
<button class="btn btn-primary btn-s-wide" type="button" id="next">{$langs['labels']['Next']}</button>
</footer>
<script>
{literal}
$(function(){
{/literal}
var langs = {$langsJs};
{literal}
var installScript = new InstallScript({action: 'step2', langs: langs});
})
{/literal}
</script>

View File

@@ -0,0 +1,57 @@
<div class="panel-body body">
<div id="msg-box" class="alert hide"></div>
<form id="nav">
<div class="row">
<div class=" col-md-6">
<div class="row">
<div class="cell cell-website col-sm-12 form-group">
<label class="field-label-website control-label">{$langs['fields']['User Name']} *</label>
<div class="field field-website">
<input type="text" value="{$fields['user-name'].value}" name="user-name" class="main-element form-control" autocomplete="off">
</div>
</div>
</div>
<div class="row">
<div class="cell cell-website col-sm-12 form-group">
<label class="field-label-website control-label">{$langs['fields']['Password']} *</label>
<div class="field field-website">
<input type="password" value="{$fields['user-pass'].value}" name="user-pass" class="main-element form-control" autocomplete="off">
</div>
</div>
</div>
<div class="row">
<div class="cell cell-website col-sm-12 form-group">
<label class="field-label-website control-label">{$langs['fields']['Confirm Password']} *</label>
<div class="field field-website">
<input type="password" value="{$fields['user-confirm-pass'].value}" name="user-confirm-pass" class="main-element form-control" autocomplete="off">
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<footer class="modal-footer">
<button class="btn btn-primary btn-s-wide" type="button" id="next">{$langs['labels']['Next']}</button>
</footer>
<script>
{literal}
$(function(){
{/literal}
var opt = {
action: 'step3',
langs: {$langsJs},
modRewriteUrl: '{$modRewriteUrl}',
apiPath: '{$apiPath}',
serverType: '{$serverType}',
OS: '{$OS}'
}
{literal}
var installScript = new InstallScript(opt);
})
{/literal}
</script>

151
install/core/tpl/step4.tpl Normal file
View File

@@ -0,0 +1,151 @@
<div class="panel-body body">
<div id="msg-box" class="alert hide"></div>
<form id="nav">
<div class="row">
<div class="col-md-8" style="width:100%" >
<div class="row">
<div class="cell cell-dateFormat col-sm-6 form-group">
<label class="field-label-dateFormat control-label">
{$langs['fields']['Date Format']}
</label>
<div class="field field-dateFormat">
<select name="dateFormat" class="form-control main-element">
{foreach from=$fields['dateFormat'].options item=val}
{if $val == $fields['dateFormat'].value}
<option selected="selected" value="{$val}">{$val}</option>
{else}
<option value="{$val}">{$val}</option>
{/if}
{/foreach}
</select>
</div>
</div>
<div class="cell cell-timeFormat col-sm-6 form-group">
<label class="field-label-timeFormat control-label">
{$langs['fields']['Time Format']}
</label>
<div class="field field-timeFormat">
<select name="timeFormat" class="form-control main-element">
{foreach from=$fields['timeFormat'].options item=val}
{if $val == $fields['timeFormat'].value}
<option selected="selected" value="{$val}">{$val}</option>
{else}
<option value="{$val}">{$val}</option>
{/if}
{/foreach}
</select>
</div>
</div>
</div>
<div class="row">
<div class="cell cell-timeZone col-sm-6 form-group">
<label class="field-label-timeZone control-label">
{$langs['fields']['Time Zone']}
</label>
<div class="field field-timeZone">
<select name="timeZone" class="form-control main-element">
{foreach from=$defaultSettings['timeZone'].options item=lbl key=val}
{if $val == $fields['timeZone'].value}
<option selected="selected" value="{$val}">{$lbl}</option>
{else}
<option value="{$val}">{$lbl}</option>
{/if}
{/foreach}
</select>
</div>
</div>
<div class="cell cell-weekStart col-sm-6 form-group">
<label class="field-label-weekStart control-label">
{$langs['fields']['First Day of Week']}
</label>
<div class="field field-weekStart">
<select name="weekStart" class="form-control main-element">
{foreach from=$defaultSettings['weekStart'].options item=lbl key=val}
{if $val == $fields['weekStart'].value}
<option selected="selected" value="{$val}">{$lbl}</option>
{else}
<option value="{$val}">{$lbl}</option>
{/if}
{/foreach}
</select>
</div>
</div>
</div>
<div class="row">
<div class="cell cell-defaultCurrency col-sm-6 form-group">
<label class="field-label-defaultCurrency control-label">
{$langs['fields']['Default Currency']}
</label>
<div class="field field-defaultCurrency">
<select name="defaultCurrency" class="form-control main-element">
{foreach from=$defaultSettings['defaultCurrency'].options item=lbl key=val}
{if $val == $fields['defaultCurrency'].value}
<option selected="selected" value="{$val}">{$lbl}</option>
{else}
<option value="{$val}">{$lbl}</option>
{/if}
{/foreach}
</select>
</div>
</div>
</div>
<div class="row">
<div class="cell cell-thousandSeparator col-sm-6 form-group">
<label class="field-label-thousandSeparator control-label">
{$langs['fields']['Thousand Separator']}
</label>
<div class="field field-thousandSeparator">
<input type="text" class="main-element form-control" name="thousandSeparator" value="{$fields['thousandSeparator'].value}" maxlength="1">
</div>
</div>
<div class="cell cell-decimalMark col-sm-6 form-group">
<label class="field-label-decimalMark control-label">
{$langs['fields']['Decimal Mark']} *</label>
<div class="field field-decimalMark">
<input type="text" class="main-element form-control" name="decimalMark" value="{$fields['decimalMark'].value}" maxlength="1">
</div>
</div>
</div>
<div class="row">
<div class="cell cell-language col-sm-6 form-group">
<label class="field-label-language control-label">
{$langs['fields']['Language']}
</label>
<div class="field field-language">
<select name="language" class="form-control main-element">
{foreach from=$defaultSettings['language'].options item=lbl key=val}
{if $val == $fields['language'].value}
<option selected="selected" value="{$val}">{$lbl}</option>
{else}
<option value="{$val}">{$lbl}</option>
{/if}
{/foreach}
</select>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<footer class="modal-footer">
<button class="btn btn-default btn-s-wide pull-left" type="button" id="back">{$langs['labels']['Back']}</button>
<button class="btn btn-primary btn-s-wide" type="button" id="next">{$langs['labels']['Next']}</button>
</footer>
<script>
{literal}
$(function(){
{/literal}
var langs = {$langsJs};
{literal}
var installScript = new InstallScript({action: 'step4', langs: langs});
})
{/literal}
</script>

132
install/core/tpl/step5.tpl Normal file
View File

@@ -0,0 +1,132 @@
<div class="panel-body body">
<div id="msg-box" class="alert hide"></div>
<form id="nav" autocomplete="off">
<div class="row">
<div class="col-md-8" style="width:100%" >
<div class="row">
<div class="cell cell-outboundEmailFromName col-sm-6 form-group">
<label class="field-label-outboundEmailFromName control-label">
{$langs['fields']['From Name']}</label>
<div class="field field-outboundEmailFromName">
<input type="text" class="main-element form-control" name="outboundEmailFromName" value="{$fields['outboundEmailFromName'].value}">
</div>
</div>
<div class="cell cell-outboundEmailFromAddress col-sm-6 form-group">
<label class="field-label-outboundEmailFromAddress control-label">
{$langs['fields']['From Address']}</label>
<div class="field field-outboundEmailFromAddress">
<input type="text" class="main-element form-control" name="outboundEmailFromAddress" value="{$fields['outboundEmailFromAddress'].value}">
</div>
</div>
</div>
<div class="row">
<div class="cell cell-outboundEmailIsShared col-sm-6 form-group">
<label class="field-label-outboundEmailIsShared control-label">
{$langs['fields']['Is Shared']}
</label>
<div class="field field-outboundEmailIsShared">
<input
type="checkbox"
{if $fields['outboundEmailIsShared'].value} checked {/if}
name="outboundEmailIsShared"
class="main-element form-checkbox"
>
</div>
</div>
</div>
<br>
<div class="row">
<div class="cell cell-smtpServer col-sm-6 form-group">
<label class="field-label-smtpServer control-label">
{$langs['fields']['smtpServer']}
</label>
<div class="field field-smtpServer">
<input type="text" class="main-element form-control" name="smtpServer" value="{$fields['smtpServer'].value}">
</div>
</div>
<div class="cell cell-smtpPort col-sm-6 form-group">
<label class="field-label-smtpPort control-label">
{$langs['fields']['smtpPort']}
</label>
<div class="field field-smtpPort">
<input type="text" class="main-element form-control" name="smtpPort" value="{$fields['smtpPort'].value}" pattern="[\-]?[0-9]*" maxlength="4">
</div>
</div>
</div>
<div class="row">
<div class="cell cell-smtpAuth col-sm-6 form-group">
<label class="field-label-smtpAuth control-label">
{$langs['fields']['smtpAuth']}
</label>
<div class="field field-smtpAuth">
<input
type="checkbox"
name="smtpAuth"
class="main-element form-checkbox" {if $fields['smtpAuth'].value} checked {/if}
>
</div>
</div>
<div class="cell cell-smtpSecurity col-sm-6 form-group">
<label class="field-label-smtpSecurity control-label">
{$langs['fields']['smtpSecurity']}
</label>
<div class="field field-smtpSecurity">
<select name="smtpSecurity" class="form-control main-element">
{foreach from=$defaultSettings['smtpSecurity'].options item=lbl key=val}
{if $val == $fields['smtpSecurity'].value}
<option selected="selected" value="{$val}">{$lbl}</option>
{else}
<option value="{$val}">{$lbl}</option>
{/if}
{/foreach}
</select>
</div>
</div>
</div>
<div class="row">
<div class="cell cell-smtpUsername col-sm-6 form-group {if !$fields['smtpAuth'].value} hide {/if}">
<label class="field-label-smtpUsername control-label">
{$langs['fields']['smtpUsername']} *
</label>
<div class="field field-smtpUsername">
<input type="text" class="main-element form-control" name="smtpUsername" value="{$fields['smtpUsername'].value}" autocomplete="off">
</div>
</div>
</div>
<div class="row">
<div class="cell cell-smtpPassword col-sm-6 form-group {if !$fields['smtpAuth'].value} hide {/if}">
<label class="field-label-smtpPassword control-label">
{$langs['fields']['smtpPassword']}
</label>
<div class="field field-smtpPassword">
<input type="password" class="main-element form-control" name="smtpPassword" value="{$fields['smtpPassword'].value}" autocomplete="off">
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<footer class="modal-footer">
<button class="btn btn-default btn-s-wide pull-left" type="button" id="back">{$langs['labels']['Back']}</button>
<button class="btn btn-primary btn-s-wide" type="button" id="next">{$langs['labels']['Next']}</button>
</footer>
<script>
{literal}
$(function(){
{/literal}
var langs = {$langsJs};
{literal}
var installScript = new InstallScript({action: 'step5', langs: langs});
})
{/literal}
</script>