Compare commits
344
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b53db18826 | ||
|
|
da7e6368f7 | ||
|
|
1efa9df9ba | ||
|
|
19c0cdef5b | ||
|
|
5ef1049be3 | ||
|
|
cfd7c411cf | ||
|
|
d6c0f48d48 | ||
|
|
8af94388ab | ||
|
|
7ff860feca | ||
|
|
4a776a42e2 | ||
|
|
1853b087f4 | ||
|
|
02455fbca7 | ||
|
|
c7a779d9aa | ||
|
|
cf18dd660a | ||
|
|
cc08cdbc97 | ||
|
|
bf77cb634c | ||
|
|
e0e80fc430 | ||
|
|
9023fdd7e7 | ||
|
|
d6a10d46c7 | ||
|
|
a1183f91f6 | ||
|
|
36c122cf65 | ||
|
|
774de4a6ab | ||
|
|
712f172071 | ||
|
|
7052b35c19 | ||
|
|
9b0c8f8158 | ||
|
|
e6d223d15c | ||
|
|
24387d6767 | ||
|
|
f8d55092e5 | ||
|
|
63e456088d | ||
|
|
d4ef7daeb1 | ||
|
|
3860c5d24c | ||
|
|
b7259fdd6f | ||
|
|
b8fd42d9f8 | ||
|
|
4f4bed0899 | ||
|
|
9ac4f89e36 | ||
|
|
c6ca3258c1 | ||
|
|
4e2105190b | ||
|
|
c59a08b3a0 | ||
|
|
0ea2b7d9ef | ||
|
|
73a0a6fe9c | ||
|
|
7748b05547 | ||
|
|
8db442a34a | ||
|
|
bb74bb48ba | ||
|
|
6db62d9961 | ||
|
|
63b71b87df | ||
|
|
f575325fa7 | ||
|
|
5fddb97cbf | ||
|
|
778ea67cb4 | ||
|
|
48ab0b384e | ||
|
|
4c0152ae0f | ||
|
|
eda69f4e37 | ||
|
|
520533ef1f | ||
|
|
3ee875a6db | ||
|
|
9bac98d175 | ||
|
|
65f4220932 | ||
|
|
9f4dfd9bfc | ||
|
|
9943f7ab90 | ||
|
|
b454c1ce97 | ||
|
|
769b2ff342 | ||
|
|
6bc1b3e921 | ||
|
|
cd9b682994 | ||
|
|
49dd578e50 | ||
|
|
41b00fcdae | ||
|
|
720aa4d0ae | ||
|
|
dfe8de0680 | ||
|
|
e3eda2adbc | ||
|
|
fd7de347d4 | ||
|
|
bec37c0e22 | ||
|
|
a372f725cd | ||
|
|
09771bf8ad | ||
|
|
a80a60bdbe | ||
|
|
a32572f5e8 | ||
|
|
eb142b2513 | ||
|
|
ad8a4d861b | ||
|
|
b0ff3bf397 | ||
|
|
416403b6ce | ||
|
|
b9ff255878 | ||
|
|
a18765aafa | ||
|
|
af86841ebc | ||
|
|
08c04c5615 | ||
|
|
efce5be699 | ||
|
|
97c4ab99f1 | ||
|
|
a162154f70 | ||
|
|
0a5f99e6ae | ||
|
|
8cf195efb0 | ||
|
|
9a9521c570 | ||
|
|
af1fb094d2 | ||
|
|
3d9982e5be | ||
|
|
2bf2f4a861 | ||
|
|
e83cd0109d | ||
|
|
d83364432e | ||
|
|
11b2def517 | ||
|
|
e8e36156e9 | ||
|
|
059705d60d | ||
|
|
1d423adc12 | ||
|
|
b259809960 | ||
|
|
15f72b4de1 | ||
|
|
da90011ad3 | ||
|
|
514123a19f | ||
|
|
4764d4e2d9 | ||
|
|
a624b83f18 | ||
|
|
982e80027d | ||
|
|
5c081261b0 | ||
|
|
cc69c3566b | ||
|
|
df6110adf8 | ||
|
|
a4fef0bb3d | ||
|
|
e3511462f7 | ||
|
|
b538b4119f | ||
|
|
cccdbbbbd8 | ||
|
|
a33d93e163 | ||
|
|
a7d0628a13 | ||
|
|
bf3bcc4eca | ||
|
|
c4314e2f43 | ||
|
|
d7c9de2bd6 | ||
|
|
241ac576fe | ||
|
|
997ef6d483 | ||
|
|
b115cb93fd | ||
|
|
204e31c06d | ||
|
|
87732720ef | ||
|
|
20382da0bc | ||
|
|
0811c4f1fc | ||
|
|
8e5f26da8d | ||
|
|
e64f9cca83 | ||
|
|
b4829492e5 | ||
|
|
d358e6fdb0 | ||
|
|
b6140b77f5 | ||
|
|
b94e0aad87 | ||
|
|
e0cf362433 | ||
|
|
0097a803b4 | ||
|
|
7d6b1a2342 | ||
|
|
13df1c3a64 | ||
|
|
93bd3963bf | ||
|
|
e502225e9c | ||
|
|
44abdb471f | ||
|
|
cb9639f10f | ||
|
|
4cc3505050 | ||
|
|
11b145861d | ||
|
|
7b9cf25631 | ||
|
|
90d7cbc270 | ||
|
|
3424553d39 | ||
|
|
15dd66b636 | ||
|
|
5600f21937 | ||
|
|
3dc29d44d8 | ||
|
|
93721fc5ae | ||
|
|
967db81d3c | ||
|
|
a963647770 | ||
|
|
2ccfb24d1d | ||
|
|
94e17dfbbc | ||
|
|
ba99b2a093 | ||
|
|
f4f8bc8e77 | ||
|
|
82df1210c2 | ||
|
|
47aac647ac | ||
|
|
67b9aae961 | ||
|
|
282d5a7c38 | ||
|
|
d1f216d04a | ||
|
|
bb04a1af14 | ||
|
|
dcb0426264 | ||
|
|
b877153f3f | ||
|
|
db968ad9b0 | ||
|
|
acae8ae59d | ||
|
|
b041558cc3 | ||
|
|
c807947968 | ||
|
|
e0ceecf157 | ||
|
|
aff60841b4 | ||
|
|
ba362902e6 | ||
|
|
f652308421 | ||
|
|
d87bc581d1 | ||
|
|
acef609a2f | ||
|
|
44ad8ef460 | ||
|
|
25bc144ac7 | ||
|
|
709c51ea49 | ||
|
|
c8693b8f0e | ||
|
|
48ffd217b8 | ||
|
|
6ed11cab2d | ||
|
|
fce1d3f454 | ||
|
|
b2fec84080 | ||
|
|
8b312e0ecd | ||
|
|
74d7c2b563 | ||
|
|
e0cb9642cd | ||
|
|
2b5b4ee48f | ||
|
|
ae4cdc5efc | ||
|
|
ca23c6d669 | ||
|
|
c80baf4807 | ||
|
|
aa6c5bc6be | ||
|
|
92bb10faba | ||
|
|
814c06bbb4 | ||
|
|
c12ac98387 | ||
|
|
6fb0079e7c | ||
|
|
13d7d36088 | ||
|
|
73d123a62d | ||
|
|
c216f929d4 | ||
|
|
8bc5c367d6 | ||
|
|
cc98d509e5 | ||
|
|
3da95da099 | ||
|
|
de4fdc2c72 | ||
|
|
b42a733f53 | ||
|
|
8364b220cc | ||
|
|
09bba25993 | ||
|
|
8715179ffa | ||
|
|
287b7859c6 | ||
|
|
8bc42f3a9b | ||
|
|
6750ca8f45 | ||
|
|
2997558a50 | ||
|
|
938578d217 | ||
|
|
d83ecc3747 | ||
|
|
80b88405f1 | ||
|
|
c9fca0bf29 | ||
|
|
20f615365b | ||
|
|
886cac5f95 | ||
|
|
3669a0d982 | ||
|
|
9b71f62a04 | ||
|
|
d3433f2a1d | ||
|
|
ad91077263 | ||
|
|
b8c96704c2 | ||
|
|
2e77978d5c | ||
|
|
5eb5a7bc06 | ||
|
|
9e35cf848d | ||
|
|
1c6f09ed80 | ||
|
|
0d56ba5a28 | ||
|
|
419bf112d4 | ||
|
|
2fc19530ad | ||
|
|
c0babe8277 | ||
|
|
4aa4b9cadf | ||
|
|
4bde0b10d0 | ||
|
|
e986940680 | ||
|
|
169a2f5654 | ||
|
|
bd28fc60d7 | ||
|
|
d7c6d23a6b | ||
|
|
3798d01da1 | ||
|
|
438f7df855 | ||
|
|
efec5f3508 | ||
|
|
662b722ad4 | ||
|
|
736ea7ae3a | ||
|
|
da0215176a | ||
|
|
c2bf1127a5 | ||
|
|
3f906cbc20 | ||
|
|
2d5b371247 | ||
|
|
75f9c73dc7 | ||
|
|
5d946eec3a | ||
|
|
b1d964a526 | ||
|
|
936b1fb5b0 | ||
|
|
04adba6682 | ||
|
|
cc20906062 | ||
|
|
c115a5c7a7 | ||
|
|
4b071d9ef2 | ||
|
|
5cf85f08e4 | ||
|
|
c350f712dc | ||
|
|
1256adba98 | ||
|
|
b1c4f7b054 | ||
|
|
56d9a0207c | ||
|
|
e58c3088f1 | ||
|
|
d0a106159d | ||
|
|
836452add6 | ||
|
|
c80a52ab86 | ||
|
|
a3948c872e | ||
|
|
ae7b42acbe | ||
|
|
d0cda1dac2 | ||
|
|
7ff0ffc118 | ||
|
|
7f93aa185e | ||
|
|
2b4b97cd7e | ||
|
|
eeab7cd343 | ||
|
|
9330ed457c | ||
|
|
1ae1b5b047 | ||
|
|
7ef80e7207 | ||
|
|
c4be035890 | ||
|
|
8104d0b6cd | ||
|
|
b976814d8b | ||
|
|
afda333c25 | ||
|
|
1f61601e05 | ||
|
|
596e14feee | ||
|
|
2d101dcdda | ||
|
|
f631d12359 | ||
|
|
af096e8afb | ||
|
|
8bb7886ef7 | ||
|
|
a61d810d55 | ||
|
|
f6d6777d01 | ||
|
|
537fa2b0b5 | ||
|
|
a983ab0424 | ||
|
|
864795749e | ||
|
|
b470138ccd | ||
|
|
56935abfc0 | ||
|
|
de4f8e27b8 | ||
|
|
480e1a0553 | ||
|
|
2369eab332 | ||
|
|
6df819f30c | ||
|
|
6570b36cd0 | ||
|
|
0a1bbcc297 | ||
|
|
2297aab379 | ||
|
|
6a279d4942 | ||
|
|
a65b70a23f | ||
|
|
d6a5db711d | ||
|
|
f4bfa04690 | ||
|
|
ddefe4995e | ||
|
|
4146880905 | ||
|
|
72af09d93d | ||
|
|
02fb2554c1 | ||
|
|
7c47b36c77 | ||
|
|
3b55909906 | ||
|
|
b905ba4cb5 | ||
|
|
ddf9f3a5dc | ||
|
|
335784231a | ||
|
|
29daa1e3aa | ||
|
|
525c9edc65 | ||
|
|
2a5df7bc59 | ||
|
|
ff33023643 | ||
|
|
c8ab16aecb | ||
|
|
5f121430a9 | ||
|
|
8b213ee803 | ||
|
|
3d300ac4d1 | ||
|
|
478be2e212 | ||
|
|
06c23edad9 | ||
|
|
cc74e6493a | ||
|
|
e34d49b3f4 | ||
|
|
be68399ab8 | ||
|
|
31c929d867 | ||
|
|
ec6e8766e2 | ||
|
|
e62b442991 | ||
|
|
abc4319c75 | ||
|
|
8b2f9e99f0 | ||
|
|
cb95af3c46 | ||
|
|
a4bdde6382 | ||
|
|
9a1fcbbf9d | ||
|
|
16e7b9fe46 | ||
|
|
e403203e72 | ||
|
|
5ba5a101a3 | ||
|
|
528a4b24b0 | ||
|
|
7a8a6e023d | ||
|
|
eac29d8d1c | ||
|
|
3cac482409 | ||
|
|
5179f45ef9 | ||
|
|
4558282da8 | ||
|
|
1fc793089c | ||
|
|
de7ef99b47 | ||
|
|
18d1501b67 | ||
|
|
839d8edfcd | ||
|
|
b8235404b8 | ||
|
|
0874d3e6b5 | ||
|
|
1257cd552c | ||
|
|
218e5ab8e3 | ||
|
|
efba91653e | ||
|
|
97bda3d353 | ||
|
|
18b39fa15c | ||
|
|
0b60c4b908 | ||
|
|
b030000238 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by fontconfig.
|
||||
# For information about cache directory tags, see:
|
||||
# http://www.brynosaurus.com/cachedir/
|
||||
Binary file not shown.
@@ -0,0 +1,54 @@
|
||||
Graphics Backend used: svp
|
||||
Passed Tests: 66
|
||||
Quirky Tests: 36
|
||||
Failed Tests: 1
|
||||
Skipped Tests: 6
|
||||
|
||||
---Name of the tests that failed---
|
||||
testDrawInvertN50WithRectangle
|
||||
|
||||
---Name of the tests that were Quirky---
|
||||
testDrawRectWithLine
|
||||
testDrawRectWithPolygon
|
||||
testDrawRectWithPolyLine
|
||||
testDrawRectWithPolyPolygon
|
||||
testDrawRectWithPolyPolygonB2D
|
||||
testDrawDiamondWithLine
|
||||
testComplexDrawTransformedBitmap24bpp
|
||||
testDashedLine
|
||||
testLinearGradientBorder
|
||||
testLinearGradientSteps
|
||||
testRadialGradient
|
||||
testRadialGradientOfs
|
||||
testHalfEllipseWithPolyLine
|
||||
testHalfEllipseAAWithPolyLine
|
||||
testHalfEllipseAAWithPolyLineB2D
|
||||
testHalfEllipseWithPolygon
|
||||
testHalfEllipseAAWithPolygon
|
||||
testTextDrawing
|
||||
testDrawRectangleOnSize1028WithPixel
|
||||
testDrawRectangleOnSize4096WithPixel
|
||||
testDrawRectangleOnSize1028WithLine
|
||||
testDrawRectangleOnSize4096WithLine
|
||||
testDrawRectangleOnSize1028WithPolyLine
|
||||
testDrawRectangleOnSize4096WithPolyLine
|
||||
testDrawRectangleOnSize1028WithPolygon
|
||||
testDrawRectangleOnSize4096WithPolygon
|
||||
testDrawRectangleOnSize1028WithPolyLineB2D
|
||||
testDrawRectangleOnSize4096WithPolyLineB2D
|
||||
testDrawRectangleOnSize1028WithPolyPolygon
|
||||
testDrawRectangleOnSize4096WithPolyPolygon
|
||||
testDrawRectangleOnSize1028WithPolyPolygonB2D
|
||||
testDrawRectangleOnSize4096WithPolygonPolygonB2D
|
||||
testDrawOpenPolygonWithPolyLine
|
||||
testDrawOpenPolygonWithPolygon
|
||||
testDrawOpenPolygonWithPolyPolygon
|
||||
testDrawOpenPolygonWithPolyPolygonB2D
|
||||
|
||||
---Name of the tests that were Skipped---
|
||||
testDrawInvertTrackFrameWithRectangle
|
||||
testDrawBitmap32bpp
|
||||
testDrawTransformedBitmap32bpp
|
||||
testDrawBitmapExWithAlpha32bpp
|
||||
testDrawMask32bpp
|
||||
testDrawBlend32bpp
|
||||
Binary file not shown.
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
||||
<!--
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* This file incorporates work covered by the following license notice:
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed
|
||||
* with this work for additional information regarding copyright
|
||||
* ownership. The ASF licenses this file to you under the Apache
|
||||
* License, Version 2.0 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
-->
|
||||
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Module1" script:language="StarBasic">REM ***** BASIC *****
|
||||
|
||||
Sub Main
|
||||
|
||||
End Sub</script:module>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
|
||||
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Standard" library:readonly="false" library:passwordprotected="false"/>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
|
||||
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Standard" library:readonly="false" library:passwordprotected="false">
|
||||
<library:element library:name="Module1"/>
|
||||
</library:library>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE library:libraries PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "libraries.dtd">
|
||||
<library:libraries xmlns:library="http://openoffice.org/2000/library" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<library:library library:name="Standard" library:link="false"/>
|
||||
</library:libraries>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE library:libraries PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "libraries.dtd">
|
||||
<library:libraries xmlns:library="http://openoffice.org/2000/library" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<library:library library:name="Standard" library:link="false"/>
|
||||
</library:libraries>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
520(Build:2)
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0"?>
|
||||
<conf:configuration-backend-db xmlns:conf="http://openoffice.org/extensionmanager/configuration-registry/2010"/>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0"?>
|
||||
<help:help-backend-db xmlns:help="http://openoffice.org/extensionmanager/help-registry/2010"/>
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0"?>
|
||||
<conf:configuration-backend-db xmlns:conf="http://openoffice.org/extensionmanager/configuration-registry/2010"/>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0"?>
|
||||
<help:help-backend-db xmlns:help="http://openoffice.org/extensionmanager/help-registry/2010"/>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0"?>
|
||||
<conf:configuration-backend-db xmlns:conf="http://openoffice.org/extensionmanager/configuration-registry/2010"/>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0"?>
|
||||
<help:help-backend-db xmlns:help="http://openoffice.org/extensionmanager/help-registry/2010"/>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="FirstRun" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/LastFoundSpellCheckers"><prop oor:name="en-US" oor:op="fuse" oor:type="oor:string-list"><value><it>org.openoffice.lingu.MySpellSpellChecker</it></value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="en-US" oor:op="fuse" oor:type="oor:string-list"><value><it>org.openoffice.lingu.MySpellSpellChecker</it></value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Logging/Settings"><node oor:name="unopkg" oor:op="replace"><prop oor:name="LogLevel" oor:op="fuse"><value>2147483647</value></prop><prop oor:name="DefaultHandler" oor:op="fuse"><value>com.sun.star.logging.FileHandler</value></prop><node oor:name="HandlerSettings"><prop oor:name="FileURL" oor:op="fuse"><value>$(userurl)/$(loggername).log</value></prop></node><prop oor:name="DefaultFormatter" oor:op="fuse"><value>com.sun.star.logging.PlainTextFormatter</value></prop><node oor:name="FormatterSettings"></node></node></item>
|
||||
<item oor:path="/org.openoffice.Office.Views/Windows"><node oor:name="SplitWindow0" oor:op="replace"><prop oor:name="Visible" oor:op="fuse"><value xsi:nil="true"/></prop><node oor:name="UserData"><prop oor:name="UserItem" oor:op="fuse" oor:type="xs:string"><value>V1,2,0</value></prop></node><prop oor:name="WindowState" oor:op="fuse"><value xsi:nil="true"/></prop></node></item>
|
||||
<item oor:path="/org.openoffice.Office.Views/Windows"><node oor:name="SplitWindow1" oor:op="replace"><prop oor:name="Visible" oor:op="fuse"><value xsi:nil="true"/></prop><node oor:name="UserData"><prop oor:name="UserItem" oor:op="fuse" oor:type="xs:string"><value>V1,2,0</value></prop></node><prop oor:name="WindowState" oor:op="fuse"><value xsi:nil="true"/></prop></node></item>
|
||||
<item oor:path="/org.openoffice.Office.Views/Windows"><node oor:name="SplitWindow2" oor:op="replace"><prop oor:name="Visible" oor:op="fuse"><value xsi:nil="true"/></prop><node oor:name="UserData"><prop oor:name="UserItem" oor:op="fuse" oor:type="xs:string"><value>V1,2,0</value></prop></node><prop oor:name="WindowState" oor:op="fuse"><value xsi:nil="true"/></prop></node></item>
|
||||
<item oor:path="/org.openoffice.Office.Views/Windows"><node oor:name="SplitWindow3" oor:op="replace"><prop oor:name="Visible" oor:op="fuse"><value xsi:nil="true"/></prop><node oor:name="UserData"><prop oor:name="UserItem" oor:op="fuse" oor:type="xs:string"><value>V1,2,0</value></prop></node><prop oor:name="WindowState" oor:op="fuse"><value xsi:nil="true"/></prop></node></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="DefaultAnchor" oor:op="fuse"><value>1</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="DrawingControl" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="FieldCode" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="GraphicObject" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="Note" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="SectionBoundaries" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="ShowBoundaries" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="ShowChangesInMargin" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="ShowContentTips" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="ShowInlineTooltips" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="ShowOutlineContentVisibilityButton" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="Table" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="TableBoundaries" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="TextBoundaries" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="TextBoundariesFull" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="TreatSubOutlineLevelsAsContent" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Display"><prop oor:name="UseHeaderFooterMenu" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="Bookmarks" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="Break" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="HiddenCharacter" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="HiddenParagraph" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="HiddenText" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="MetaCharacters" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="OptionalHyphen" oor:op="fuse"><value>false</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="ParagraphEnd" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="ProtectedSpace" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="Space" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/NonprintingCharacter"><prop oor:name="Tab" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Update"><prop oor:name="Chart" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Update"><prop oor:name="Field" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Update"><prop oor:name="Link" oor:op="fuse"><value>1</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Zoom"><prop oor:name="DefaultZoom" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Zoom"><prop oor:name="ZoomType" oor:op="fuse"><value>0</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/Content/Zoom"><prop oor:name="ZoomValue" oor:op="fuse"><value>100</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Office.Writer/FmtAidsAutocomplete"><prop oor:name="EncloseWithCharacters" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Setup/L10N"><prop oor:name="ooLocale" oor:op="fuse"><value>en-US</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Setup/Office/Factories/org.openoffice.Setup:Factory['com.sun.star.text.TextDocument']"><prop oor:name="ooSetupFactoryWindowAttributes" oor:op="fuse"><value>0,0,800,600;1;,,,;</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Setup/Office"><prop oor:name="LastCompatibilityCheckID" oor:op="fuse"><value>520(Build:2)</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Setup/Office"><prop oor:name="OfficeRestartInProgress" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Setup/Office"><prop oor:name="ooSetupInstCompleted" oor:op="fuse"><value>true</value></prop></item>
|
||||
<item oor:path="/org.openoffice.Setup/Product"><prop oor:name="ooSetupLastVersion" oor:op="fuse"><value>25.2</value></prop></item>
|
||||
</oor:items>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0"?>
|
||||
<conf:configuration-backend-db xmlns:conf="http://openoffice.org/extensionmanager/configuration-registry/2010"/>
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0"?>
|
||||
<help:help-backend-db xmlns:help="http://openoffice.org/extensionmanager/help-registry/2010"/>
|
||||
Regular → Executable
+16
-1
@@ -1,5 +1,6 @@
|
||||
.env
|
||||
deploy.sh
|
||||
.deploy_prev_sha
|
||||
/node_modules
|
||||
/vendor
|
||||
/sourcefiles
|
||||
@@ -9,4 +10,18 @@ _deploy
|
||||
/public/abitur
|
||||
/public/sveden
|
||||
dump.sql
|
||||
.idea
|
||||
.idea
|
||||
.DS_Store
|
||||
**/.
|
||||
.cursor
|
||||
.cache
|
||||
hot
|
||||
/storage/logs
|
||||
resources/js/ziggy.js
|
||||
public/vikon_core
|
||||
.mimocode
|
||||
.qwen
|
||||
QWEN.md
|
||||
AGENTS.md
|
||||
docs
|
||||
.phpunit.result.cache
|
||||
BIN
Binary file not shown.
Generated
-8
@@ -1,8 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
Generated
-5
@@ -1,5 +0,0 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||
</state>
|
||||
</component>
|
||||
Generated
-12
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="ntspi_db" uuid="3543eabb-ce62-4a3e-9580-690452ad4f73">
|
||||
<driver-ref>mysql.8</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
|
||||
<jdbc-url>jdbc:mysql://localhost:3306/ntspi_db</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="myValues">
|
||||
<value>
|
||||
<list size="7">
|
||||
<item index="0" class="java.lang.String" itemvalue="nobr" />
|
||||
<item index="1" class="java.lang.String" itemvalue="noembed" />
|
||||
<item index="2" class="java.lang.String" itemvalue="comment" />
|
||||
<item index="3" class="java.lang.String" itemvalue="noscript" />
|
||||
<item index="4" class="java.lang.String" itemvalue="embed" />
|
||||
<item index="5" class="java.lang.String" itemvalue="script" />
|
||||
<item index="6" class="java.lang.String" itemvalue="div" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
<option name="myCustomValuesEnabled" value="true" />
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
||||
Generated
-8
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/ntspi-new.iml" filepath="$PROJECT_DIR$/.idea/ntspi-new.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-203
@@ -1,203 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/app" isTestSource="false" packagePrefix="App\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/database/factories" isTestSource="false" packagePrefix="Database\Factories\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/database/seeders" isTestSource="false" packagePrefix="Database\Seeders\" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" packagePrefix="Tests\" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/brick/math" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/carbonphp/carbon-doctrine-types" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/dflydev/dot-access-data" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/dragonmantank/cron-expression" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/egulias/email-validator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/fakerphp/faker" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filp/whoops" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/fruitcake/php-cors" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/graham-campbell/result-type" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/guzzle" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/promises" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/uri-template" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/hamcrest/hamcrest-php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/inertiajs/inertia-laravel" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/intervention/image" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/breeze" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/framework" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/pint" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/prompts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/sail" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/sanctum" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/serializable-closure" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/laravel/tinker" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/commonmark" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/config" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/flysystem-local" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/mime-type-detection" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/mockery/mockery" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nesbot/carbon" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nette/schema" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nette/utils" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nunomaduro/collision" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nunomaduro/termwind" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/manifest" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/version" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpoption/phpoption" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-code-coverage" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-file-iterator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-invoker" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-text-template" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-timer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/phpunit" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/clock" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/event-dispatcher" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-client" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/simple-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psy/psysh" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ralouphie/getallheaders" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ramsey/collection" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ramsey/uuid" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/cli-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/complexity" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/diff" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/environment" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/exporter" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/global-state" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/lines-of-code" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-enumerator" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-reflector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/recursion-context" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/type" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/version" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/console" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/css-selector" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/deprecation-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/error-handler" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/filesystem" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/finder" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-kernel" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/mailer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/mime" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-grapheme" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-idn" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-normalizer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php80" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php83" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-uuid" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/process" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/routing" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/service-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/string" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation-contracts" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/uid" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/var-dumper" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/yaml" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/theseer/tokenizer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/tightenco/ziggy" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/tijsverkoyen/css-to-inline-styles" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/vlucas/phpdotenv" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/voku/portable-ascii" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/assert" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/anourvalar/eloquent-serialize" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/blade-ui-kit/blade-heroicons" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/blade-ui-kit/blade-icons" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/danharrin/date-format-converter" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/danharrin/livewire-rate-limiting" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/dbal" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/deprecations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/actions" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/filament" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/forms" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/infolists" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/notifications" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/spatie-laravel-tags-plugin" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/support" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/tables" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/widgets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/kirschbaum-development/eloquent-power-joins" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/csv" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/uri" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/league/uri-interfaces" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/livewire/livewire" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/masterminds/html5" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/openspout/openspout" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ryangjchandler/blade-capture-directive" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/color" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/eloquent-sortable" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/invade" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-package-tools" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-tags" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-translatable" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/html-sanitizer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/awcodes/filament-tiptap-editor" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/mohamedsabil83/filament-forms-tinyeditor" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/scrivo/highlight.php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/shiki-php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ueberdosis/tiptap-php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/protonemedia/laravel-cross-eloquent-search" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/xvladqt/faker-lorem-flickr" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/ezyang/htmlpurifier" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/maatwebsite/excel" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/maennchen/zipstream-php" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/markbaker/complex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/markbaker/matrix" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpoffice/phpspreadsheet" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/pxlrbt/filament-excel" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/guava/filament-icon-picker" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/joshembling/image-optimizer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/bezhansalleh/filament-shield" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-permission" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/vkcom/vk-php-sdk" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/nicmart/tree" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/browsershot" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/crawler" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-sitemap" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/robots-txt" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/temporary-directory" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/dom-crawler" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/predis/predis" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/yepsua/filament-range-field" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/tomatophp/console-helpers" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/tomatophp/filament-icons" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/imangazaliev/didom" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/opcodesio/log-viewer" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/opcodesio/mail-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/alxdorosenco/porto-for-laravel" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/calebporzio/sushi" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/filament/spatie-laravel-settings-plugin" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/phpstan/phpdoc-parser" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/shuvroroy/filament-spatie-laravel-backup" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/db-dumper" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-backup" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-settings" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/vendor/spatie/laravel-signal-aware-command" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
Generated
-224
@@ -1,224 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="LaravelPint">
|
||||
<laravel_pint_settings>
|
||||
<LaravelPintConfiguration tool_path="$PROJECT_DIR$/vendor/bin/pint" />
|
||||
</laravel_pint_settings>
|
||||
</component>
|
||||
<component name="MessDetectorOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PHPCSFixerOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PHPCodeSnifferOptionsConfiguration">
|
||||
<option name="highlightLevel" value="WARNING" />
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PhpIncludePathManager">
|
||||
<include_path>
|
||||
<path value="$PROJECT_DIR$/vendor/psr/container" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-client" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/event-dispatcher" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-message" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/cache" />
|
||||
<path value="$PROJECT_DIR$/vendor/voku/portable-ascii" />
|
||||
<path value="$PROJECT_DIR$/vendor/brick/math" />
|
||||
<path value="$PROJECT_DIR$/vendor/psy/psysh" />
|
||||
<path value="$PROJECT_DIR$/vendor/filp/whoops" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/clock" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/http-factory" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/log" />
|
||||
<path value="$PROJECT_DIR$/vendor/psr/simple-cache" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/mime-type-detection" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/flysystem-local" />
|
||||
<path value="$PROJECT_DIR$/vendor/vkcom/vk-php-sdk" />
|
||||
<path value="$PROJECT_DIR$/vendor/ezyang/htmlpurifier" />
|
||||
<path value="$PROJECT_DIR$/vendor/nette/schema" />
|
||||
<path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
|
||||
<path value="$PROJECT_DIR$/vendor/guava/filament-icon-picker" />
|
||||
<path value="$PROJECT_DIR$/vendor/nette/utils" />
|
||||
<path value="$PROJECT_DIR$/vendor/nesbot/carbon" />
|
||||
<path value="$PROJECT_DIR$/vendor/predis/predis" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/uri" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/commonmark" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/uri-interfaces" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/csv" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/config" />
|
||||
<path value="$PROJECT_DIR$/vendor/league/flysystem" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/laravel-sitemap" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/robots-txt" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/laravel-package-tools" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/laravel-translatable" />
|
||||
<path value="$PROJECT_DIR$/vendor/ramsey/uuid" />
|
||||
<path value="$PROJECT_DIR$/vendor/scrivo/highlight.php" />
|
||||
<path value="$PROJECT_DIR$/vendor/pxlrbt/filament-excel" />
|
||||
<path value="$PROJECT_DIR$/vendor/ramsey/collection" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/shiki-php" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/laravel-backup" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/eloquent-sortable" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/laravel-tags" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/temporary-directory" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/color" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/browsershot" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/crawler" />
|
||||
<path value="$PROJECT_DIR$/vendor/awcodes/filament-tiptap-editor" />
|
||||
<path value="$PROJECT_DIR$/vendor/dflydev/dot-access-data" />
|
||||
<path value="$PROJECT_DIR$/vendor/vlucas/phpdotenv" />
|
||||
<path value="$PROJECT_DIR$/vendor/yepsua/filament-range-field" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/db-dumper" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/laravel-permission" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/laravel-signal-aware-command" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/invade" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/sail" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/prompts" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/serializable-closure" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/sanctum" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/tinker" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/framework" />
|
||||
<path value="$PROJECT_DIR$/vendor/egulias/email-validator" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/pint" />
|
||||
<path value="$PROJECT_DIR$/vendor/phar-io/version" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
|
||||
<path value="$PROJECT_DIR$/vendor/nicmart/tree" />
|
||||
<path value="$PROJECT_DIR$/vendor/phar-io/manifest" />
|
||||
<path value="$PROJECT_DIR$/vendor/monolog/monolog" />
|
||||
<path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
|
||||
<path value="$PROJECT_DIR$/vendor/laravel/breeze" />
|
||||
<path value="$PROJECT_DIR$/vendor/mockery/mockery" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/translation" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-invoker" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/phpunit" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpunit/php-text-template" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-idn" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-uuid" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/mailer" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/filesystem" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/var-dumper" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/translation-contracts" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/uid" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/http-kernel" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/yaml" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/finder" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-php83" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher-contracts" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/dom-crawler" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-normalizer" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/css-selector" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/html-sanitizer" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/error-handler" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/service-contracts" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/routing" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/mime" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/string" />
|
||||
<path value="$PROJECT_DIR$/vendor/theseer/tokenizer" />
|
||||
<path value="$PROJECT_DIR$/vendor/xvladqt/faker-lorem-flickr" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-grapheme" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/process" />
|
||||
<path value="$PROJECT_DIR$/vendor/symfony/console" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/dbal" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/inflector" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/cache" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/lexer" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/infolists" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/filament" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/tables" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/forms" />
|
||||
<path value="$PROJECT_DIR$/vendor/fakerphp/faker" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/spatie-laravel-tags-plugin" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/event-manager" />
|
||||
<path value="$PROJECT_DIR$/vendor/doctrine/deprecations" />
|
||||
<path value="$PROJECT_DIR$/vendor/carbonphp/carbon-doctrine-types" />
|
||||
<path value="$PROJECT_DIR$/vendor/danharrin/date-format-converter" />
|
||||
<path value="$PROJECT_DIR$/vendor/hamcrest/hamcrest-php" />
|
||||
<path value="$PROJECT_DIR$/vendor/livewire/livewire" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/notifications" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/widgets" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/support" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/actions" />
|
||||
<path value="$PROJECT_DIR$/vendor/opcodesio/mail-parser" />
|
||||
<path value="$PROJECT_DIR$/vendor/opcodesio/log-viewer" />
|
||||
<path value="$PROJECT_DIR$/vendor/markbaker/complex" />
|
||||
<path value="$PROJECT_DIR$/vendor/markbaker/matrix" />
|
||||
<path value="$PROJECT_DIR$/vendor/inertiajs/inertia-laravel" />
|
||||
<path value="$PROJECT_DIR$/vendor/maennchen/zipstream-php" />
|
||||
<path value="$PROJECT_DIR$/vendor/danharrin/livewire-rate-limiting" />
|
||||
<path value="$PROJECT_DIR$/vendor/fruitcake/php-cors" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/object-reflector" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpoption/phpoption" />
|
||||
<path value="$PROJECT_DIR$/vendor/ralouphie/getallheaders" />
|
||||
<path value="$PROJECT_DIR$/vendor/openspout/openspout" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpoffice/phpspreadsheet" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/version" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/cli-parser" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/lines-of-code" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/type" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/diff" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/complexity" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
|
||||
<path value="$PROJECT_DIR$/vendor/tomatophp/filament-icons" />
|
||||
<path value="$PROJECT_DIR$/vendor/webmozart/assert" />
|
||||
<path value="$PROJECT_DIR$/vendor/tightenco/ziggy" />
|
||||
<path value="$PROJECT_DIR$/vendor/tomatophp/console-helpers" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
|
||||
<path value="$PROJECT_DIR$/vendor/shuvroroy/filament-spatie-laravel-backup" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/code-unit" />
|
||||
<path value="$PROJECT_DIR$/vendor/sebastian/environment" />
|
||||
<path value="$PROJECT_DIR$/vendor/nunomaduro/collision" />
|
||||
<path value="$PROJECT_DIR$/vendor/ueberdosis/tiptap-php" />
|
||||
<path value="$PROJECT_DIR$/vendor/guzzlehttp/guzzle" />
|
||||
<path value="$PROJECT_DIR$/vendor/nunomaduro/termwind" />
|
||||
<path value="$PROJECT_DIR$/vendor/guzzlehttp/promises" />
|
||||
<path value="$PROJECT_DIR$/vendor/guzzlehttp/psr7" />
|
||||
<path value="$PROJECT_DIR$/vendor/anourvalar/eloquent-serialize" />
|
||||
<path value="$PROJECT_DIR$/vendor/guzzlehttp/uri-template" />
|
||||
<path value="$PROJECT_DIR$/vendor/blade-ui-kit/blade-icons" />
|
||||
<path value="$PROJECT_DIR$/vendor/blade-ui-kit/blade-heroicons" />
|
||||
<path value="$PROJECT_DIR$/vendor/alxdorosenco/porto-for-laravel" />
|
||||
<path value="$PROJECT_DIR$/vendor/bezhansalleh/filament-shield" />
|
||||
<path value="$PROJECT_DIR$/vendor/maatwebsite/excel" />
|
||||
<path value="$PROJECT_DIR$/vendor/masterminds/html5" />
|
||||
<path value="$PROJECT_DIR$/vendor/calebporzio/sushi" />
|
||||
<path value="$PROJECT_DIR$/vendor/joshembling/image-optimizer" />
|
||||
<path value="$PROJECT_DIR$/vendor/ryangjchandler/blade-capture-directive" />
|
||||
<path value="$PROJECT_DIR$/vendor/graham-campbell/result-type" />
|
||||
<path value="$PROJECT_DIR$/vendor/dragonmantank/cron-expression" />
|
||||
<path value="$PROJECT_DIR$/vendor/mohamedsabil83/filament-forms-tinyeditor" />
|
||||
<path value="$PROJECT_DIR$/vendor/protonemedia/laravel-cross-eloquent-search" />
|
||||
<path value="$PROJECT_DIR$/vendor/tijsverkoyen/css-to-inline-styles" />
|
||||
<path value="$PROJECT_DIR$/vendor/imangazaliev/didom" />
|
||||
<path value="$PROJECT_DIR$/vendor/intervention/image" />
|
||||
<path value="$PROJECT_DIR$/vendor/composer" />
|
||||
<path value="$PROJECT_DIR$/vendor/kirschbaum-development/eloquent-power-joins" />
|
||||
<path value="$PROJECT_DIR$/vendor/spatie/laravel-settings" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpstan/phpdoc-parser" />
|
||||
<path value="$PROJECT_DIR$/vendor/filament/spatie-laravel-settings-plugin" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpdocumentor/type-resolver" />
|
||||
<path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
|
||||
</include_path>
|
||||
</component>
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="8.1" />
|
||||
<component name="PhpStanOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PhpUnit">
|
||||
<phpunit_settings>
|
||||
<PhpUnitSettings configuration_file_path="$PROJECT_DIR$/phpunit.xml" custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" use_configuration_file="true" />
|
||||
</phpunit_settings>
|
||||
</component>
|
||||
<component name="PsalmOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
Generated
-10
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PHPSpec">
|
||||
<suites>
|
||||
<PhpSpecSuiteConfiguration>
|
||||
<option name="myPath" value="$PROJECT_DIR$" />
|
||||
</PhpSpecSuiteConfiguration>
|
||||
</suites>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-10
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="PHPUnit">
|
||||
<option name="directories">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/tests" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-6
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
File diff suppressed because one or more lines are too long
Vendored
+179
@@ -0,0 +1,179 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
APP_DIR = '/var/www'
|
||||
CONTAINER = 'ntspi-php'
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Pre-deploy') {
|
||||
parallel {
|
||||
stage('Backup Database') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh '''
|
||||
mkdir -p backups
|
||||
docker exec ntspi-db mysqldump -u admin -psecret ntspi_db | gzip > backups/ntspi_db_$(date +%F_%H%M).sql.gz
|
||||
find backups -name "*.sql.gz" -mtime +3 -delete
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Cleanup Old Files') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh 'docker exec ntspi-php find /var/www/storage/app/email_attachments -type f -mtime +3 -delete'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Maintenance Mode') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh 'docker exec ntspi-php php artisan down || true'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Pull from Git') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh 'git config --global --add safe.directory ${APP_DIR}'
|
||||
sh 'DEPLOY_PREV_SHA=$(git rev-parse HEAD) && echo $DEPLOY_PREV_SHA > .deploy_prev_sha'
|
||||
sh 'git reset --hard'
|
||||
sh 'git remote set-url origin https://git.occasus.ru/failj/ntspi-app.git'
|
||||
sh 'git pull origin master'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Install Dependencies') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh 'docker exec ntspi-php php -d open_basedir=none /usr/local/bin/composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Database Migrations') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh 'docker exec ntspi-php php artisan migrate --force'
|
||||
sh 'docker exec ntspi-php php artisan dashboard:sync-permissions'
|
||||
}
|
||||
}
|
||||
post {
|
||||
failure {
|
||||
dir("${APP_DIR}") {
|
||||
sh '''
|
||||
PREV_SHA=$(cat .deploy_prev_sha 2>/dev/null || echo "")
|
||||
if [ -n "$PREV_SHA" ]; then
|
||||
echo "Rolling back to $PREV_SHA"
|
||||
git reset --hard $PREV_SHA
|
||||
docker exec ntspi-php php artisan migrate:rollback --force || true
|
||||
docker exec ntspi-php sh -c "php -d open_basedir=none /usr/local/bin/composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader"
|
||||
docker exec ntspi-php php artisan cache:clear
|
||||
docker restart ntspi-nginx ntspi-php ntspi-php-queue
|
||||
fi
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build Frontend') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh 'docker exec ntspi-php sh -c "npm ci --legacy-peer-deps && npm run build"'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Clear & Warm Caches') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh '''
|
||||
docker exec ntspi-php php artisan cache:clear
|
||||
docker exec ntspi-php php artisan config:clear
|
||||
docker exec ntspi-php php artisan route:clear
|
||||
docker exec ntspi-php php artisan view:clear
|
||||
docker exec ntspi-php php artisan filament:clear-cached-components
|
||||
docker exec ntspi-php php artisan filament:optimize-clear
|
||||
|
||||
docker exec ntspi-php php artisan optimize
|
||||
docker exec ntspi-php php artisan icons:cache
|
||||
docker exec ntspi-php php artisan filament:cache-components
|
||||
docker exec ntspi-php php artisan filament:optimize
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Fix Permissions') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh 'docker exec -u root ntspi-php chown -R www-data:www-data storage bootstrap/cache'
|
||||
sh 'docker exec -u root ntspi-php chmod -R 775 storage bootstrap/cache'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Restart Services') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh '''
|
||||
docker restart ntspi-nginx ntspi-php ntspi-php-queue
|
||||
sleep 5
|
||||
docker exec ntspi-php php artisan inertia:stop-ssr || true
|
||||
sleep 2
|
||||
docker exec ntspi-php php artisan inertia:start-ssr || true
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Health Check') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh '''
|
||||
for i in $(seq 1 30); do
|
||||
if docker exec ntspi-php php artisan about > /dev/null 2>&1; then
|
||||
echo "App is ready"
|
||||
break
|
||||
fi
|
||||
echo "Waiting for app... ($i/30)"
|
||||
sleep 1
|
||||
done
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Enable App') {
|
||||
steps {
|
||||
dir("${APP_DIR}") {
|
||||
sh 'docker exec ntspi-php php artisan up'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
success {
|
||||
echo "Deploy completed successfully"
|
||||
dir("${APP_DIR}") {
|
||||
sh 'rm -f .deploy_prev_sha'
|
||||
}
|
||||
}
|
||||
failure {
|
||||
echo "Deploy failed. Check build logs in Jenkins."
|
||||
dir("${APP_DIR}") {
|
||||
sh 'docker exec ntspi-php php artisan up || true'
|
||||
sh 'rm -f .deploy_prev_sha'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
***
|
||||
|
||||
# Corporate Digital University System (NTSPI)
|
||||
|
||||
A comprehensive web platform designed for the **Nizhny Tagil State Social Pedagogical Institute (NTSPI)**. This system serves as a full-featured replacement for the legacy website, providing tools for content management, educational program administration, admission campaigns, and institutional structure management.
|
||||
|
||||
## 🚀 Tech Stack
|
||||
|
||||
### Frontend
|
||||
* **Framework:** Vue.js 3 (Composition API)
|
||||
* **Adapter:** Inertia.js (Monolith structure with SPA feel)
|
||||
* **Styling:** Tailwind CSS
|
||||
* **Build Tool:** Vite
|
||||
|
||||
### Backend
|
||||
* **Core:** PHP 8.2 / Laravel
|
||||
* **Admin Panel:** Filament PHP (CMS & Resource Management)
|
||||
* **Database:** MySQL 8.0
|
||||
* **Caching & Queues:** Redis
|
||||
* **Server:** Nginx + PHP-FPM
|
||||
|
||||
### Infrastructure
|
||||
* **Containerization:** Docker & Docker Compose
|
||||
* **SSL:** Certbot (Let's Encrypt)
|
||||
|
||||
---
|
||||
|
||||
## 🏗 Architecture
|
||||
|
||||
The backend follows the **Porto Architecture Pattern**, organizing code into logical modular units to ensure scalability and maintainability.
|
||||
|
||||
* **Ship Layer:** Low-level code, parent classes, and configuration.
|
||||
* **Containers Layer:** Encapsulates business logic into modular containers (e.g., `AdditionalEducation`, `Article`, `Event`, `User`, `Schedule`, etc.).
|
||||
* **Request Lifecycle:** Route -> Controller -> Action -> Task -> UI.
|
||||
|
||||
---
|
||||
|
||||
## ✨ Key Features
|
||||
|
||||
* **Content Management (CMS):** Advanced management of News, Articles, and Events with media galleries and status workflows (Draft, Published, Archived).
|
||||
* **Institute Structure:** Hierarchical management of Faculties, Departments (Kafedras), Divisions, and Staff profiles.
|
||||
* **Educational Programs:** Catalog of study programs, admission plans, and entrance exam requirements.
|
||||
* **Admissions Management:** Tools to manage "Admission Campaigns" (Priemnaya Kampaniya), enabling dynamic updates to student intake numbers and rules.
|
||||
* **Role-Based Access Control (RBAC):** Powered by **Filament Shield**. Granular permissions allowing different departments (Deans, Press Service, HR) to manage their specific sections independently.
|
||||
* **Dynamic Routing:** Custom pages and navigation structures managed directly via the Database.
|
||||
* **Cross-Model Search:** Unified global search across News, Pages, Events, and Programs using standard Eloquent models.
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Installation & Local Development
|
||||
|
||||
The project includes a Docker environment for easy deployment.
|
||||
|
||||
### 1. Clone the Repository
|
||||
```bash
|
||||
git clone https://github.com/F4ilji/ntspi-app.git
|
||||
cd ntspi-app
|
||||
```
|
||||
|
||||
### 2. Configure Environment
|
||||
Create the environment file from the example.
|
||||
```bash
|
||||
cp example.env .env
|
||||
```
|
||||
|
||||
### 3. Create Directories & Set Permissions
|
||||
Ensure Laravel storage directories exist and have write permissions.
|
||||
```bash
|
||||
mkdir -p storage/{app,logs,framework/{cache,sessions,views}}
|
||||
sudo chown -R www-data:www-data storage
|
||||
sudo chmod -R 775 storage
|
||||
```
|
||||
|
||||
### 4. Start Docker Containers
|
||||
Launch Nginx, MySQL, Redis, and the App container.
|
||||
```bash
|
||||
docker compose up --build -d
|
||||
```
|
||||
|
||||
### 5. Install Dependencies
|
||||
Enter the PHP container to run setup commands:
|
||||
```bash
|
||||
docker exec -it ntspi-php bash
|
||||
```
|
||||
|
||||
Inside the container, run:
|
||||
```bash
|
||||
# Backend dependencies
|
||||
composer install
|
||||
|
||||
# Database migrations
|
||||
php artisan migrate
|
||||
|
||||
# Frontend dependencies
|
||||
npm i
|
||||
|
||||
# Build assets
|
||||
npm run build
|
||||
```
|
||||
|
||||
### 6. Initialize System Data
|
||||
Set up user roles and seed the database with initial data.
|
||||
```bash
|
||||
# Initialize permissions/roles (Critical for Filament Shield)
|
||||
php artisan roles:init-roles
|
||||
|
||||
# Seed dummy data (Optional)
|
||||
php artisan db:seed
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📂 Project Structure Overview
|
||||
|
||||
* `_docker/`: Docker configuration files (Nginx, PHP, MySQL).
|
||||
* `app/Containers/`: Business logic modules (Porto pattern).
|
||||
* `resources/js/`: Vue.js components, Pages, and shared UI assets.
|
||||
* `routes/`: Web and API routes (including dynamic DB-based routing logic).
|
||||
Vendored
BIN
Binary file not shown.
Regular → Executable
+38
-15
@@ -1,6 +1,9 @@
|
||||
FROM php:8.2-fpm
|
||||
|
||||
# Установка системных зависимостей
|
||||
# Устанавливаем рабочую директорию
|
||||
WORKDIR /var/www
|
||||
|
||||
# Установка системных зависимостей и инструментов в одном слое
|
||||
RUN apt-get update && apt-get install -y \
|
||||
apt-utils \
|
||||
libpq-dev \
|
||||
@@ -21,15 +24,26 @@ RUN apt-get update && apt-get install -y \
|
||||
libicu-dev \
|
||||
g++ \
|
||||
default-mysql-client \
|
||||
&& docker-php-ext-configure gd --with-webp --with-jpeg \
|
||||
&& docker-php-ext-install gd pdo_mysql bcmath zip intl \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
# Установка Node.js (актуальная LTS-версия)
|
||||
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
|
||||
# LibreOffice для конвертации DOC в DOCX
|
||||
libreoffice-common \
|
||||
libreoffice-writer \
|
||||
# Kerberos для IMAP
|
||||
libkrb5-dev \
|
||||
# Установка Node.js (актуальная LTS-версия 18)
|
||||
&& curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
|
||||
&& apt-get install -y nodejs \
|
||||
&& npm install -g npm
|
||||
&& npm install -g npm \
|
||||
# Очистка кэша для уменьшения размера образа
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Установка install-php-extensions
|
||||
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
|
||||
RUN chmod +x /usr/local/bin/install-php-extensions
|
||||
|
||||
# Установка расширений PHP
|
||||
RUN docker-php-ext-configure gd --with-webp --with-jpeg \
|
||||
&& docker-php-ext-install -j$(nproc) gd pdo_mysql bcmath zip intl \
|
||||
&& install-php-extensions imap
|
||||
|
||||
# Установка Composer
|
||||
ENV COMPOSER_ALLOW_SUPERUSER=1
|
||||
@@ -37,7 +51,19 @@ RUN curl -sS https://getcomposer.org/installer | php -- \
|
||||
--filename=composer \
|
||||
--install-dir=/usr/local/bin
|
||||
|
||||
# Копирование конфигураций
|
||||
|
||||
# Создание необходимых директорий для Laravel
|
||||
RUN mkdir -p storage/framework/views storage/framework/sessions storage/framework/cache storage/logs bootstrap/cache
|
||||
|
||||
# Добавляем www-data в группу с GID=1000 (совпадает с GID хост-пользователя)
|
||||
RUN groupadd -g 1000 hostgroup 2>/dev/null || true \
|
||||
&& usermod -aG hostgroup www-data
|
||||
|
||||
# Установка правильных прав доступа
|
||||
RUN chown -R www-data:www-data storage bootstrap/cache \
|
||||
&& chmod -R 775 storage bootstrap/cache
|
||||
|
||||
# Копирование конфигураций PHP и Supervisor
|
||||
COPY ./_docker/app/php.ini /usr/local/etc/php/conf.d/php.ini
|
||||
COPY ./_docker/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
@@ -47,12 +73,9 @@ RUN chmod 0644 /etc/cron.d/laravel-cron \
|
||||
&& crontab /etc/cron.d/laravel-cron \
|
||||
&& touch /var/log/cron.log
|
||||
|
||||
# Рабочая директория
|
||||
WORKDIR /var/www
|
||||
|
||||
# Запуск Supervisor (управляет PHP-FPM и Inertia SSR)
|
||||
# Запуск Supervisor (управляет PHP-FPM, Inertia SSR, и worker-ами)
|
||||
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]
|
||||
|
||||
# Открываем порты
|
||||
EXPOSE 9000
|
||||
EXPOSE 13714
|
||||
EXPOSE 13714
|
||||
|
||||
Regular → Executable
Regular → Executable
+53
-1
@@ -1,4 +1,56 @@
|
||||
post_max_size = 128M
|
||||
upload_max_filesize = 128M
|
||||
memory_limit = 256M
|
||||
max_file_uploads = 50
|
||||
|
||||
; OPTIMIZATION: Увеличен лимит памяти для обработки больших IMAP-сообщений
|
||||
; Предыдущая ошибка: 256MB было недостаточно для загрузки всех писем
|
||||
; Теперь: 1GB позволяет обрабатывать письма batch-ами по 10 штук
|
||||
memory_limit = 1G
|
||||
|
||||
request_terminate_timeout = 300
|
||||
max_execution_time = 120
|
||||
max_input_time = 120
|
||||
|
||||
; OPTIMIZATION: Настройки OPcache для производительности
|
||||
opcache.enable = 1
|
||||
opcache.memory_consumption = 128
|
||||
opcache.max_accelerated_files = 10000
|
||||
opcache.revalidate_freq = 2
|
||||
|
||||
; OPTIMIZATION: Настройки сессий
|
||||
session.gc_maxlifetime = 1440
|
||||
session.cookie_lifetime = 0
|
||||
|
||||
; ============================================
|
||||
; SECURITY: open_basedir restriction
|
||||
; ОТКЛЮЧЕНО — блокирует работу Composer, Artisan, LibreOffice
|
||||
; ============================================
|
||||
; open_basedir = /var/www:/tmp:/root/.config:/usr/local/bin:/usr/local/lib/php
|
||||
|
||||
; ============================================
|
||||
; SECURITY: Запрет опасных функций
|
||||
; curl_exec и shell_exec оставлены — используются приложением (VK API, LibreOffice конвертация)
|
||||
; proc_open и popen оставлены — требуются для Inertia SSR (Symfony Process)
|
||||
; ============================================
|
||||
disable_functions = passthru,system,parse_ini_file,show_source,highlight_file,pcntl_exec,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid
|
||||
|
||||
; ============================================
|
||||
; SECURITY: Запрет удалённого включения файлов
|
||||
; Предотвращает RFI (Remote File Inclusion) атаки
|
||||
; ============================================
|
||||
allow_url_include = Off
|
||||
allow_url_fopen = On
|
||||
|
||||
; ============================================
|
||||
; SECURITY: Защищённые сессии
|
||||
; ============================================
|
||||
session.cookie_httponly = 1
|
||||
session.cookie_secure = 1
|
||||
session.use_strict_mode = 1
|
||||
session.use_only_cookies = 1
|
||||
session.name = __Secure-NTSPISESSID
|
||||
|
||||
; ============================================
|
||||
; SECURITY: Скрыть версию PHP из заголовков
|
||||
; ============================================
|
||||
expose_php = Off
|
||||
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
# _docker/jenkins/Dockerfile
|
||||
|
||||
FROM jenkins/jenkins:lts-jdk17
|
||||
|
||||
# Переключаемся на пользователя root для установки пакетов
|
||||
USER root
|
||||
|
||||
# Устанавливаем Docker CLI и другие утилиты
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends lsb-release curl && \
|
||||
curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc https://download.docker.com/linux/debian/gpg && \
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.asc] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list && \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends docker-ce-cli && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Устанавливаем Docker Compose v2 (как плагин)
|
||||
RUN mkdir -p /usr/local/lib/docker/cli-plugins && \
|
||||
curl -SL "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-$(uname -m)" -o /usr/local/lib/docker/cli-plugins/docker-compose && \
|
||||
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
|
||||
|
||||
# Возвращаемся к пользователю jenkins
|
||||
USER jenkins
|
||||
|
||||
Regular → Executable
Regular → Executable
+10
@@ -25,7 +25,17 @@ server {
|
||||
try_files $uri /index.php?$args; # Обработка запросов
|
||||
}
|
||||
|
||||
# ========================================================================
|
||||
# VIKON MODULE SECURITY — Block executable files in module directories
|
||||
# MUST be placed BEFORE location ~ \.php$ to take effect
|
||||
# ========================================================================
|
||||
|
||||
# Block PHP and other server-side scripts in sveden/abitur
|
||||
location ~ ^/(sveden|abitur)/.*\.(php|php3|php4|php5|php7|php8|phps|phtml|pl|py|pyc|cgi|sh|bash|bat|cmd|exe|com|ps1|psm1|rb|asp|aspx|jsp|cfm)$ {
|
||||
deny all;
|
||||
return 403;
|
||||
access_log /var/log/nginx/blocked_module_scripts.log;
|
||||
}
|
||||
|
||||
location /sveden/ {
|
||||
alias /var/www/public/sveden/;
|
||||
|
||||
Regular → Executable
+122
-7
@@ -50,17 +50,40 @@ server {
|
||||
root /var/www/public;
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-Content-Type-Options "nosniff";
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin";
|
||||
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
|
||||
add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https: blob:; font-src 'self' data: https:; connect-src 'self' https:; worker-src 'self' blob:; frame-ancestors 'self';" always;
|
||||
|
||||
location ^~ /jenkins/ {
|
||||
proxy_pass http://jenkins:8080;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_read_timeout 90;
|
||||
proxy_max_temp_file_size 0;
|
||||
proxy_redirect http:// https://;
|
||||
}
|
||||
|
||||
location / {
|
||||
add_header Access-Control-Allow-Origin *;
|
||||
add_header Access-Control-Allow-Origin "https://www.ntspi.ru" always;
|
||||
try_files $uri /index.php?$args;
|
||||
}
|
||||
|
||||
# ========================================================================
|
||||
# VIKON MODULE SECURITY — Block executable files in module directories
|
||||
# MUST be placed BEFORE location ~ \.php$ to take effect
|
||||
# ========================================================================
|
||||
|
||||
location ~ ^/(sveden|abitur)/.*\.(php|php3|php4|php5|php7|php8|phps|phtml|pl|py|pyc|cgi|sh|bash|bat|cmd|exe|com|ps1|psm1|rb|asp|aspx|jsp|cfm)$ {
|
||||
deny all;
|
||||
return 403;
|
||||
access_log /var/log/nginx/blocked_module_scripts.log;
|
||||
}
|
||||
|
||||
location /sveden/ {
|
||||
alias /var/www/public/sveden/;
|
||||
index index.html;
|
||||
@@ -85,7 +108,74 @@ server {
|
||||
return 301 /abitur/;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
location /vsoko/ {
|
||||
alias /var/www/public/vsoko/;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /vsoko/index.html;
|
||||
expires epoch;
|
||||
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
|
||||
}
|
||||
|
||||
location = /vsoko {
|
||||
return 301 /vsoko/;
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# SECURITY: Запрет доступа к чувствительным файлам
|
||||
# ============================================
|
||||
|
||||
# Запрет доступа к .env, .git и всем скрытым файлам
|
||||
location ~ /\. {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# Запрет доступа к composer, package, lock, readme файлам
|
||||
location ~* (composer\.(json|lock)|package\.(json|lock)|\.md|\.txt|\.log)$ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# Разрешаем доступ к публичным vendor ассетам (log-viewer, и т.д.)
|
||||
# Это статические файлы в public/vendor/
|
||||
location /vendor/ {
|
||||
# Запрещаем выполнение PHP файлов
|
||||
location ~ \.php$ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# Отдаём статические файлы
|
||||
try_files $uri =404;
|
||||
autoindex off;
|
||||
}
|
||||
|
||||
# Разрешаем доступ к публичным файлам storage (через symlink public/storage)
|
||||
# Это должны быть ТОЛЬКО изображения, документы и т.д. — НЕ PHP файлы
|
||||
location /storage/ {
|
||||
# Запрещаем выполнение PHP файлов в storage
|
||||
location ~ \.php$ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# Разрешаем доступ к статическим файлам
|
||||
try_files $uri =404;
|
||||
|
||||
# Запрещаем листинг директорий
|
||||
autoindex off;
|
||||
}
|
||||
|
||||
# Запрет прямого доступа к internal storage paths (в обход symlink)
|
||||
location ~ ^/storage/app/(?!public) {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# VIKON: OAuth callback redirect (index.php)
|
||||
# ============================================
|
||||
location = /vikon_core/update/index.php {
|
||||
try_files $uri =404;
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
fastcgi_pass app:9000;
|
||||
@@ -99,6 +189,31 @@ server {
|
||||
fastcgi_param HTTPS On;
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# PHP-FPM: ТОЛЬКО /index.php как entry point
|
||||
# ============================================
|
||||
location ~ \.php$ {
|
||||
# КРИТИЧНО: Разрешаем ТОЛЬКО /index.php
|
||||
# Любой другой .php файл (например, shell.php в uploads) — 403
|
||||
if ($uri !~ ^/index\.php$) {
|
||||
return 403;
|
||||
}
|
||||
|
||||
try_files $uri =404;
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
fastcgi_pass app:9000;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
fastcgi_buffers 16 16k;
|
||||
fastcgi_buffer_size 32k;
|
||||
fastcgi_read_timeout 600;
|
||||
fastcgi_send_timeout 600;
|
||||
fastcgi_param REQUEST_SCHEME https;
|
||||
fastcgi_param HTTPS On;
|
||||
}
|
||||
|
||||
location ~ /\.ht {
|
||||
deny all;
|
||||
}
|
||||
|
||||
Regular → Executable
+22
-1
@@ -20,11 +20,32 @@ server {
|
||||
|
||||
root /var/www/public;
|
||||
|
||||
location ^~ /jenkins/ {
|
||||
proxy_pass http://jenkins:8080;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_read_timeout 90;
|
||||
proxy_max_temp_file_size 0;
|
||||
proxy_redirect http:// https://;
|
||||
}
|
||||
|
||||
location / {
|
||||
add_header Access-Control-Allow-Origin *; # Заголовок для CORS
|
||||
try_files $uri /index.php?$args; # Обработка запросов
|
||||
}
|
||||
|
||||
# ========================================================================
|
||||
# VIKON MODULE SECURITY — Block executable files in module directories
|
||||
# MUST be placed BEFORE location ~ \.php$ to take effect
|
||||
# ========================================================================
|
||||
|
||||
location ~ ^/(sveden|abitur)/.*\.(php|php3|php4|php5|php7|php8|phps|phtml|pl|py|pyc|cgi|sh|bash|bat|cmd|exe|com|ps1|psm1|rb|asp|aspx|jsp|cfm)$ {
|
||||
deny all;
|
||||
return 403;
|
||||
access_log /var/log/nginx/blocked_module_scripts.log;
|
||||
}
|
||||
|
||||
location /sveden/ {
|
||||
alias /var/www/public/sveden/;
|
||||
index index.html;
|
||||
|
||||
Regular → Executable
Vendored
BIN
Binary file not shown.
@@ -1,223 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Containers\AdditionalEducation\Models\AdditionalEducation;
|
||||
use App\Containers\AppStructure\Models\Page;
|
||||
use App\Containers\Article\Enums\PostStatus;
|
||||
use App\Containers\Article\Models\Post;
|
||||
use App\Containers\Education\Models\EducationalProgram;
|
||||
use App\Containers\Event\Models\Event;
|
||||
use App\Containers\InstituteStructure\Models\Department;
|
||||
use App\Containers\InstituteStructure\Models\Division;
|
||||
use App\Containers\InstituteStructure\Models\Faculty;
|
||||
use App\Containers\User\Models\User;
|
||||
use App\Ship\Enums\Education\EducationalProgramStatus;
|
||||
use Spatie\Sitemap\Sitemap;
|
||||
use Spatie\Sitemap\Tags\Url;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
|
||||
class GenerateSitemap extends Command
|
||||
{
|
||||
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'sitemap:generate';
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Генерирует карту сайта';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$sitemap = Sitemap::create();
|
||||
|
||||
// Генерация карты сайта для всех моделей
|
||||
$this->generatePages($sitemap);
|
||||
$this->generatePosts($sitemap);
|
||||
$this->generateDivisions($sitemap);
|
||||
$this->generateEducationPrograms($sitemap); // Добавляем генерацию для EducationProgram
|
||||
$this->generateEvents($sitemap); // Добавляем генерацию для Event
|
||||
$this->generateAdditionalEducations($sitemap); // Добавляем генерацию для AdditionalEducation
|
||||
$this->generateFaculties($sitemap); // Добавляем генерацию для Faculty
|
||||
$this->generateDepartments($sitemap); // Добавляем генерацию для Department
|
||||
$this->generateUsers($sitemap); // Добавляем генерацию для User
|
||||
|
||||
// Сохраняем карту сайта в файл
|
||||
$sitemap->writeToFile(public_path('sitemap.xml'));
|
||||
}
|
||||
|
||||
protected function generatePages(Sitemap $sitemap)
|
||||
{
|
||||
$pages = Page::query()
|
||||
->where('is_visible', true)
|
||||
->where('code', 200)
|
||||
->where('path', '!=', null)
|
||||
->where('is_url', false)
|
||||
->where('title', '!=', null)
|
||||
->where('searchable', true)
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $pages, function($page) {
|
||||
return [
|
||||
'route' => 'page.view',
|
||||
'params' => ['path' => $page->path],
|
||||
'lastModificationDate' => $page->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function generatePosts(Sitemap $sitemap)
|
||||
{
|
||||
$posts = Post::query()
|
||||
->where('status', PostStatus::PUBLISHED)
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $posts, function($post) {
|
||||
return [
|
||||
'route' => 'client.post.show',
|
||||
'params' => ['slug' => $post->slug],
|
||||
'lastModificationDate' => $post->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function generateDivisions(Sitemap $sitemap)
|
||||
{
|
||||
$divisions = Division::query()
|
||||
->where('is_active', true)
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $divisions, function($division) {
|
||||
return [
|
||||
'route' => 'client.division.show',
|
||||
'params' => ['slug' => $division->slug],
|
||||
'lastModificationDate' => $division->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function generateEducationPrograms(Sitemap $sitemap)
|
||||
{
|
||||
$programs = EducationalProgram::query()
|
||||
->where('status', EducationalProgramStatus::PUBLISHED) // Пример условия для активных программ
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $programs, function($program) {
|
||||
return [
|
||||
'route' => 'client.program.show',
|
||||
'params' => ['slug' => $program->slug],
|
||||
'lastModificationDate' => $program->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function generateEvents(Sitemap $sitemap)
|
||||
{
|
||||
$now = now()->toDateString(); // Текущая дата
|
||||
|
||||
$events = Event::query()
|
||||
->where('event_date_end', '>=', $now) // Только актуальные события
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $events, function($event) {
|
||||
return [
|
||||
'route' => 'client.event.show',
|
||||
'params' => ['slug' => $event->slug],
|
||||
'lastModificationDate' => $event->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function generateAdditionalEducations(Sitemap $sitemap)
|
||||
{
|
||||
$educations = AdditionalEducation::query()
|
||||
->where('is_active', true) // Пример условия для активных программ
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $educations, function($education) {
|
||||
return [
|
||||
'route' => 'client.additionalEducation.show',
|
||||
'params' => ['slug' => $education->slug],
|
||||
'lastModificationDate' => $education->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function generateFaculties(Sitemap $sitemap)
|
||||
{
|
||||
$faculties = Faculty::query()
|
||||
->where('is_active', true) // Пример условия для активных факультетов
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $faculties, function($faculty) {
|
||||
return [
|
||||
'route' => 'client.faculty.show',
|
||||
'params' => ['slug' => $faculty->slug],
|
||||
'lastModificationDate' => $faculty->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function generateDepartments(Sitemap $sitemap)
|
||||
{
|
||||
$departments = Department::query()
|
||||
->where('is_active', true) // Пример условия для активных кафедр
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $departments, function($department) {
|
||||
return [
|
||||
'route' => 'client.department.show',
|
||||
'params' => ['facultySlug' => $department->faculty->slug, 'departmentSlug' => $department->slug],
|
||||
'lastModificationDate' => $department->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function generateUsers(Sitemap $sitemap)
|
||||
{
|
||||
$users = User::query()
|
||||
->whereHas('userDetail', function ($q) {
|
||||
$q->where('is_only_worker', false);
|
||||
})
|
||||
->get();
|
||||
|
||||
$this->addUrlsToSitemap($sitemap, $users, function($user) {
|
||||
return [
|
||||
'route' => 'client.person.show',
|
||||
'params' => ['slug' => $user->slug],
|
||||
'lastModificationDate' => $user->updated_at,
|
||||
'priority' => 0.5,
|
||||
];
|
||||
});
|
||||
}
|
||||
|
||||
protected function addUrlsToSitemap(Sitemap $sitemap, $items, callable $callback)
|
||||
{
|
||||
foreach ($items as $item) {
|
||||
$urlData = $callback($item);
|
||||
$url = route($urlData['route'], $urlData['params']);
|
||||
$sitemap->add(Url::create($url)
|
||||
->setLastModificationDate($urlData['lastModificationDate'])
|
||||
->setPriority($urlData['priority']));
|
||||
}
|
||||
}
|
||||
}
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+38
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AdditionalEducation\Actions;
|
||||
|
||||
use App\Containers\AdditionalEducation\Data\Resources\AdditionalEducationResource;
|
||||
use App\Containers\AdditionalEducation\Tasks\FindAdditionalEducationBySlugTask;
|
||||
use App\Ship\Contracts\SeoServiceInterface;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class GetAdditionalEducationBySlugAction
|
||||
{
|
||||
public function __construct(
|
||||
readonly SeoServiceInterface $seoPageProvider,
|
||||
readonly FindAdditionalEducationBySlugTask $findAdditionalEducationBySlugTask,
|
||||
) {}
|
||||
|
||||
public function run(string $slug, Request $request): array
|
||||
{
|
||||
$additionalEducationModel = $this->findAdditionalEducationBySlugTask->run($slug);
|
||||
$seo = $this->seoPageProvider->getSeoForModel($additionalEducationModel);
|
||||
|
||||
$settingsPage = $request->attributes->get('settings_page') ?? [];
|
||||
|
||||
if (array_key_exists('form', $settingsPage)) {
|
||||
$form = $settingsPage['form'];
|
||||
} else {
|
||||
$form = null;
|
||||
}
|
||||
|
||||
$additionalEducation = new AdditionalEducationResource($additionalEducationModel);
|
||||
|
||||
return compact(
|
||||
'additionalEducation',
|
||||
'seo',
|
||||
'form',
|
||||
);
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AdditionalEducation\Actions;
|
||||
|
||||
use App\Containers\AdditionalEducation\Tasks\GetAllAdditionalEducationCategoriesPreviewTask;
|
||||
use App\Containers\AdditionalEducation\Tasks\GetDirectionAdditionalEducationsTask;
|
||||
use App\Containers\AdditionalEducation\Tasks\GetFilteredAdditionalEducationCategoriesTask;
|
||||
use App\Containers\AdditionalEducation\Tasks\BuildFormsEducationArrayTask;
|
||||
use App\Containers\AdditionalEducation\Tasks\BuildAdditionalEducationFiltersTask;
|
||||
use App\Ship\Actions\Action;
|
||||
use App\Ship\Contracts\SeoServiceInterface;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class GetAllAdditionalEducationsAction
|
||||
{
|
||||
public function __construct(
|
||||
readonly SeoServiceInterface $seoPageProvider,
|
||||
readonly GetDirectionAdditionalEducationsTask $getDirectionAdditionalEducationsTask,
|
||||
readonly GetFilteredAdditionalEducationCategoriesTask $getFilteredAdditionalEducationCategoriesTask,
|
||||
readonly GetAllAdditionalEducationCategoriesPreviewTask $getAllAdditionalEducationCategoriesPreviewTask,
|
||||
readonly BuildFormsEducationArrayTask $buildFormsEducationArrayTask,
|
||||
readonly BuildAdditionalEducationFiltersTask $buildAdditionalEducationFiltersTask,
|
||||
) {}
|
||||
|
||||
public function run(Request $request): array
|
||||
{
|
||||
$directionAdditionalEducations = $this->getDirectionAdditionalEducationsTask->run($request);
|
||||
$additionalEducations = $this->getFilteredAdditionalEducationCategoriesTask->run($request);
|
||||
$categories = $this->getAllAdditionalEducationCategoriesPreviewTask->run();
|
||||
$forms_education = $this->buildFormsEducationArrayTask->run();
|
||||
$seo = $this->seoPageProvider->getSeoForCurrentPage();
|
||||
$filters = $this->buildAdditionalEducationFiltersTask->run($request);
|
||||
|
||||
return compact(
|
||||
'directionAdditionalEducations',
|
||||
'additionalEducations',
|
||||
'filters',
|
||||
'forms_education',
|
||||
'categories',
|
||||
'seo'
|
||||
);
|
||||
}
|
||||
}
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+4
-2
@@ -5,13 +5,15 @@ namespace App\Containers\AdditionalEducation\Models;
|
||||
use App\Ship\Enums\Education\FormEducation;
|
||||
use App\Ship\Models\Model;
|
||||
use App\Ship\Models\Seo;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use App\Ship\Traits\HasContainerFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphOne;
|
||||
|
||||
class AdditionalEducation extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
use HasContainerFactory;
|
||||
|
||||
protected static string $factory = \Database\Factories\AdditionalEducationFactory::class;
|
||||
|
||||
protected $guarded = false;
|
||||
|
||||
|
||||
Regular → Executable
+4
-2
@@ -3,14 +3,16 @@
|
||||
namespace App\Containers\AdditionalEducation\Models;
|
||||
|
||||
use App\Ship\Models\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use App\Ship\Traits\HasContainerFactory;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
|
||||
class AdditionalEducationCategory extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
use HasContainerFactory;
|
||||
|
||||
protected static string $factory = \Database\Factories\AdditionalEducationCategoryFactory::class;
|
||||
|
||||
protected $guarded = false;
|
||||
|
||||
|
||||
Regular → Executable
+4
-2
@@ -3,12 +3,14 @@
|
||||
namespace App\Containers\AdditionalEducation\Models;
|
||||
|
||||
use App\Ship\Models\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use App\Ship\Traits\HasContainerFactory;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
|
||||
class DirectionAdditionalEducation extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
use HasContainerFactory;
|
||||
|
||||
protected static string $factory = \Database\Factories\DirectionAdditionalEducationFactory::class;
|
||||
|
||||
protected $guarded = false;
|
||||
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
+46
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AdditionalEducation\Tasks;
|
||||
|
||||
use App\Containers\AdditionalEducation\Data\Resources\AdditionalEducationCategoryResource;
|
||||
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
|
||||
use App\Ship\Enums\Education\FormEducation;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class BuildAdditionalEducationFiltersTask
|
||||
{
|
||||
public function run(Request $request): array
|
||||
{
|
||||
$categoriesContent = [];
|
||||
if ($request->category) {
|
||||
foreach ((array)$request->category as $item) {
|
||||
$categoriesContent[$item] = (new GetFilteredAdditionalEducationCategoriesTask())->run(new Request(['category' => $item]))->first();
|
||||
}
|
||||
}
|
||||
|
||||
$forms_education = array_reduce(
|
||||
FormEducation::cases(),
|
||||
fn ($acc, $case) => $acc + [$case->name => $case->getLabel()],
|
||||
[]
|
||||
);
|
||||
|
||||
return [
|
||||
'direction_filter' => [
|
||||
'type' => 'direction',
|
||||
'value' => $request->input('direction'),
|
||||
'param' => 'direction'
|
||||
],
|
||||
'form_education_filter' => [
|
||||
'type' => 'form',
|
||||
'value' => $request->input('form'),
|
||||
'param' => 'form'
|
||||
],
|
||||
'category_filter' => [
|
||||
'type' => 'category',
|
||||
'value' => $request->input('category'),
|
||||
'param' => 'category',
|
||||
'content' => $categoriesContent,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AdditionalEducation\Tasks;
|
||||
|
||||
use App\Ship\Enums\Education\FormEducation;
|
||||
|
||||
class BuildFormsEducationArrayTask
|
||||
{
|
||||
public function run(): array
|
||||
{
|
||||
return array_reduce(
|
||||
FormEducation::cases(),
|
||||
fn ($acc, $case) => $acc + [$case->name => $case->getLabel()],
|
||||
[]
|
||||
);
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AdditionalEducation\Tasks;
|
||||
|
||||
use App\Containers\AdditionalEducation\Models\AdditionalEducation;
|
||||
use App\Ship\Enums\CacheKeys;
|
||||
use App\Ship\Tasks\Task;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class FindAdditionalEducationBySlugTask
|
||||
{
|
||||
public function run(string $slug)
|
||||
{
|
||||
return Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAM_PREFIX->value . $slug,
|
||||
now()->addDay(),
|
||||
fn() => AdditionalEducation::with('category.direction')->where('slug', $slug)->firstOrFail()
|
||||
);
|
||||
}
|
||||
}
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AdditionalEducation\Tasks;
|
||||
|
||||
use App\Containers\AdditionalEducation\Data\Resources\AdditionalEducationCategoryPreviewResource;
|
||||
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
|
||||
use App\Ship\Enums\CacheKeys;
|
||||
use App\Ship\Tasks\Task;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class GetAllAdditionalEducationCategoriesPreviewTask
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
return Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAMS_PREFIX->value . 'categories',
|
||||
now()->addWeek(),
|
||||
function () {
|
||||
return AdditionalEducationCategoryPreviewResource::collection(
|
||||
AdditionalEducationCategory::query()
|
||||
->where('is_active', true)
|
||||
->has('additionalEducations')
|
||||
->get()
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AdditionalEducation\Tasks;
|
||||
|
||||
use App\Containers\AdditionalEducation\Data\Resources\DirectionAdditionalEducationResource;
|
||||
use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation;
|
||||
use App\Ship\Enums\CacheKeys;
|
||||
use App\Ship\Tasks\Task;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class GetDirectionAdditionalEducationsTask
|
||||
{
|
||||
public function run(Request $request)
|
||||
{
|
||||
$cacheKey = md5(serialize($request->all()));
|
||||
|
||||
return Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAMS_PREFIX->value . 'directions_' . $cacheKey,
|
||||
now()->addDay(),
|
||||
function () {
|
||||
return DirectionAdditionalEducationResource::collection(
|
||||
DirectionAdditionalEducation::query()
|
||||
->where('is_active', true)
|
||||
->whereHas('additionalEducationCategories', fn ($q) => $q->whereHas('additionalEducations'))
|
||||
->get()
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\AdditionalEducation\Tasks;
|
||||
|
||||
use App\Containers\AdditionalEducation\Data\Resources\AdditionalEducationCategoryResource;
|
||||
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
|
||||
use App\Ship\Enums\CacheKeys;
|
||||
use App\Ship\Enums\Education\FormEducation;
|
||||
use App\Ship\Tasks\Task;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class GetFilteredAdditionalEducationCategoriesTask
|
||||
{
|
||||
public function run(Request $request)
|
||||
{
|
||||
$cacheKey = md5(serialize($request->all()));
|
||||
|
||||
return Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAMS_PREFIX->value . $cacheKey,
|
||||
now()->addDay(),
|
||||
function () use ($request) {
|
||||
$query = AdditionalEducationCategory::query()
|
||||
->has('additionalEducations')
|
||||
->withActivePrograms()
|
||||
->where('is_active', true);
|
||||
|
||||
if ($request->has('form')) {
|
||||
$formValue = FormEducation::fromName($request->form)->value;
|
||||
$query->whereHas('additionalEducations', fn ($q) => $q->where('form_education', $formValue))
|
||||
->with(['additionalEducations' => fn ($q) => $q->where('form_education', $formValue)]);
|
||||
}
|
||||
|
||||
if ($request->has('category')) {
|
||||
$slugs = is_array($request->category) ? $request->category : [$request->category];
|
||||
$query->whereIn('slug', $slugs);
|
||||
}
|
||||
|
||||
if ($request->has('direction')) {
|
||||
$query->whereHas('direction', fn($q) => $q->where('slug', $request->direction));
|
||||
}
|
||||
|
||||
return AdditionalEducationCategoryResource::collection($query->get());
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
Regular → Executable
+13
-142
@@ -2,160 +2,31 @@
|
||||
|
||||
namespace App\Containers\AdditionalEducation\UI\WEB\Controllers;
|
||||
|
||||
use App\Containers\AdditionalEducation\Data\Resources\AdditionalEducationCategoryPreviewResource;
|
||||
use App\Containers\AdditionalEducation\Data\Resources\AdditionalEducationCategoryResource;
|
||||
use App\Containers\AdditionalEducation\Data\Resources\AdditionalEducationResource;
|
||||
use App\Containers\AdditionalEducation\Data\Resources\DirectionAdditionalEducationResource;
|
||||
use App\Containers\AdditionalEducation\Models\AdditionalEducation;
|
||||
use App\Containers\AdditionalEducation\Models\AdditionalEducationCategory;
|
||||
use App\Containers\AdditionalEducation\Models\DirectionAdditionalEducation;
|
||||
use App\Ship\Contracts\SeoServiceInterface;
|
||||
use App\Containers\AdditionalEducation\Actions\GetAllAdditionalEducationsAction;
|
||||
use App\Containers\AdditionalEducation\Actions\GetAdditionalEducationBySlugAction;
|
||||
use App\Ship\Controllers\Controller;
|
||||
use App\Ship\Enums\CacheKeys;
|
||||
use App\Ship\Enums\Education\FormEducation;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Inertia\Inertia;
|
||||
|
||||
class ClientAdditionalEducationController extends Controller
|
||||
{
|
||||
public function __construct(readonly SeoServiceInterface $seoPageProvider){}
|
||||
public function __construct(
|
||||
readonly GetAllAdditionalEducationsAction $getAllAdditionalEducationsAction,
|
||||
readonly GetAdditionalEducationBySlugAction $getAdditionalEducationBySlugAction
|
||||
){}
|
||||
|
||||
|
||||
public function index(Request $request): \Inertia\Response
|
||||
{
|
||||
$cacheKey = md5(serialize($request->all()));
|
||||
$data = $this->getAllAdditionalEducationsAction->run($request);
|
||||
|
||||
// Основные данные (кешируются)
|
||||
$directionAdditionalEducations = Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAMS_PREFIX->value . 'directions_' . $cacheKey,
|
||||
now()->addDay(),
|
||||
function () {
|
||||
return DirectionAdditionalEducationResource::collection(
|
||||
DirectionAdditionalEducation::query()
|
||||
->where('is_active', true)
|
||||
->whereHas('additionalEducationCategories', fn ($q) => $q->whereHas('additionalEducations'))
|
||||
->get()
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
$additionalEducations = Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAMS_PREFIX->value . $cacheKey,
|
||||
now()->addDay(),
|
||||
function () use ($request) {
|
||||
$query = AdditionalEducationCategory::query()
|
||||
->has('additionalEducations')
|
||||
->withActivePrograms()
|
||||
->where('is_active', true);
|
||||
|
||||
if ($request->has('form')) {
|
||||
$formValue = FormEducation::fromName($request->form)->value;
|
||||
$query->whereHas('additionalEducations', fn ($q) => $q->where('form_education', $formValue))
|
||||
->with(['additionalEducations' => fn ($q) => $q->where('form_education', $formValue)]);
|
||||
}
|
||||
|
||||
if ($request->has('category')) {
|
||||
$slugs = is_array($request->category) ? $request->category : [$request->category];
|
||||
$query->whereIn('slug', $slugs);
|
||||
}
|
||||
|
||||
if ($request->has('direction')) {
|
||||
$query->whereHas('direction', fn($q) => $q->where('slug', $request->direction));
|
||||
}
|
||||
|
||||
return AdditionalEducationCategoryResource::collection($query->get());
|
||||
}
|
||||
);
|
||||
|
||||
$categories = Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAMS_PREFIX->value . 'categories',
|
||||
now()->addWeek(),
|
||||
function () {
|
||||
return AdditionalEducationCategoryPreviewResource::collection(
|
||||
AdditionalEducationCategory::query()
|
||||
->where('is_active', true)
|
||||
->has('additionalEducations')
|
||||
->get()
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
// Динамические данные (не кешируются)
|
||||
$categoriesContent = [];
|
||||
if ($request->category) {
|
||||
foreach ((array)$request->category as $item) {
|
||||
$categoriesContent[$item] = new AdditionalEducationCategoryResource(
|
||||
AdditionalEducationCategory::where('slug', $item)->first()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$forms_education = array_reduce(
|
||||
FormEducation::cases(),
|
||||
fn ($acc, $case) => $acc + [$case->name => $case->getLabel()],
|
||||
[]
|
||||
);
|
||||
|
||||
$filters = [
|
||||
'direction_filter' => [
|
||||
'type' => 'direction',
|
||||
'value' => $request->input('direction'),
|
||||
'param' => 'direction'
|
||||
],
|
||||
'form_education_filter' => [
|
||||
'type' => 'form',
|
||||
'value' => $request->input('form'),
|
||||
'param' => 'form'
|
||||
],
|
||||
'category_filter' => [
|
||||
'type' => 'category',
|
||||
'value' => $request->input('category'),
|
||||
'param' => 'category',
|
||||
'content' => $categoriesContent,
|
||||
],
|
||||
];
|
||||
|
||||
$seo = $this->seoPageProvider->getSeoForCurrentPage();
|
||||
|
||||
return Inertia::render('Client/Additional-educations/Index', compact(
|
||||
'directionAdditionalEducations',
|
||||
'additionalEducations',
|
||||
'filters',
|
||||
'forms_education',
|
||||
'categories',
|
||||
'seo'
|
||||
));
|
||||
return Inertia::render('Client/Additional-educations/Index', $data);
|
||||
}
|
||||
|
||||
public function show(string $slug): \Inertia\Response
|
||||
public function show(string $slug, Request $request): \Inertia\Response
|
||||
{
|
||||
$additionalEducationModel = Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAM_PREFIX->value . $slug,
|
||||
now()->addDay(),
|
||||
fn() => AdditionalEducation::with('category.direction')->where('slug', $slug)->firstOrFail()
|
||||
);
|
||||
$data = $this->getAdditionalEducationBySlugAction->run($slug, $request);
|
||||
|
||||
$seo = Cache::remember(
|
||||
CacheKeys::ADDITIONAL_EDUCATIONAL_PROGRAM_PREFIX->value . 'seo_' . $slug,
|
||||
now()->addDay(),
|
||||
fn() => $this->seoPageProvider->getSeoForModel($additionalEducationModel)
|
||||
);
|
||||
|
||||
$settingsPage = request()->attributes->get('settings_page') ?? [];
|
||||
|
||||
if (array_key_exists('custom_form', $settingsPage)) {
|
||||
$form = $settingsPage['custom_form'];
|
||||
} else {
|
||||
$form = null;
|
||||
}
|
||||
|
||||
$additionalEducation = new AdditionalEducationResource($additionalEducationModel);
|
||||
|
||||
|
||||
return Inertia::render('Client/Additional-educations/Show', compact(
|
||||
'additionalEducation',
|
||||
'seo',
|
||||
'form',
|
||||
));
|
||||
}}
|
||||
return Inertia::render('Client/Additional-educations/Show', $data);
|
||||
}
|
||||
}
|
||||
|
||||
Regular → Executable
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Analytics\Commands;
|
||||
|
||||
use App\Containers\Analytics\Models\AnalyticsDailyStat;
|
||||
use App\Containers\Analytics\Models\AnalyticsHit;
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AggregateAnalyticsCommand extends \Illuminate\Console\Command
|
||||
{
|
||||
protected $signature = 'analytics:aggregate {--days=1 : Days back to aggregate}';
|
||||
|
||||
protected $description = 'Aggregate analytics hits into daily stats';
|
||||
|
||||
public function handle(): int
|
||||
{
|
||||
$days = (int) $this->option('days');
|
||||
$date = now()->subDays($days)->toDateString();
|
||||
|
||||
$stats = AnalyticsHit::selectRaw('
|
||||
DATE(created_at) as hit_date,
|
||||
url,
|
||||
COUNT(*) as views_count,
|
||||
COUNT(DISTINCT session_id) as unique_visitors
|
||||
')
|
||||
->whereDate('created_at', $date)
|
||||
->groupBy(DB::raw('DATE(created_at)'), 'url')
|
||||
->get();
|
||||
|
||||
$inserted = 0;
|
||||
|
||||
foreach ($stats as $row) {
|
||||
AnalyticsDailyStat::updateOrCreate(
|
||||
['date' => $row->hit_date, 'url' => $row->url],
|
||||
[
|
||||
'views_count' => $row->views_count,
|
||||
'unique_visitors' => $row->unique_visitors,
|
||||
]
|
||||
);
|
||||
$inserted++;
|
||||
}
|
||||
|
||||
$this->info("Aggregated {$inserted} daily stat rows for {$date}");
|
||||
|
||||
return static::SUCCESS;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Analytics\Jobs;
|
||||
|
||||
use App\Containers\Analytics\Models\AnalyticsHit;
|
||||
use App\Containers\Analytics\Models\AnalyticsSession;
|
||||
use App\Containers\Analytics\Services\DeviceDetectorService;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class RecordVisitJob implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
public int $tries = 3;
|
||||
|
||||
public int $timeout = 15;
|
||||
|
||||
public function __construct(
|
||||
public array $data,
|
||||
) {}
|
||||
|
||||
public function handle(
|
||||
DeviceDetectorService $detector,
|
||||
): void {
|
||||
$userAgent = $this->data['user_agent'] ?? '';
|
||||
|
||||
if ($detector->isBot($userAgent)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$device = $detector->parse($userAgent);
|
||||
|
||||
$utmParams = array_filter([
|
||||
'utm_source' => $this->data['utm_source'] ?? null,
|
||||
'utm_medium' => $this->data['utm_medium'] ?? null,
|
||||
'utm_campaign' => $this->data['utm_campaign'] ?? null,
|
||||
], fn($v) => $v !== null);
|
||||
|
||||
$session = (new AnalyticsSession())->firstOrCreateSession(
|
||||
visitorId: $this->data['visitor_id'],
|
||||
ip: $this->data['ip'] ?? '0.0.0.0',
|
||||
userId: $this->data['user_id'] ?? null,
|
||||
entryPage: $this->data['url'],
|
||||
utmParams: $utmParams,
|
||||
);
|
||||
|
||||
if (empty($session->browser)) {
|
||||
$session->update([
|
||||
'browser' => $device['browser'],
|
||||
'os' => $device['os'],
|
||||
'device_type' => $device['type'],
|
||||
]);
|
||||
}
|
||||
|
||||
AnalyticsHit::create([
|
||||
'session_id' => $session->id,
|
||||
'user_id' => $this->data['user_id'] ?? null,
|
||||
'url' => $this->data['url'],
|
||||
'referrer' => $this->data['referrer'] ?? null,
|
||||
'title' => $this->data['title'] ?? null,
|
||||
'created_at' => now(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Analytics\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class AnalyticsDailyStat extends Model
|
||||
{
|
||||
protected $table = 'analytics_daily_stats';
|
||||
|
||||
protected $fillable = [
|
||||
'date',
|
||||
'url',
|
||||
'views_count',
|
||||
'unique_visitors',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'date' => 'date',
|
||||
'views_count' => 'integer',
|
||||
'unique_visitors' => 'integer',
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Containers\Analytics\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class AnalyticsHit extends Model
|
||||
{
|
||||
protected $table = 'analytics_hits';
|
||||
|
||||
public $timestamps = false;
|
||||
|
||||
protected $fillable = [
|
||||
'session_id',
|
||||
'user_id',
|
||||
'url',
|
||||
'referrer',
|
||||
'title',
|
||||
'created_at',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'created_at' => 'datetime',
|
||||
];
|
||||
|
||||
public function session(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(AnalyticsSession::class, 'session_id');
|
||||
}
|
||||
|
||||
public function user(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(\App\Containers\User\Models\User::class, 'user_id');
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user