File Manager App

This commit is contained in:
Zarak Khan
2024-01-25 21:46:57 +05:00
parent 1377583d59
commit 5b72b8c3bc
10 changed files with 3020 additions and 204 deletions

View File

@@ -678,7 +678,7 @@
DKIM Manager</a>
</li>
<li>
<a href="#"
<a href="{% url 'EmailDebuggerV2' %}"
class="flex items-center w-full text-base font-normal text-white transition duration-75 rounded-lg group hover:bg-cyan-400 dark:text-white dark:hover:bg-gray-700 pl-11">
Email Debugger</a>
</li>
@@ -1676,6 +1676,8 @@
<script src="{% static 'databases/databasesV2.js' %}"></script>
<script src="{% static 'dns/dnsV2.js' %}"></script>
<script src="{% static 'mailServer/mailServerV2.js' %}"></script>
<script src="{% static 'emailPremium/emailPremiumV2.js' %}"></script>
<script src="{% static 'filemanager/js/fileManagerV2.js' %}"></script>
</body>
</html>

View File

@@ -0,0 +1,301 @@
newapp.controller('EmailDebuugerV2', function ($scope, $http, $timeout, $window) {
$scope.cyberpanelLoading = true;
$scope.ExecutionStatus = true;
$scope.ReportStatus = true;
$scope.RunServerLevelEmailChecks = function () {
$scope.cyberpanelLoading = false;
var url = "/emailPremium/RunServerLevelEmailChecks";
var data = {};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
function ListInitialData(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
statusFile = response.data.tempStatusPath;
reportFile = response.data.reportFile;
statusFunc();
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialData(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Error',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
function statusFunc() {
$scope.cyberpanelLoading = false;
$scope.ExecutionStatus = false;
var url = "/emailPremium/statusFunc";
var data = {
statusFile: statusFile
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
function ListInitialData(response) {
if (response.data.status === 1) {
if (response.data.abort === 1) {
$scope.functionProgress = {"width": "100%"};
$scope.functionStatus = response.data.currentStatus;
$scope.cyberpanelLoading = true;
$scope.ReadReport();
$timeout.cancel();
} else {
$scope.functionProgress = {"width": response.data.installationProgress + "%"};
$scope.functionStatus = response.data.currentStatus;
$timeout(statusFunc, 3000);
}
} else {
$scope.cyberpanelLoading = true;
$scope.functionStatus = response.data.error_message;
$scope.functionProgress = {"width": response.data.installationProgress + "%"};
$timeout.cancel();
}
}
function cantLoadInitialData(response) {
$scope.functionProgress = {"width": response.data.installationProgress + "%"};
$scope.functionStatus = 'Could not connect to server, please refresh this page.';
$timeout.cancel();
}
}
$scope.ReadReport = function () {
if (reportFile === 'none') {
return;
}
$scope.cyberpanelLoading = false;
var url = "/emailPremium/ReadReport";
var data = {
reportFile: reportFile
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
function ListInitialData(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
var reportResult = JSON.parse(response.data.reportContent);
if (reportResult.MailSSL === 1) {
$scope.MailSSL = 'Issued and Valid';
} else {
$scope.MailSSL = 'Not issued or expired.'
}
var report = response.data.report;
console.log(report);
$scope.Port25 = report.Port25;
$scope.Port587 = report.Port587;
$scope.Port465 = report.Port465;
$scope.Port110 = report.Port110;
$scope.Port143 = report.Port143;
$scope.Port993 = report.Port993;
$scope.Port995 = report.Port995;
//document.getElementById('MailSSLURL').href = 'https://' + report.serverHostName + ":" + report.port + '/cloudAPI/access?token=' + report.token + "&serverUserName=" + report.userName + '&redirect=/manageSSL/sslForMailServer';
document.getElementById('MailSSLURL').href = '/manageSSL/sslForMailServer';
$scope.ReportStatus = false;
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialData(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Error',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.ResetEmailConfigurations = function () {
$scope.cyberpanelLoading = false;
var url = "/emailPremium/ResetEmailConfigurations";
var data = {};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
function ListInitialData(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
statusFile = response.data.tempStatusPath;
reportFile = response.data.reportFile;
reportFile = 'none';
statusFunc();
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialData(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Error',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
});
newapp.controller('emailDebuggerDomainLevelV2', function ($scope, $http, $timeout, $window) {
$scope.cyberpanelLoading = true;
$scope.ReportStatus = true;
$scope.debugEmailForSite = function () {
$scope.cyberpanelLoading = false;
url = "/emailPremium/debugEmailForSite";
var data = {
websiteName: $scope.websiteName
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
function ListInitialData(response) {
$scope.cyberpanelLoading = true;
$scope.status = response.data.status;
$scope.message = response.data.error_message;
$scope.ReportStatus = false;
}
function cantLoadInitialData(response) {
$scope.cyberhosting = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
$scope.fixMailSSL = function () {
$scope.cyberpanelLoading = false;
url = "/emailPremium/fixMailSSL";
var data = {
websiteName: $scope.websiteName
};
var config = {
headers: {
'X-CSRFToken': getCookie('csrftoken')
}
};
$http.post(url, data, config).then(ListInitialData, cantLoadInitialData);
function ListInitialData(response) {
$scope.cyberpanelLoading = true;
if (response.data.status === 1) {
new PNotify({
title: 'Success',
text: 'Successfully fixed.',
type: 'success'
});
} else {
new PNotify({
title: 'Operation Failed!',
text: response.data.error_message,
type: 'error'
});
}
}
function cantLoadInitialData(response) {
$scope.cyberpanelLoading = true;
new PNotify({
title: 'Operation Failed!',
text: 'Could not connect to server, please refresh this page.',
type: 'error'
});
}
};
});

View File

@@ -0,0 +1,252 @@
{% extends "baseTemplate/newBase.html" %}
{% load i18n %}
{% block titleNew %}{% trans "Home - CyberPanel" %}{% endblock %}
{% block newContent %}
{% load static %}
<div ng-controller="EmailDebuugerV2" class="p-8">
<div>
<p class="text-4xl font-bold">Email Debugger</p>
<p class="text-xs text-gray-600 py-2 font-semibold">Email debugger to fix server-wide or website level email
settings.</p>
</div>
<div>
<div class="flex items-center py-4">
<p class="text-xl font-bold">DEBUG EMAIL SERVER</p>
<img ng-hide="cyberpanelLoading" src="{% static 'images/loading.gif' %}">
</div>
<hr>
<div class="flex gap-5 mt-4">
<button class="flex items-center text-orange-500 font-bold px-2 py-2 shadow-lg rounded-lg border-2 border-orange-500"
ng-click="RunServerLevelEmailChecks()">
<span>Run Sever Level Check</span>
<img ng-hide="cyberpanelLoading" src="{% static 'images/loading.gif' %}"></button>
<button class="flex items-center text-orange-500 font-bold px-2 py-2 shadow-lg rounded-lg border-2 border-orange-500"
ng-click="ResetEmailConfigurations()">
<span>Reset Server wide Email Configurations</span>
<img ng-hide="cyberpanelLoading" src="{% static 'images/loading.gif' %}"></button>
</div>
<div ng-controller="emailDebuggerDomainLevelV2">
<div class="flex items-center py-4">
<p class="text-xl font-bold">WEBSITE LEVEL EMAIL ISSUES</p>
<img ng-hide="cyberpanelLoading" src="{% static 'images/loading.gif' %}">
</div>
<hr>
<div class="flex mt-4 py-2 px-6">
<div>
<p class="font-semibold w-60">Websites</p>
</div>
<div>
<select ng-model="websiteName" class="form-control w-80 bg-gray-100 rounded px-2 py-1"
ng-change="debugEmailForSite()"
id="example-select">
{% for items in websiteList %}
<option>{{ items }}</option>
{% endfor %}
</select>
</div>
</div>
<div ng-hide="ReportStatus" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<thead>
<tr>
<th scope="col" class="px-6 py-3">
Status
</th>
<th scope="col" class="px-6 py-3">
Actions
</th>
</tr>
</thead>
<tbody class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-4">
{$ message $}
</td>
<td class="px-6 py-4">
<button ng-click="fixMailSSL()" ng-disabled='status==1' data-toggle="modal"
title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Fix Now
</button>
<button ng-click="fixMailSSL()" data-toggle="modal"
title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Force Fix
</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="flex justify-center items-center font-bold text-xl">
<h2>{$ functionStatus $}</h2>
<img ng-hide="cyberpanelLoading" src="{% static 'images/loading.gif' %}">
</div>
<div class="w-full bg-gray-100 rounded-full mt-3">
<div id="installProgress"
class="bg-green-600 text-xs font-medium text-white text-center p-2 leading-none rounded-full"
style="width:0%" ng-style="functionProgress">
</div>
</div>
<div ng-hide="ReportStatus" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<thead>
<tr>
<th scope="col" class="px-6 py-3">
Issue
</th>
<th scope="col" class="px-6 py-3">
Status
</th>
<th scope="col" class="px-6 py-3">
Actions
</th>
</tr>
</thead>
<tbody class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-3">
Mail Server SSL
</td>
<td class="px-6 py-3">
{$ MailSSL $}
</td>
<td class="px-6 py-3">
<a id="MailSSLURL" target="_blank" href="#">
<button data-toggle="modal" title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Issue Now
</button>
</a>
</td>
</tr>
<tr>
<td class="px-6 py-3">
Port 25
</td>
<td class="px-6 py-3">
{$ Port25 $}
</td>
<td class="px-6 py-3">
<a id="MailSSLURL" target="_blank"
href="https://cyberpanel.net/blog/test-smtp-connection/?utm_source=cyberpanel&utm_medium=cyberpanel&utm_campaign=from-cyberpanel&utm_id=from-cyberpanel">
<button data-toggle="modal" title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Learn More
</button>
</a>
</td>
</tr>
<tr>
<td class="px-6 py-3">
Port 587
</td>
<td class="px-6 py-3">
{$ Port587 $}
</td>
<td class="px-6 py-3">
<a id="MailSSLURL" target="_blank"
href="https://cyberpanel.net/blog/test-smtp-connection/?utm_source=cyberpanel&utm_medium=cyberpanel&utm_campaign=from-cyberpanel&utm_id=from-cyberpanel">
<button data-toggle="modal" title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Learn More
</button>
</a>
</td>
</tr>
<tr>
<td class="px-6 py-3">
Port 465
</td>
<td class="px-6 py-3">
{$ Port465 $}
</td>
<td class="px-6 py-3">
<a id="MailSSLURL" target="_blank"
href="https://cyberpanel.net/blog/test-smtp-connection/?utm_source=cyberpanel&utm_medium=cyberpanel&utm_campaign=from-cyberpanel&utm_id=from-cyberpanel">
<button data-toggle="modal" title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Learn More
</button>
</a>
</td>
</tr>
<tr>
<td class="px-6 py-3">
Port 110
</td>
<td class="px-6 py-3">
{$ Port110 $}
</td>
<td class="px-6 py-3">
<a id="MailSSLURL" target="_blank"
href="https://cyberpanel.net/blog/test-smtp-connection/?utm_source=cyberpanel&utm_medium=cyberpanel&utm_campaign=from-cyberpanel&utm_id=from-cyberpanel">
<button data-toggle="modal" title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Learn More
</button>
</a>
</td>
</tr>
<tr>
<td class="px-6 py-3">
Port 143
</td>
<td class="px-6 py-3">
{$ Port143 $}
</td>
<td class="px-6 py-3">
<a id="MailSSLURL" target="_blank"
href="https://cyberpanel.net/blog/test-smtp-connection/?utm_source=cyberpanel&utm_medium=cyberpanel&utm_campaign=from-cyberpanel&utm_id=from-cyberpanel">
<button data-toggle="modal" title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Learn More
</button>
</a>
</td>
</tr>
<tr>
<td class="px-6 py-3">
Port 995
</td>
<td class="px-6 py-3">
{$ Port995 $}
</td>
<td class="px-6 py-3">
<a id="MailSSLURL" target="_blank"
href="https://cyberpanel.net/blog/test-smtp-connection/?utm_source=cyberpanel&utm_medium=cyberpanel&utm_campaign=from-cyberpanel&utm_id=from-cyberpanel">
<button data-toggle="modal" title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Learn More
</button>
</a>
</td>
</tr>
<tr>
<td class="px-6 py-3">
Port 993
</td>
<td class="px-6 py-3">
{$ Port993 $}
</td>
<td class="px-6 py-3">
<a id="MailSSLURL" target="_blank"
href="https://cyberpanel.net/blog/test-smtp-connection/?utm_source=cyberpanel&utm_medium=cyberpanel&utm_campaign=from-cyberpanel&utm_id=from-cyberpanel">
<button data-toggle="modal" title="Manage CyberPanel" type="button"
class="bg-orange-500 text-white font-bold px-2 py-1">
Learn More
</button>
</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
{% endblock %}

View File

@@ -59,6 +59,7 @@ urlpatterns = [
url(r'^RestartRspamd$', views.RestartRspamd, name='RestartRspamd'),
url(r'^EmailDebugger$', views.EmailDebugger, name='EmailDebugger'),
url(r'^V2/EmailDebuggerV2$', views.EmailDebuggerV2, name='EmailDebuggerV2'),
url(r'^RunServerLevelEmailChecks$', views.RunServerLevelEmailChecks, name='RunServerLevelEmailChecks'),
url(r'^ResetEmailConfigurations$', views.ResetEmailConfigurations, name='ResetEmailConfigurations'),

View File

@@ -1260,6 +1260,7 @@ def Rspamd(request):
else:
return redirect("https://cyberpanel.net/cyberpanel-addons")
def installRspamd(request):
try:
userID = request.session['userID']
@@ -1298,6 +1299,7 @@ def installRspamd(request):
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def installStatusRspamd(request):
try:
userID = request.session['userID']
@@ -1321,7 +1323,7 @@ def installStatusRspamd(request):
'abort': 1,
'installed': 1,
})
cmd = 'rm -f %s'%mailUtilities.RspamdInstallLogPath
cmd = 'rm -f %s' % mailUtilities.RspamdInstallLogPath
ProcessUtilities.executioner(cmd)
return HttpResponse(final_json)
@@ -1355,6 +1357,7 @@ def installStatusRspamd(request):
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def fetchRspamdSettings(request):
try:
userID = request.session['userID']
@@ -1487,14 +1490,14 @@ def fetchRspamdSettings(request):
read_servers = j[1]
# logging.CyberCPLogFileWriter.writeToFile(str(read_servers) + "read_servers")
#ClamAV configs
# ClamAV configs
clamav_Debug = True
LogFile = ''
TCPAddr = ''
TCPSocket = ''
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
clamavconfpath = '/etc/clamd.d/scan.conf'
elif ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu or ProcessUtilities.decideDistro() == ProcessUtilities.ubuntu20:
clamavconfpath = "/etc/clamav/clamd.conf"
@@ -1518,7 +1521,6 @@ def fetchRspamdSettings(request):
else:
clamav_Debug = True
final_dic = {'fetchStatus': 1,
'installed': 1,
'enabled': enabled,
@@ -1553,6 +1555,7 @@ def fetchRspamdSettings(request):
except KeyError:
return redirect(loadLoginPage)
def saveRspamdConfigurations(request):
try:
userID = request.session['userID']
@@ -1589,6 +1592,7 @@ def saveRspamdConfigurations(request):
except KeyError:
return redirect(loadLoginPage)
def savepostfixConfigurations(request):
try:
userID = request.session['userID']
@@ -1625,6 +1629,7 @@ def savepostfixConfigurations(request):
except KeyError:
return redirect(loadLoginPage)
def saveRedisConfigurations(request):
try:
userID = request.session['userID']
@@ -1661,6 +1666,7 @@ def saveRedisConfigurations(request):
except KeyError:
return redirect(loadLoginPage)
def saveclamavConfigurations(request):
try:
userID = request.session['userID']
@@ -1697,6 +1703,7 @@ def saveclamavConfigurations(request):
except KeyError:
return redirect(loadLoginPage)
def unistallRspamd(request):
try:
logging.CyberCPLogFileWriter.writeToFile("unistallRspamd...1")
@@ -1708,14 +1715,12 @@ def unistallRspamd(request):
else:
return ACLManager.loadErrorJson()
try:
execPath = "/usr/local/CyberCP/bin/python " + virtualHostUtilities.cyberPanel + "/plogical/mailUtilities.py"
execPath = execPath + " uninstallRspamd"
ProcessUtilities.popenExecutioner(execPath)
final_json = json.dumps({'status': 1, 'error_message': "None"})
return HttpResponse(final_json)
except BaseException as msg:
@@ -1732,6 +1737,7 @@ def unistallRspamd(request):
return HttpResponse(final_json)
def uninstallStatusRspamd(request):
try:
userID = request.session['userID']
@@ -1789,6 +1795,7 @@ def uninstallStatusRspamd(request):
final_json = json.dumps(final_dic)
return HttpResponse(final_json)
def FetchRspamdLog(request):
try:
userID = request.session['userID']
@@ -1837,7 +1844,7 @@ def RestartRspamd(request):
ProcessUtilities.executioner(command)
dic = {'status': 1, 'error_message': 'None',}
dic = {'status': 1, 'error_message': 'None', }
json_data = json.dumps(dic)
return HttpResponse(json_data)
except BaseException as msg:
@@ -1880,6 +1887,36 @@ def EmailDebugger(request):
else:
return redirect("https://cyberpanel.net/cyberpanel-addons")
def EmailDebuggerV2(request):
url = "https://platform.cyberpersons.com/CyberpanelAdOns/Adonpermission"
data = {
"name": "email-debugger",
"IP": ACLManager.GetServerIP()
}
import requests
response = requests.post(url, data=json.dumps(data))
Status = response.json()['status']
if (Status == 1) or ProcessUtilities.decideServer() == ProcessUtilities.ent:
userID = request.session['userID']
currentACL = ACLManager.loadedACL(userID)
if currentACL['admin'] == 1:
pass
else:
return ACLManager.loadErrorJson()
currentACL = ACLManager.loadedACL(userID)
websitesName = ACLManager.findAllSites(currentACL, userID)
proc = httpProc(request, 'emailPremium/EmailDebuggerV2.html',
{'websiteList': websitesName}, 'admin')
return proc.render()
else:
return redirect("https://cyberpanel.net/cyberpanel-addons")
def RunServerLevelEmailChecks(request):
try:
userID = request.session['userID']
@@ -1926,6 +1963,7 @@ def ResetEmailConfigurations(request):
json_data = json.dumps(dic)
return HttpResponse(json_data)
def statusFunc(request):
try:
userID = request.session['userID']
@@ -1949,6 +1987,7 @@ def statusFunc(request):
json_data = json.dumps(dic)
return HttpResponse(json_data)
def ReadReport(request):
try:
userID = request.session['userID']
@@ -1964,7 +2003,7 @@ def ReadReport(request):
res = ob.ReadReport()
Result = json.loads(res.content)
status = Result['status']
#fetch Ip
# fetch Ip
IP = ACLManager.GetServerIP()
if status == 1:
def CheckPort(port):
@@ -2024,7 +2063,7 @@ def ReadReport(request):
final_json = json.dumps(finalResult)
return HttpResponse(final_json)
else:
return 0 , Result
return 0, Result
except BaseException as msg:
logging.CyberCPLogFileWriter.writeToFile("Result....3:" + str(msg))
else:
@@ -2034,6 +2073,7 @@ def ReadReport(request):
except KeyError:
return redirect(loadLoginPage)
def debugEmailForSite(request):
try:
userID = request.session['userID']
@@ -2054,6 +2094,7 @@ def debugEmailForSite(request):
except KeyError:
return redirect(loadLoginPage)
def fixMailSSL(request):
try:
userID = request.session['userID']

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1,426 @@
<h1>habbi test</h1>
{% extends "baseTemplate/newBase.html" %}
{% load i18n %}
{% block titleNew %}{% trans "Home - CyberPanel" %}{% endblock %}
{% block newContent %}
{# <head>#}
{# <title>{% trans "File Manager - CyberPanel" %}</title>#}
{# <!-- Required meta tags -->#}
{# <meta charset="utf-8">#}
{# <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">#}
{##}
{# {% load static %}#}
{# <link rel="icon" type="image/png" href="{% static 'baseTemplate/assets/finalBase/favicon.png' %}">#}
{##}
{# <!-- Angular JS -->#}
{##}
{##}
{# <!-- Fix for old browsers -->#}
{# <script src="{% static 'filemanager/js/es5-shim.min.js' %}"></script>#}
{# <script src="{% static 'filemanager/js/es5-sham.min.js' %}"></script>#}
{# <script src="{% static 'filemanager/js/jquery-1.8.3.min.js' %}"></script>#}
{# <script src="{% static 'filemanager/js/console-sham.js' %}"></script>#}
{##}
{# <!--<script src="../bower_components/angular/angular.js"></script>-->#}
{# <script src="{% static 'filemanager/js/angular-file-upload.min.js' %}"></script>#}
{##}
{##}
{# <!-- HTML Editor Include -->#}
{##}
{# </head>#}
<div ng-controller="fileManagerCtrlV2" class="p-8">
<div class="flex py-2 px-6 items-center gap-4">
<div>
<p class="font-bold w-32">Current Path</p>
</div>
<div>
<input type="text" class="w-80 bg-gray-100 rounded px-2 py-1" id="currentRPath" ng-model="currentRPath"
readonly>
</div>
<div>
<ul class="list-group list-group-flush">
<li class="flex text-orange-500">
<a href="#" onclick="return false;" ng-click="fetchChilds($event,currentRPath,'primary')">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15"/>
</svg>
</a>
<a onclick="return false;"
ng-click="fetchForTableSecondary($event,'fromTree',completeStartingPath)" href="#">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round"
d="M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z"/>
</svg>
</a>
<a href="" class="ml-2">{$ startingPath $}</a>
</li>
</ul>
</div>
</div>
<div class="py-4">
<div>
<ul class="flex justify-between bg-blue-200 py-5 px-5 rounded-lg shadow-lg font-semibold">
<li>
<a class="cursor-pointer" onclick="return false;" ng-click="showUploadBox()"
data-modal-target="upload"
data-modal-toggle="upload"><i
class="fa fa-upload" aria-hidden="true"></i> {% trans "Upload" %}</a>
<div id="upload" tabindex="-1"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-2xl max-h-full">
<div class="relative bg-white rounded-lg shadow dark:bg-gray-700">
<div class="flex items-center bg-blue-400 px-2 py-4">
<button type="button" data-modal-toggle="upload"
class="absolute top-2 end-1 text-black bg-transparent hover:text-black rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center"
data-modal-hide="upload">
<svg class="w-3 h-3" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
</svg>
<span class="sr-only">Close modal</span>
</button>
<h5 class="text-2xl font-bold">{% trans "Upload File " %}-</h5>
&nbsp;
<a class="text-white text-sm"
target="_blank"
href="https://go.cyberpanel.net/upload-limits"
title="">{% trans " Upload Limits" %}</a>
</div>
<div class="p-4 md:p-5">
<div class="mt-4">
<h3 class="text-xl">{% trans "Upload queue" %}</h3>
<p>{% trans "Queue length:" %} {$ uploader.queue.length $}</p>
<div>
<div nv-file-over="" uploader="uploader">
<div>
<h4 class="font-bold mt-4">{% trans "Drop" %}</h4>
<p class="card-text">{% trans "Drop Files here to upload them." %}</p>
</div>
</div>
<div class="mt-4">
<div>
<label class="text-xl"
for="uploadControlMultiple">{% trans "Upload" %}</label>
</div>
<div>
<input type="file" nv-file-select="" uploader="uploader"
class="form-control-file" id="uploadControlMultiple"
multiple>
</div>
</div>
<div class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<thead>
<tr>
<th scope="col" class="px-6 py-3">
Name
</th>
<th scope="col" class="px-6 py-3">
Size
</th>
<th scope="col" class="px-6 py-3">
Progress
</th>
<th scope="col" class="px-6 py-3">
Status
</th>
<th scope="col" class="px-6 py-3">
Actions
</th>
</tr>
</thead>
<tbody ng-repeat="item in uploader.queue"
class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-4">
<strong>{$ item.file.name $}</strong>
</td>
<td ng-show="uploader.isHTML5" nowrap class="px-6 py-4">
{$ item.file.size / 1024 / 1024 | number:2 $} MB
</td>
<td ng-show="uploader.isHTML5" class="px-6 py-4">
<div class="progress" style="margin-bottom: 0;">
<div class="progress-bar" role="progressbar"
ng-style="{ 'width': item.progress + '%' }"></div>
</div>
</td>
<td class="px-6 py-4">
<span ng-show="item.isSuccess"><i class="fa fa-check"
aria-hidden="true"></i></span>
<span ng-show="item.isCancel"><i class="fa fa-ban"
aria-hidden="true"></i></span>
<span ng-show="item.isError"><i class="fa fa-trash"
aria-hidden="true"></i></span>
</td>
<td nowrap class="px-6 py-4">
<button type="button" class="btn btn-success btn-sm"
ng-click="item.upload()"
ng-disabled="item.isReady || item.isUploading || item.isSuccess">
<i class="fa fa-upload"
aria-hidden="true"></i> {% trans "Upload" %}
</button>
<button type="button" class="btn btn-warning btn-sm"
ng-click="item.cancel()"
ng-disabled="!item.isUploading">
<i class="fa fa-ban"
aria-hidden="true"></i> {% trans "Cancel" %}
</button>
<button type="button" class="btn btn-danger btn-sm"
ng-click="item.remove()">
<i class="fa fa-trash"
aria-hidden="true"></i> {% trans "Remove" %}
</button>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<div id="queueProg">
{% trans "Queue progress:" %}
<div class="progress" style="">
<div class="progress-bar" role="progressbar"
ng-style="{ 'width': uploader.progress + '%' }"></div>
</div>
</div>
</div>
<div ng-hide="errorMessage" class="alert alert-danger" role="alert">
{$ fileName $} {% trans "can not be uploaded, Error message:" %}
{$ error_message $}
</div>
<div class="flex gap-2 justify-center mt-4">
<button type="button"
class="text-white bg-green-600 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2"
ng-click="uploader.uploadAll()"
ng-disabled="!uploader.getNotUploadedItems().length">
<i class="fa fa-upload"
aria-hidden="true"></i> {% trans "Upload all" %}
</button>
<button type="button"
class="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-gray-200 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600"
ng-click="uploader.cancelAll()"
ng-disabled="!uploader.isUploading">
<i class="fa fa-ban"
aria-hidden="true"></i> {% trans "Cancel all" %}
</button>
<button type="button"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2"
ng-click="uploader.clearQueue()"
ng-disabled="!uploader.queue.length">
<i class="fa fa-trash"
aria-hidden="true"></i> {% trans "Remove all" %}
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<li>
<a onclick="return false;" ng-click="showCreateFileModal()" class="nav-link point-events"
href="#" data-modal-target="newfile" data-modal-toggle="newfile"><i class="fa fa-plus-square"
aria-hidden="true"></i> {% trans "New File" %}
</a>
<div id="newfile" tabindex="-1"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-2xl max-h-full">
<div class="relative bg-white shadow dark:bg-gray-700">
<div class="flex items-center bg-blue-400 px-4 py-4">
<p class="font-bold">Create New File</p>
<button type="button" data-modal-toggle="newfile"
class="absolute top-2 end-1 text-black bg-transparent hover:text-black rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center"
data-modal-hide="newfile">
<svg class="w-3 h-3" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
</svg>
<span class="sr-only">Close modal</span>
</button>
</div>
<div class="p-4 md:p-5">
<div>
<div class="flex">
<label class="w-80">{% trans "New File Name" %}</label>
<input ng-keypress="createFileEnter($event)" ng-model="newFileName"
type="text" class="form-control">
</div>
<small class="form-text text-muted">{% trans "File will be created in your current directory, if it already exists it will not overwirte." %}</small>
<div class="flex justify-center mt-3">
<button type="button" ng-click="createNewFile()"
class="bg-orange-500 text-white font-bold px-4 py-1 text-xl">{% trans "Create File" %}</button>
</div>
</div>
</div>
<div class="modal-footer">
<div class="row">
<div class="col-sm-12">
<div ng-hide="errorMessageFile" class="alert alert-danger" role="alert">
{$error_message$}
</div>
<div ng-hide="createSuccess" class="alert alert-success" role="alert">
{% trans "File Successfully created." %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<li>
<a onclick="return false;" ng-click="showCreateFolderModal()" class="nav-link point-events"
href="#" data-modal-target="newfolder" data-modal-toggle="newfolder"><i class="fa fa-folder"
aria-hidden="true"></i> {% trans "New Folder" %}
</a>
<div id="newfolder" tabindex="-1"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-2xl max-h-full">
<div class="relative bg-white shadow dark:bg-gray-700">
<div class="flex items-center bg-blue-400 px-4 py-4">
<p class="font-bold">Create New Folder</p>
<button type="button" data-modal-toggle="newfolder"
class="absolute top-2 end-1 text-black bg-transparent hover:text-black rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center"
data-modal-hide="newfolder">
<svg class="w-3 h-3" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
</svg>
<span class="sr-only">Close modal</span>
</button>
</div>
<div class="p-4 md:p-5">
<div>
<div class="flex">
<label class="w-80">{% trans "New File Name" %}</label>
<input ng-keypress="createFolderEnter($event)" ng-model="newFolderName"
type="text" class="form-control">
</div>
<small class="form-text text-muted">{% trans "Folder will be created in your current directory" %}</small>
<div class="flex justify-center mt-3">
<button type="button" ng-click="createNewFolder()"
class="bg-orange-500 text-white font-bold px-4 py-1 text-xl">{% trans "Create Folder" %}</button>
</div>
</div>
</div>
<div class="modal-footer">
<div class="row">
<div class="col-sm-12">
<div ng-hide="errorMessageFolder" class="alert alert-danger"
role="alert">
{$error_message$}
</div>
<div ng-hide="createSuccess" class="alert alert-success" role="alert">
{% trans "Folder Successfully created." %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</li>
<li id="deleteFile">
<a onclick="return false;" ng-click="showDeleteModal()" class="nav-link point-events"
href="#"><i
class="fa fa-trash-o" aria-hidden="true"></i> {% trans "Delete" %}</a>
</li>
<li id="copyFile">
<a onclick="return false;" ng-click="showCopyModal()" class="nav-link point-events" href="#"><i
class="fa fa-files-o" aria-hidden="true"></i> {% trans "Copy" %}</a>
</li>
<li id="moveFile">
<a onclick="return false;" ng-click="showMoveModal()" class="nav-link point-events" href="#"><i
class="fa fa-arrows-alt" aria-hidden="true"></i> {% trans "Move" %}</a>
</li>
<li id="renameFile">
<a onclick="return false;" ng-click="showRenameModal()" class="nav-link point-events"
href="#"><i
class="fa fa-file-text-o" aria-hidden="true"></i> {% trans "Rename" %}</a>
</li>
<li id="editFile">
<a onclick="return false;" ng-click="showHTMLEditorModal()" class="nav-link point-events"
href="#"><i class="fa fa-pencil-square-o" aria-hidden="true"></i> {% trans "Edit" %}</a>
</li>
<li id="compressFile">
<a onclick="return false;" ng-click="showCompressionModal()" class="nav-link point-events"
href="#"><i
class="fa fa-compress" aria-hidden="true"></i> {% trans "Compress" %}</a>
</li>
<li id="extractFile">
<a onclick="return false;" ng-click="showExtractionModal()" class="nav-link point-events"
href="#"><i class="fa fa-expand" aria-hidden="true"></i> {% trans "Extract" %}</a>
</li>
</ul>
</div>
<div class="mt-2">
<ul class="flex py-5 px-5 gap-10 font-semibold">
<li>
<a onclick="return false;" ng-click="fetchForTableSecondary($event,'homeFetch')"
href="#"><i class="fa fa-home fa-lg" aria-hidden="true"></i> {% trans "Home" %}</a>
</li>
<li>
<a onclick="return false;" ng-click="fetchForTableSecondary($event,'goBackOnPath')"
href="#"><i class="fa fa-arrow-left fa-lg"
aria-hidden="true"></i> {% trans "Back" %}</a>
</li>
<li>
<a onclick="return false;" ng-click="fetchForTableSecondary($event,'refresh')"
href="#"><i class="fa fa-refresh fa-lg" aria-hidden="true"></i> {% trans "Refresh" %}</a>
</li>
<li>
<a onclick="return false;" ng-click="selectAll()" href="#"><i
class="fa fa-check-square-o fa-lg" aria-hidden="true"></i> {% trans "Select All" %}</a>
</li>
<li>
<a onclick="return false;" ng-click="unSelectAll()" href="#"><i
class="fa fa-square-o fa-lg" aria-hidden="true"></i> {% trans "UnSelect All" %}</a>
</li>
</ul>
</div>
<div>
<div class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<thead id="tableHead">
<tr>
<th scope="col" class="px-6 py-3">
File Name
</th>
<th scope="col" class="px-6 py-3">
Size (KB)
</th>
<th scope="col" class="px-6 py-3">
Last Modified
</th>
<th scope="col" class="px-6 py-3">
Permissions
</th>
</tr>
</thead>
<tbody id="tableBodyFiles">
</tbody>
</table>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -74,154 +74,7 @@
<div class="py-4">
<p class="text-xl font-bold">Details To Configure Mail Clients</p>
</div>
<div class="flex gap-6">
<div>
<div ng-hide="creationBox" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<thead>
<tr>
<th scope="col" class="px-6 py-3">
POP3
</th>
<th scope="col" class="px-6 py-3">
Details
</th>
</tr>
</thead>
<tbody class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-4">
Server Hostname
</td>
<td class="px-6 py-4">
{$ serverHostname $}
</td>
</tr>
<tr>
<td class="px-6 py-4">
Port
</td>
<td class="px-6 py-4">
110
</td>
</tr>
<tr>
<td class="px-6 py-4">
Port
</td>
<td class="px-6 py-4">
995 (SSL)
</td>
</tr>
<tr>
<td class="px-6 py-4">
SSL
</td>
<td class="px-6 py-4">
STARTTLS
</td>
</tr>
</tbody>
</table>
</div>
<div ng-hide="creationBox" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<thead>
<tr>
<th scope="col" class="px-6 py-3">
IMAP
</th>
<th scope="col" class="px-6 py-3">
Details
</th>
</tr>
</thead>
<tbody class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-4">
Server Hostname
</td>
<td class="px-6 py-4">
{$ serverHostname $}
</td>
</tr>
<tr>
<td class="px-6 py-4">
Port
</td>
<td class="px-6 py-4">
143
</td>
</tr>
<tr>
<td class="px-6 py-4">
Port
</td>
<td class="px-6 py-4">
993 (SSL)
</td>
</tr>
<tr>
<td class="px-6 py-4">
SSL
</td>
<td class="px-6 py-4">
STARTTLS
</td>
</tr>
</tbody>
</table>
</div>
<div ng-hide="creationBox" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<thead>
<tr>
<th scope="col" class="px-6 py-3">
SMTP
</th>
<th scope="col" class="px-6 py-3">
Details
</th>
</tr>
</thead>
<tbody class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-4">
Server Hostname
</td>
<td class="px-6 py-4">
{$ serverHostname $}
</td>
</tr>
<tr>
<td class="px-6 py-4">
Port
</td>
<td class="px-6 py-4">
25
</td>
</tr>
<tr>
<td class="px-6 py-4">
Port
</td>
<td class="px-6 py-4">
587 (SSL)
</td>
</tr>
<tr>
<td class="px-6 py-4">
465 (SSL)
</td>
<td class="px-6 py-4">
STARTTLS
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div>
<div ng-hide="creationBox" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
@@ -258,6 +111,125 @@
</table>
</div>
</div>
<div>
<div ng-hide="creationBox" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<div class="bg-gray-200 mt-6 w-full rounded-t-lg border-b-2 border-gray-400">
<p class="font-bold px-4 py-1">POP3</p>
</div>
<thead>
<tr>
<th scope="col" class="px-6 py-3">
Server Hostname
</th>
<th scope="col" class="px-6 py-3">
Port
</th>
<th scope="col" class="px-6 py-3">
Port
</th>
<th scope="col" class="px-6 py-3">
SSL
</th>
</tr>
</thead>
<tbody class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-4">
{$ serverHostname $}
</td>
<td class="px-6 py-4">
110
</td>
<td class="px-6 py-4">
995 (SSL)
</td>
<td class="px-6 py-4">
STARTTLS
</td>
</tr>
</tbody>
</table>
</div>
<div ng-hide="creationBox" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<div class="bg-gray-200 mt-6 w-full rounded-t-lg border-b-2 border-gray-400">
<p class="font-bold px-4 py-1">IMAP</p>
</div>
<thead>
<tr>
<th scope="col" class="px-6 py-3">
Server Hostname
</th>
<th scope="col" class="px-6 py-3">
Port
</th>
<th scope="col" class="px-6 py-3">
Port
</th>
<th scope="col" class="px-6 py-3">
SSL
</th>
</tr>
</thead>
<tbody class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-4">
{$ serverHostname $}
</td>
<td class="px-6 py-4">
143
</td>
<td class="px-6 py-4">
993 (SSL)
</td>
<td class="px-6 py-4">
STARTTLS
</td>
</tr>
</tbody>
</table>
</div>
<div ng-hide="creationBox" class="relative py-5 overflow-x-auto">
<table class="w-full text-sm text-left rtl:text-right">
<div class="bg-gray-200 mt-6 w-full rounded-t-lg border-b-2 border-gray-400">
<p class="font-bold px-4 py-1">SMTP</p>
</div>
<thead>
<tr>
<th scope="col" class="px-6 py-3">
Server Hostname
</th>
<th scope="col" class="px-6 py-3">
Port
</th>
<th scope="col" class="px-6 py-3">
Port
</th>
<th scope="col" class="px-6 py-3">
465 SSL
</th>
</tr>
</thead>
<tbody class="border shadow-lg py-3 px-6 rounded-b-lg">
<tr>
<td class="px-6 py-4">
{$ serverHostname $}
</td>
<td class="px-6 py-4">
25
</td>
<td class="px-6 py-4">
587 (SSL)
</td>
<td class="px-6 py-4">
STARTTLS
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
{% endif %}
</div>

View File

@@ -144,7 +144,8 @@
</div>
<button ng-click="deletePackageFinal(record.package)" data-modal-target="DeleteListUser_{$$index$}"
<button ng-click="deletePackageFinal(record.package)"
data-modal-target="DeleteListUser_{$$index$}"
data-modal-toggle="DeleteListUser_{$$index$}"
class="bg-orange-500 px-2 py-1 text-white"
type="button">
@@ -199,50 +200,52 @@
</tr>
</tbody>
<button class="btn btn-danger" data-modal-target="habitetest" data-modal-toggle="habitetest">check moda</button>
<button class="btn btn-danger" data-modal-target="habitetest" data-modal-toggle="habitetest">check
moda
</button>
<div id="habitetest" tabindex="-1"
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-md max-h-full">
<div class="relative bg-white rounded-lg shadow dark:bg-gray-700">
<button type="button" data-modal-toggle="habitetest"
class="absolute top-3 end-2.5 text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center dark:hover:bg-gray-600 dark:hover:text-white"
data-modal-hide="habitetest">
<svg class="w-3 h-3" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
</svg>
<span class="sr-only">Close modal</span>
</button>
<div class="p-4 md:p-5 text-center">
<svg class="mx-auto mb-4 text-gray-400 w-12 h-12 dark:text-gray-200"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="M10 11V6m0 8h.01M19 10a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/>
</svg>
<h3 class="mb-5 text-lg font-normal text-gray-500 dark:text-gray-400">
Are you sure you want to
delete this user {$ UserToDelete $} ?</h3>
<button ng-click="deleteUserFinal()" data-modal-hide="DeleteListUser"
type="button"
data-modal-toggle="DeleteListUser"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2">
Yes, I'm sure
</button>
<button data-modal-hide="DeleteListUser" type="button"
data-modal-toggle="DeleteListUser"
class="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-gray-200 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600">
No, cancel
</button>
</div>
</div>
class="hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full">
<div class="relative p-4 w-full max-w-md max-h-full">
<div class="relative bg-white rounded-lg shadow dark:bg-gray-700">
<button type="button" data-modal-toggle="habitetest"
class="absolute top-3 end-2.5 text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center dark:hover:bg-gray-600 dark:hover:text-white"
data-modal-hide="habitetest">
<svg class="w-3 h-3" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
</svg>
<span class="sr-only">Close modal</span>
</button>
<div class="p-4 md:p-5 text-center">
<svg class="mx-auto mb-4 text-gray-400 w-12 h-12 dark:text-gray-200"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2"
d="M10 11V6m0 8h.01M19 10a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/>
</svg>
<h3 class="mb-5 text-lg font-normal text-gray-500 dark:text-gray-400">
Are you sure you want to
delete this user {$ UserToDelete $} ?</h3>
<button ng-click="deleteUserFinal()" data-modal-hide="DeleteListUser"
type="button"
data-modal-toggle="DeleteListUser"
class="text-white bg-red-600 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2">
Yes, I'm sure
</button>
<button data-modal-hide="DeleteListUser" type="button"
data-modal-toggle="DeleteListUser"
class="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-gray-200 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600">
No, cancel
</button>
</div>
</div>
</div>
</div>
</table>
</div>
</div>

View File

@@ -10,7 +10,7 @@
<p class="text-4xl font-bold">Install WordPress</p>
<p class="text-xs text-gray-600 py-2 font-semibold">Install WordPress with LSCache.</p>
</div>
<div>a
<div>
<div class="py-4">
<h3 class="title-hero">
<span id="domainNamePage">{{ domainName }}</span> - {% trans "Installation Details" %} - <a
@@ -64,9 +64,9 @@
</div>
</div>
</div>
<div ng-hide="installationDetailsForm" class="flex justify-center">
<div ng-hide="installationDetailsForm" class="flex justify-center mt-3">
<button ng-click="installWordPress()"
class="bg-orange-500 px-3 py-4 rounded-lg text-xl font-semibold text-white">
class="bg-orange-500 px-3 py-2 rounded-lg text-xl font-semibold text-white">
Install Now
</button>
</div>