This commit is contained in:
筱锋xiao_lfeng 2023-02-03 10:31:07 +08:00
commit fa8b6f944c
2054 changed files with 31296 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
./config.inc.php
.htaccess
.user.ini
.nginx.htaccess
/.idea/

0
.htaccess Normal file
View File

8
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

12
.idea/NW_love.iml generated Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.idea/dataSources" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="font_3866622_565tqxxkm4" level="application" />
<orderEntry type="library" name="font_3866622_ur298ayiu2" level="application" />
</component>
</module>

33
.idea/dataSources.local.xml generated Normal file
View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="dataSourceStorageLocal" created-in="PS-223.8617.59">
<data-source name="NW_Love数据库" uuid="f83dd738-9f5a-4eab-933d-52ccf459b20c">
<database-info product="MySQL" version="5.7.26" jdbc-version="4.2" driver-name="MySQL Connector/J" driver-version="mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0)" dbms="MYSQL" exact-version="5.7.26" exact-driver-version="8.0">
<extra-name-characters>#@</extra-name-characters>
<identifier-quote-string>`</identifier-quote-string>
</database-info>
<case-sensitivity plain-identifiers="lower" quoted-identifiers="lower" />
<secret-storage>master_key</secret-storage>
<user-name>nw_love</user-name>
<schema-mapping>
<introspection-scope>
<node kind="schema" qname="@" />
</introspection-scope>
</schema-mapping>
</data-source>
<data-source name="云端数据库" uuid="9864e879-99a5-4c5a-9bed-043684f4b73f">
<database-info product="MySQL" version="5.7.34-log" jdbc-version="4.2" driver-name="MySQL Connector/J" driver-version="mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0)" dbms="MYSQL" exact-version="5.7.34" exact-driver-version="8.0">
<extra-name-characters>#@</extra-name-characters>
<identifier-quote-string>`</identifier-quote-string>
</database-info>
<case-sensitivity plain-identifiers="exact" quoted-identifiers="exact" />
<secret-storage>master_key</secret-storage>
<user-name>nw_love</user-name>
<schema-mapping>
<introspection-scope>
<node kind="schema" negative="1" />
</introspection-scope>
</schema-mapping>
</data-source>
</component>
</project>

20
.idea/dataSources.xml generated Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="NW_Love数据库" uuid="f83dd738-9f5a-4eab-933d-52ccf459b20c">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<remarks>关系数据库</remarks>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://localhost:3306/nw_love</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="云端数据库" uuid="9864e879-99a5-4c5a-9bed-043684f4b73f">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://sz.aliyun.x-lf.cn:3306</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,2 @@
#n:information_schema
!<md> [null, 0, null, null, -2147483648, -2147483648]

View File

@ -0,0 +1,782 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataSource name="NW_Love数据库">
<database-model serializer="dbm" dbms="MYSQL" family-id="MYSQL" format-version="4.45">
<root id="1">
<DefaultCasing>lower/lower</DefaultCasing>
<DefaultEngine>MyISAM</DefaultEngine>
<DefaultTmpEngine>InnoDB</DefaultTmpEngine>
<Grants>nw\\_love|schema||nw_love|localhost|ALTER|G
nw\\_love|schema||nw_love|localhost|ALTER ROUTINE|G
nw\\_love|schema||nw_love|localhost|CREATE|G
nw\\_love|schema||nw_love|localhost|CREATE ROUTINE|G
nw\\_love|schema||nw_love|localhost|CREATE TEMPORARY TABLES|G
nw\\_love|schema||nw_love|localhost|CREATE VIEW|G
nw\\_love|schema||nw_love|localhost|DELETE|G
nw\\_love|schema||nw_love|localhost|DROP|G
nw\\_love|schema||nw_love|localhost|EVENT|G
nw\\_love|schema||nw_love|localhost|EXECUTE|G
nw\\_love|schema||nw_love|localhost|INDEX|G
nw\\_love|schema||nw_love|localhost|INSERT|G
nw\\_love|schema||nw_love|localhost|LOCK TABLES|G
nw\\_love|schema||nw_love|localhost|REFERENCES|G
nw\\_love|schema||nw_love|localhost|SELECT|G
nw\\_love|schema||nw_love|localhost|SHOW VIEW|G
nw\\_love|schema||nw_love|localhost|TRIGGER|G
nw\\_love|schema||nw_love|localhost|UPDATE|G
nw\\_love|schema||nw_love|localhost|grant option|G</Grants>
<ServerVersion>5.7.26</ServerVersion>
</root>
<collation id="2" parent="1" name="armscii8_bin">
<Charset>armscii8</Charset>
</collation>
<collation id="3" parent="1" name="armscii8_general_ci">
<Charset>armscii8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="4" parent="1" name="ascii_bin">
<Charset>ascii</Charset>
</collation>
<collation id="5" parent="1" name="ascii_general_ci">
<Charset>ascii</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="6" parent="1" name="big5_bin">
<Charset>big5</Charset>
</collation>
<collation id="7" parent="1" name="big5_chinese_ci">
<Charset>big5</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="8" parent="1" name="binary">
<Charset>binary</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="9" parent="1" name="cp1250_bin">
<Charset>cp1250</Charset>
</collation>
<collation id="10" parent="1" name="cp1250_croatian_ci">
<Charset>cp1250</Charset>
</collation>
<collation id="11" parent="1" name="cp1250_czech_cs">
<Charset>cp1250</Charset>
</collation>
<collation id="12" parent="1" name="cp1250_general_ci">
<Charset>cp1250</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="13" parent="1" name="cp1250_polish_ci">
<Charset>cp1250</Charset>
</collation>
<collation id="14" parent="1" name="cp1251_bin">
<Charset>cp1251</Charset>
</collation>
<collation id="15" parent="1" name="cp1251_bulgarian_ci">
<Charset>cp1251</Charset>
</collation>
<collation id="16" parent="1" name="cp1251_general_ci">
<Charset>cp1251</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="17" parent="1" name="cp1251_general_cs">
<Charset>cp1251</Charset>
</collation>
<collation id="18" parent="1" name="cp1251_ukrainian_ci">
<Charset>cp1251</Charset>
</collation>
<collation id="19" parent="1" name="cp1256_bin">
<Charset>cp1256</Charset>
</collation>
<collation id="20" parent="1" name="cp1256_general_ci">
<Charset>cp1256</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="21" parent="1" name="cp1257_bin">
<Charset>cp1257</Charset>
</collation>
<collation id="22" parent="1" name="cp1257_general_ci">
<Charset>cp1257</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="23" parent="1" name="cp1257_lithuanian_ci">
<Charset>cp1257</Charset>
</collation>
<collation id="24" parent="1" name="cp850_bin">
<Charset>cp850</Charset>
</collation>
<collation id="25" parent="1" name="cp850_general_ci">
<Charset>cp850</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="26" parent="1" name="cp852_bin">
<Charset>cp852</Charset>
</collation>
<collation id="27" parent="1" name="cp852_general_ci">
<Charset>cp852</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="28" parent="1" name="cp866_bin">
<Charset>cp866</Charset>
</collation>
<collation id="29" parent="1" name="cp866_general_ci">
<Charset>cp866</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="30" parent="1" name="cp932_bin">
<Charset>cp932</Charset>
</collation>
<collation id="31" parent="1" name="cp932_japanese_ci">
<Charset>cp932</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="32" parent="1" name="dec8_bin">
<Charset>dec8</Charset>
</collation>
<collation id="33" parent="1" name="dec8_swedish_ci">
<Charset>dec8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="34" parent="1" name="eucjpms_bin">
<Charset>eucjpms</Charset>
</collation>
<collation id="35" parent="1" name="eucjpms_japanese_ci">
<Charset>eucjpms</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="36" parent="1" name="euckr_bin">
<Charset>euckr</Charset>
</collation>
<collation id="37" parent="1" name="euckr_korean_ci">
<Charset>euckr</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="38" parent="1" name="gb18030_bin">
<Charset>gb18030</Charset>
</collation>
<collation id="39" parent="1" name="gb18030_chinese_ci">
<Charset>gb18030</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="40" parent="1" name="gb18030_unicode_520_ci">
<Charset>gb18030</Charset>
</collation>
<collation id="41" parent="1" name="gb2312_bin">
<Charset>gb2312</Charset>
</collation>
<collation id="42" parent="1" name="gb2312_chinese_ci">
<Charset>gb2312</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="43" parent="1" name="gbk_bin">
<Charset>gbk</Charset>
</collation>
<collation id="44" parent="1" name="gbk_chinese_ci">
<Charset>gbk</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="45" parent="1" name="geostd8_bin">
<Charset>geostd8</Charset>
</collation>
<collation id="46" parent="1" name="geostd8_general_ci">
<Charset>geostd8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="47" parent="1" name="greek_bin">
<Charset>greek</Charset>
</collation>
<collation id="48" parent="1" name="greek_general_ci">
<Charset>greek</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="49" parent="1" name="hebrew_bin">
<Charset>hebrew</Charset>
</collation>
<collation id="50" parent="1" name="hebrew_general_ci">
<Charset>hebrew</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="51" parent="1" name="hp8_bin">
<Charset>hp8</Charset>
</collation>
<collation id="52" parent="1" name="hp8_english_ci">
<Charset>hp8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="53" parent="1" name="keybcs2_bin">
<Charset>keybcs2</Charset>
</collation>
<collation id="54" parent="1" name="keybcs2_general_ci">
<Charset>keybcs2</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="55" parent="1" name="koi8r_bin">
<Charset>koi8r</Charset>
</collation>
<collation id="56" parent="1" name="koi8r_general_ci">
<Charset>koi8r</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="57" parent="1" name="koi8u_bin">
<Charset>koi8u</Charset>
</collation>
<collation id="58" parent="1" name="koi8u_general_ci">
<Charset>koi8u</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="59" parent="1" name="latin1_bin">
<Charset>latin1</Charset>
</collation>
<collation id="60" parent="1" name="latin1_danish_ci">
<Charset>latin1</Charset>
</collation>
<collation id="61" parent="1" name="latin1_general_ci">
<Charset>latin1</Charset>
</collation>
<collation id="62" parent="1" name="latin1_general_cs">
<Charset>latin1</Charset>
</collation>
<collation id="63" parent="1" name="latin1_german1_ci">
<Charset>latin1</Charset>
</collation>
<collation id="64" parent="1" name="latin1_german2_ci">
<Charset>latin1</Charset>
</collation>
<collation id="65" parent="1" name="latin1_spanish_ci">
<Charset>latin1</Charset>
</collation>
<collation id="66" parent="1" name="latin1_swedish_ci">
<Charset>latin1</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="67" parent="1" name="latin2_bin">
<Charset>latin2</Charset>
</collation>
<collation id="68" parent="1" name="latin2_croatian_ci">
<Charset>latin2</Charset>
</collation>
<collation id="69" parent="1" name="latin2_czech_cs">
<Charset>latin2</Charset>
</collation>
<collation id="70" parent="1" name="latin2_general_ci">
<Charset>latin2</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="71" parent="1" name="latin2_hungarian_ci">
<Charset>latin2</Charset>
</collation>
<collation id="72" parent="1" name="latin5_bin">
<Charset>latin5</Charset>
</collation>
<collation id="73" parent="1" name="latin5_turkish_ci">
<Charset>latin5</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="74" parent="1" name="latin7_bin">
<Charset>latin7</Charset>
</collation>
<collation id="75" parent="1" name="latin7_estonian_cs">
<Charset>latin7</Charset>
</collation>
<collation id="76" parent="1" name="latin7_general_ci">
<Charset>latin7</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="77" parent="1" name="latin7_general_cs">
<Charset>latin7</Charset>
</collation>
<collation id="78" parent="1" name="macce_bin">
<Charset>macce</Charset>
</collation>
<collation id="79" parent="1" name="macce_general_ci">
<Charset>macce</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="80" parent="1" name="macroman_bin">
<Charset>macroman</Charset>
</collation>
<collation id="81" parent="1" name="macroman_general_ci">
<Charset>macroman</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="82" parent="1" name="sjis_bin">
<Charset>sjis</Charset>
</collation>
<collation id="83" parent="1" name="sjis_japanese_ci">
<Charset>sjis</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="84" parent="1" name="swe7_bin">
<Charset>swe7</Charset>
</collation>
<collation id="85" parent="1" name="swe7_swedish_ci">
<Charset>swe7</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="86" parent="1" name="tis620_bin">
<Charset>tis620</Charset>
</collation>
<collation id="87" parent="1" name="tis620_thai_ci">
<Charset>tis620</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="88" parent="1" name="ucs2_bin">
<Charset>ucs2</Charset>
</collation>
<collation id="89" parent="1" name="ucs2_croatian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="90" parent="1" name="ucs2_czech_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="91" parent="1" name="ucs2_danish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="92" parent="1" name="ucs2_esperanto_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="93" parent="1" name="ucs2_estonian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="94" parent="1" name="ucs2_general_ci">
<Charset>ucs2</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="95" parent="1" name="ucs2_general_mysql500_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="96" parent="1" name="ucs2_german2_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="97" parent="1" name="ucs2_hungarian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="98" parent="1" name="ucs2_icelandic_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="99" parent="1" name="ucs2_latvian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="100" parent="1" name="ucs2_lithuanian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="101" parent="1" name="ucs2_persian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="102" parent="1" name="ucs2_polish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="103" parent="1" name="ucs2_roman_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="104" parent="1" name="ucs2_romanian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="105" parent="1" name="ucs2_sinhala_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="106" parent="1" name="ucs2_slovak_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="107" parent="1" name="ucs2_slovenian_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="108" parent="1" name="ucs2_spanish2_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="109" parent="1" name="ucs2_spanish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="110" parent="1" name="ucs2_swedish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="111" parent="1" name="ucs2_turkish_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="112" parent="1" name="ucs2_unicode_520_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="113" parent="1" name="ucs2_unicode_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="114" parent="1" name="ucs2_vietnamese_ci">
<Charset>ucs2</Charset>
</collation>
<collation id="115" parent="1" name="ujis_bin">
<Charset>ujis</Charset>
</collation>
<collation id="116" parent="1" name="ujis_japanese_ci">
<Charset>ujis</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="117" parent="1" name="utf16_bin">
<Charset>utf16</Charset>
</collation>
<collation id="118" parent="1" name="utf16_croatian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="119" parent="1" name="utf16_czech_ci">
<Charset>utf16</Charset>
</collation>
<collation id="120" parent="1" name="utf16_danish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="121" parent="1" name="utf16_esperanto_ci">
<Charset>utf16</Charset>
</collation>
<collation id="122" parent="1" name="utf16_estonian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="123" parent="1" name="utf16_general_ci">
<Charset>utf16</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="124" parent="1" name="utf16_german2_ci">
<Charset>utf16</Charset>
</collation>
<collation id="125" parent="1" name="utf16_hungarian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="126" parent="1" name="utf16_icelandic_ci">
<Charset>utf16</Charset>
</collation>
<collation id="127" parent="1" name="utf16_latvian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="128" parent="1" name="utf16_lithuanian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="129" parent="1" name="utf16_persian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="130" parent="1" name="utf16_polish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="131" parent="1" name="utf16_roman_ci">
<Charset>utf16</Charset>
</collation>
<collation id="132" parent="1" name="utf16_romanian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="133" parent="1" name="utf16_sinhala_ci">
<Charset>utf16</Charset>
</collation>
<collation id="134" parent="1" name="utf16_slovak_ci">
<Charset>utf16</Charset>
</collation>
<collation id="135" parent="1" name="utf16_slovenian_ci">
<Charset>utf16</Charset>
</collation>
<collation id="136" parent="1" name="utf16_spanish2_ci">
<Charset>utf16</Charset>
</collation>
<collation id="137" parent="1" name="utf16_spanish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="138" parent="1" name="utf16_swedish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="139" parent="1" name="utf16_turkish_ci">
<Charset>utf16</Charset>
</collation>
<collation id="140" parent="1" name="utf16_unicode_520_ci">
<Charset>utf16</Charset>
</collation>
<collation id="141" parent="1" name="utf16_unicode_ci">
<Charset>utf16</Charset>
</collation>
<collation id="142" parent="1" name="utf16_vietnamese_ci">
<Charset>utf16</Charset>
</collation>
<collation id="143" parent="1" name="utf16le_bin">
<Charset>utf16le</Charset>
</collation>
<collation id="144" parent="1" name="utf16le_general_ci">
<Charset>utf16le</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="145" parent="1" name="utf32_bin">
<Charset>utf32</Charset>
</collation>
<collation id="146" parent="1" name="utf32_croatian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="147" parent="1" name="utf32_czech_ci">
<Charset>utf32</Charset>
</collation>
<collation id="148" parent="1" name="utf32_danish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="149" parent="1" name="utf32_esperanto_ci">
<Charset>utf32</Charset>
</collation>
<collation id="150" parent="1" name="utf32_estonian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="151" parent="1" name="utf32_general_ci">
<Charset>utf32</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="152" parent="1" name="utf32_german2_ci">
<Charset>utf32</Charset>
</collation>
<collation id="153" parent="1" name="utf32_hungarian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="154" parent="1" name="utf32_icelandic_ci">
<Charset>utf32</Charset>
</collation>
<collation id="155" parent="1" name="utf32_latvian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="156" parent="1" name="utf32_lithuanian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="157" parent="1" name="utf32_persian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="158" parent="1" name="utf32_polish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="159" parent="1" name="utf32_roman_ci">
<Charset>utf32</Charset>
</collation>
<collation id="160" parent="1" name="utf32_romanian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="161" parent="1" name="utf32_sinhala_ci">
<Charset>utf32</Charset>
</collation>
<collation id="162" parent="1" name="utf32_slovak_ci">
<Charset>utf32</Charset>
</collation>
<collation id="163" parent="1" name="utf32_slovenian_ci">
<Charset>utf32</Charset>
</collation>
<collation id="164" parent="1" name="utf32_spanish2_ci">
<Charset>utf32</Charset>
</collation>
<collation id="165" parent="1" name="utf32_spanish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="166" parent="1" name="utf32_swedish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="167" parent="1" name="utf32_turkish_ci">
<Charset>utf32</Charset>
</collation>
<collation id="168" parent="1" name="utf32_unicode_520_ci">
<Charset>utf32</Charset>
</collation>
<collation id="169" parent="1" name="utf32_unicode_ci">
<Charset>utf32</Charset>
</collation>
<collation id="170" parent="1" name="utf32_vietnamese_ci">
<Charset>utf32</Charset>
</collation>
<collation id="171" parent="1" name="utf8_bin">
<Charset>utf8</Charset>
</collation>
<collation id="172" parent="1" name="utf8_croatian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="173" parent="1" name="utf8_czech_ci">
<Charset>utf8</Charset>
</collation>
<collation id="174" parent="1" name="utf8_danish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="175" parent="1" name="utf8_esperanto_ci">
<Charset>utf8</Charset>
</collation>
<collation id="176" parent="1" name="utf8_estonian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="177" parent="1" name="utf8_general_ci">
<Charset>utf8</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="178" parent="1" name="utf8_general_mysql500_ci">
<Charset>utf8</Charset>
</collation>
<collation id="179" parent="1" name="utf8_german2_ci">
<Charset>utf8</Charset>
</collation>
<collation id="180" parent="1" name="utf8_hungarian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="181" parent="1" name="utf8_icelandic_ci">
<Charset>utf8</Charset>
</collation>
<collation id="182" parent="1" name="utf8_latvian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="183" parent="1" name="utf8_lithuanian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="184" parent="1" name="utf8_persian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="185" parent="1" name="utf8_polish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="186" parent="1" name="utf8_roman_ci">
<Charset>utf8</Charset>
</collation>
<collation id="187" parent="1" name="utf8_romanian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="188" parent="1" name="utf8_sinhala_ci">
<Charset>utf8</Charset>
</collation>
<collation id="189" parent="1" name="utf8_slovak_ci">
<Charset>utf8</Charset>
</collation>
<collation id="190" parent="1" name="utf8_slovenian_ci">
<Charset>utf8</Charset>
</collation>
<collation id="191" parent="1" name="utf8_spanish2_ci">
<Charset>utf8</Charset>
</collation>
<collation id="192" parent="1" name="utf8_spanish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="193" parent="1" name="utf8_swedish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="194" parent="1" name="utf8_turkish_ci">
<Charset>utf8</Charset>
</collation>
<collation id="195" parent="1" name="utf8_unicode_520_ci">
<Charset>utf8</Charset>
</collation>
<collation id="196" parent="1" name="utf8_unicode_ci">
<Charset>utf8</Charset>
</collation>
<collation id="197" parent="1" name="utf8_vietnamese_ci">
<Charset>utf8</Charset>
</collation>
<collation id="198" parent="1" name="utf8mb4_bin">
<Charset>utf8mb4</Charset>
</collation>
<collation id="199" parent="1" name="utf8mb4_croatian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="200" parent="1" name="utf8mb4_czech_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="201" parent="1" name="utf8mb4_danish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="202" parent="1" name="utf8mb4_esperanto_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="203" parent="1" name="utf8mb4_estonian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="204" parent="1" name="utf8mb4_general_ci">
<Charset>utf8mb4</Charset>
<DefaultForCharset>1</DefaultForCharset>
</collation>
<collation id="205" parent="1" name="utf8mb4_german2_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="206" parent="1" name="utf8mb4_hungarian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="207" parent="1" name="utf8mb4_icelandic_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="208" parent="1" name="utf8mb4_latvian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="209" parent="1" name="utf8mb4_lithuanian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="210" parent="1" name="utf8mb4_persian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="211" parent="1" name="utf8mb4_polish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="212" parent="1" name="utf8mb4_roman_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="213" parent="1" name="utf8mb4_romanian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="214" parent="1" name="utf8mb4_sinhala_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="215" parent="1" name="utf8mb4_slovak_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="216" parent="1" name="utf8mb4_slovenian_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="217" parent="1" name="utf8mb4_spanish2_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="218" parent="1" name="utf8mb4_spanish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="219" parent="1" name="utf8mb4_swedish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="220" parent="1" name="utf8mb4_turkish_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="221" parent="1" name="utf8mb4_unicode_520_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="222" parent="1" name="utf8mb4_unicode_ci">
<Charset>utf8mb4</Charset>
</collation>
<collation id="223" parent="1" name="utf8mb4_vietnamese_ci">
<Charset>utf8mb4</Charset>
</collation>
<schema id="224" parent="1" name="information_schema">
<CollationName>utf8_general_ci</CollationName>
</schema>
<schema id="225" parent="1" name="nw_love">
<Current>1</Current>
<CollationName>utf8_unicode_ci</CollationName>
</schema>
<user id="226" parent="1" name="nw_love">
<Host>localhost</Host>
</user>
<table id="227" parent="225" name="nw_web_info">
<Engine>MyISAM</Engine>
<CollationName>utf8_unicode_ci</CollationName>
</table>
<column id="228" parent="227" name="id">
<AutoIncrement>20</AutoIncrement>
<DasType>int(11)|0s</DasType>
<NotNull>1</NotNull>
<Position>1</Position>
</column>
<column id="229" parent="227" name="value">
<DasType>varchar(40)|0s</DasType>
<NotNull>1</NotNull>
<Position>2</Position>
</column>
<column id="230" parent="227" name="data">
<DasType>text|0s</DasType>
<Position>3</Position>
</column>
<column id="231" parent="227" name="autoload">
<DasType>varchar(5)|0s</DasType>
<DefaultExpression>&apos;TRUE&apos;</DefaultExpression>
<NotNull>1</NotNull>
<Position>4</Position>
</column>
<index id="232" parent="227" name="PRIMARY">
<ColNames>id</ColNames>
<Type>btree</Type>
<Unique>1</Unique>
</index>
<key id="233" parent="227" name="PRIMARY">
<NameSurrogate>1</NameSurrogate>
<Primary>1</Primary>
<UnderlyingIndexName>PRIMARY</UnderlyingIndexName>
</key>
</database-model>
</dataSource>

View File

@ -0,0 +1,2 @@
#n:information_schema
!<md> [null, 0, null, null, -2147483648, -2147483648]

16
.idea/deployment.xml generated Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PublishConfigData" autoUpload="Always" serverName="Server" remoteFilesAllowedToDisappearOnAutoupload="false" confirmBeforeUploading="false">
<option name="confirmBeforeUploading" value="false" />
<serverData>
<paths name="Server">
<serverdata>
<mappings>
<mapping deploy="/" local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
</serverData>
<option name="myAutoUpload" value="ALWAYS" />
</component>
</project>

View File

@ -0,0 +1,42 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<Languages>
<language minSize="24" name="HTML" />
<language minSize="277" name="PHP" />
</Languages>
</inspection_tool>
<inspection_tool class="HttpUrlsUsage" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredUrls">
<list>
<option value="http://localhost" />
<option value="http://127.0.0.1" />
<option value="http://0.0.0.0" />
<option value="http://www.w3.org/" />
<option value="http://json-schema.org/draft" />
<option value="http://java.sun.com/" />
<option value="http://xmlns.jcp.org/" />
<option value="http://javafx.com/javafx/" />
<option value="http://javafx.com/fxml" />
<option value="http://maven.apache.org/xsd/" />
<option value="http://maven.apache.org/POM/" />
<option value="http://www.springframework.org/schema/" />
<option value="http://www.springframework.org/tags" />
<option value="http://www.springframework.org/security/tags" />
<option value="http://www.thymeleaf.org" />
<option value="http://www.jboss.org/j2ee/schema/" />
<option value="http://www.jboss.com/xml/ns/" />
<option value="http://www.ibm.com/webservices/xsd" />
<option value="http://activemq.apache.org/schema/" />
<option value="http://schema.cloudfoundry.org/spring/" />
<option value="http://schemas.xmlsoap.org/" />
<option value="http://cxf.apache.org/schemas/" />
<option value="http://primefaces.org/ui" />
<option value="http://tiles.apache.org/" />
<option value="http://" />
</list>
</option>
</inspection_tool>
</profile>
</component>

6
.idea/jsLibraryMappings.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptLibraryMappings">
<file url="PROJECT" libraries="{font_3866622_565tqxxkm4, font_3866622_ur298ayiu2}" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/NW_love.iml" filepath="$PROJECT_DIR$/.idea/NW_love.iml" />
</modules>
</component>
</project>

19
.idea/php.xml generated Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MessDetectorOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCSFixerOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCodeSnifferOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="7.4" />
<component name="PhpStanOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PsalmOptionsConfiguration">
<option name="transferred" value="true" />
</component>
</project>

4
.idea/shelf/.xml generated Normal file
View File

@ -0,0 +1,4 @@
<changelist name="变更" date="1675389017138" recycled="false">
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/变更/shelved.patch" />
<option name="DESCRIPTION" value="变更" />
</changelist>

4
.idea/shelf/1.xml generated Normal file
View File

@ -0,0 +1,4 @@
<changelist name="变更1" date="1675389060149" recycled="false">
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/变更1/shelved.patch" />
<option name="DESCRIPTION" value="变更" />
</changelist>

4
.idea/shelf/___.xml generated Normal file
View File

@ -0,0 +1,4 @@
<changelist name="在变基之前未提交的更改_[变更]" date="1675388613705" recycled="true" deleted="true">
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/在变基之前未提交的更改_[变更]/shelved.patch" />
<option name="DESCRIPTION" value="在变基之前未提交的更改 [变更]" />
</changelist>

79
.idea/shelf/变更/shelved.patch generated Normal file
View File

@ -0,0 +1,79 @@
Index: config.inc.php
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/config.inc.php b/config.inc.php
new file mode 100644
--- /dev/null (date 1675388896148)
+++ b/config.inc.php (date 1675388896148)
@@ -0,0 +1,68 @@
+<?php
+/**
+ * @ignore 配置文件
+ * @ignore 默认情况请勿随意修改数据,敏感数据请勿随意复制给别人
+ *
+ * @author 筱锋xiao_lfeng
+ * @license MIT
+ * @copyright 2022-2023 ZCW and YN. All Rights Reserved.
+ * @version 1.0.0 2023-01-16更新
+ */
+
+// 格式化数据
+$config = [];
+
+/******************* 开放管理 *******************/
+// 站点启用
+$config['WEB']['Start'] = TRUE;
+// 站点开启 Debug 模式
+$config['WEB']['DeBUG'] = FALSE;
+// 站点通信密钥
+$config['SESSION'] = "YNily20040227";
+
+// AccessKeyID
+$config['Aliyun']['AccessKeyID'] = 'LTAI4FyjsXWYDqgTSHrMrCha';
+// AccessKeySecret
+$config['Aliyun']['AccessKeySecret'] = 'DYmFXkMu7ZMly7mzd1M7UYbbYd4UH4';
+
+/******************** 数据库 ********************/
+// 数据库地址
+$config['SQL']['host'] = '127.0.0.1';
+// 数据库名字
+$config['SQL']['dbname'] = 'nw_love';
+// 数据库用户名
+$config['SQL']['username'] = 'nw_love';
+// 数据库密码
+$config['SQL']['password'] = 'YNily20040227';
+
+/******************** 数据表 ********************/
+// 网站基本信息数据表
+$config['TABLE']['info'] = 'nw_web_info';
+// 睡觉信息统计数据表
+$config['TABLE']['daily'] = 'nw_daily';
+// 相册列表数据库
+$config['TABLE']['AlbumList'] = 'nw_album_list';
+// 相册内数据表
+$config['TABLE']['Album'] = 'nw_album';
+// 相册别人偷拍
+$config['TABLE']['candid'] = 'nw_other_candid';
+
+/******************* 邮箱管理 *******************/
+// 邮箱地址
+$config['SMTP']['HOST'] = 'smtp.qiye.aliyun.com';
+// 是否允许SMTP认证
+$config['SMTP']['AUTH'] = true;
+// 邮箱用户名(邮箱)
+$config['SMTP']['USER'] = 'noreplay@x-lf.cn';
+// 邮箱密码或授权码
+$config['SMTP']['PASSWORD'] = 'X+7ily20040722';
+// 发件人
+$config['SMTP']['NAME'] = 'noreplay@x-lf.cn';
+// 展示名字
+$config['SMTP']['DISPLAY'] = 'noreplay@x-lf.cn';
+// 收件名字
+$config['SMTP']['REPLAY'] = 'gm@x-lf.cn';
+// 非SSL端口
+$config['SMTP']['NOSSL'] = 25;
+// SSL端口
+$config['SMTP']['SSL'] = 465;
\ No newline at end of file

79
.idea/shelf/变更1/shelved.patch generated Normal file
View File

@ -0,0 +1,79 @@
Index: config.inc.php
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/config.inc.php b/config.inc.php
new file mode 100644
--- /dev/null (date 1675389060127)
+++ b/config.inc.php (date 1675389060127)
@@ -0,0 +1,68 @@
+<?php
+/**
+ * @ignore 配置文件
+ * @ignore 默认情况请勿随意修改数据,敏感数据请勿随意复制给别人
+ *
+ * @author 筱锋xiao_lfeng
+ * @license MIT
+ * @copyright 2022-2023 ZCW and YN. All Rights Reserved.
+ * @version 1.0.0 2023-01-16更新
+ */
+
+// 格式化数据
+$config = [];
+
+/******************* 开放管理 *******************/
+// 站点启用
+$config['WEB']['Start'] = TRUE;
+// 站点开启 Debug 模式
+$config['WEB']['DeBUG'] = FALSE;
+// 站点通信密钥
+$config['SESSION'] = "YNily20040227";
+
+// AccessKeyID
+$config['Aliyun']['AccessKeyID'] = 'LTAI4FyjsXWYDqgTSHrMrCha';
+// AccessKeySecret
+$config['Aliyun']['AccessKeySecret'] = 'DYmFXkMu7ZMly7mzd1M7UYbbYd4UH4';
+
+/******************** 数据库 ********************/
+// 数据库地址
+$config['SQL']['host'] = '127.0.0.1';
+// 数据库名字
+$config['SQL']['dbname'] = 'nw_love';
+// 数据库用户名
+$config['SQL']['username'] = 'nw_love';
+// 数据库密码
+$config['SQL']['password'] = 'YNily20040227';
+
+/******************** 数据表 ********************/
+// 网站基本信息数据表
+$config['TABLE']['info'] = 'nw_web_info';
+// 睡觉信息统计数据表
+$config['TABLE']['daily'] = 'nw_daily';
+// 相册列表数据库
+$config['TABLE']['AlbumList'] = 'nw_album_list';
+// 相册内数据表
+$config['TABLE']['Album'] = 'nw_album';
+// 相册别人偷拍
+$config['TABLE']['candid'] = 'nw_other_candid';
+
+/******************* 邮箱管理 *******************/
+// 邮箱地址
+$config['SMTP']['HOST'] = 'smtp.qiye.aliyun.com';
+// 是否允许SMTP认证
+$config['SMTP']['AUTH'] = true;
+// 邮箱用户名(邮箱)
+$config['SMTP']['USER'] = 'noreplay@x-lf.cn';
+// 邮箱密码或授权码
+$config['SMTP']['PASSWORD'] = 'X+7ily20040722';
+// 发件人
+$config['SMTP']['NAME'] = 'noreplay@x-lf.cn';
+// 展示名字
+$config['SMTP']['DISPLAY'] = 'noreplay@x-lf.cn';
+// 收件名字
+$config['SMTP']['REPLAY'] = 'gm@x-lf.cn';
+// 非SSL端口
+$config['SMTP']['NOSSL'] = 25;
+// SSL端口
+$config['SMTP']['SSL'] = 465;
\ No newline at end of file

View File

@ -0,0 +1,79 @@
Index: config.inc.php
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/config.inc.php b/config.inc.php
new file mode 100644
--- /dev/null (date 1675342685889)
+++ b/config.inc.php (date 1675342685889)
@@ -0,0 +1,68 @@
+<?php
+/**
+ * @ignore 配置文件
+ * @ignore 默认情况请勿随意修改数据,敏感数据请勿随意复制给别人
+ *
+ * @author 筱锋xiao_lfeng
+ * @license MIT
+ * @copyright 2022-2023 ZCW and YN. All Rights Reserved.
+ * @version 1.0.0 2023-01-16更新
+ */
+
+// 格式化数据
+$config = [];
+
+/******************* 开放管理 *******************/
+// 站点启用
+$config['WEB']['Start'] = TRUE;
+// 站点开启 Debug 模式
+$config['WEB']['DeBUG'] = FALSE;
+// 站点通信密钥
+$config['SESSION'] = "YNily20040227";
+
+// AccessKeyID
+$config['Aliyun']['AccessKeyID'] = 'LTAI4FyjsXWYDqgTSHrMrCha';
+// AccessKeySecret
+$config['Aliyun']['AccessKeySecret'] = 'DYmFXkMu7ZMly7mzd1M7UYbbYd4UH4';
+
+/******************** 数据库 ********************/
+// 数据库地址
+$config['SQL']['host'] = '127.0.0.1';
+// 数据库名字
+$config['SQL']['dbname'] = 'nw_love';
+// 数据库用户名
+$config['SQL']['username'] = 'nw_love';
+// 数据库密码
+$config['SQL']['password'] = 'YNily20040227';
+
+/******************** 数据表 ********************/
+// 网站基本信息数据表
+$config['TABLE']['info'] = 'nw_web_info';
+// 睡觉信息统计数据表
+$config['TABLE']['daily'] = 'nw_daily';
+// 相册列表数据库
+$config['TABLE']['AlbumList'] = 'nw_album_list';
+// 相册内数据表
+$config['TABLE']['Album'] = 'nw_album';
+// 相册别人偷拍
+$config['TABLE']['candid'] = 'nw_other_candid';
+
+/******************* 邮箱管理 *******************/
+// 邮箱地址
+$config['SMTP']['HOST'] = 'smtp.qiye.aliyun.com';
+// 是否允许SMTP认证
+$config['SMTP']['AUTH'] = true;
+// 邮箱用户名(邮箱)
+$config['SMTP']['USER'] = 'noreplay@x-lf.cn';
+// 邮箱密码或授权码
+$config['SMTP']['PASSWORD'] = 'X+7ily20040722';
+// 发件人
+$config['SMTP']['NAME'] = 'noreplay@x-lf.cn';
+// 展示名字
+$config['SMTP']['DISPLAY'] = 'noreplay@x-lf.cn';
+// 收件名字
+$config['SMTP']['REPLAY'] = 'gm@x-lf.cn';
+// 非SSL端口
+$config['SMTP']['NOSSL'] = 25;
+// SSL端口
+$config['SMTP']['SSL'] = 465;
\ No newline at end of file

8
.idea/sshConfigs.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SshConfigs">
<configs>
<sshConfig authType="PASSWORD" host="sz.aliyun.x-lf.cn" id="132ce6aa-21ce-49ac-a9ed-8c311ee6c493" port="22" nameFormat="DESCRIPTIVE" username="root" useOpenSSHConfig="true" />
</configs>
</component>
</project>

14
.idea/webServers.xml generated Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WebServers">
<option name="servers">
<webServer id="e02b1ce2-34d2-43e7-8faa-1d7279242093" name="Server">
<fileTransfer rootFolder="/www/wwwroot/NW_love" accessType="SFTP" host="sz.aliyun.x-lf.cn" port="22" sshConfigId="132ce6aa-21ce-49ac-a9ed-8c311ee6c493" sshConfig="root@sz.aliyun.x-lf.cn:22 password">
<advancedOptions>
<advancedOptions dataProtectionLevel="Private" keepAliveTimeout="0" passiveMode="true" shareSSLContext="true" />
</advancedOptions>
</fileTransfer>
</webServer>
</option>
</component>
</project>

264
.idea/workspace.xml generated Normal file
View File

@ -0,0 +1,264 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="133bd8ae-815d-49c7-8c0f-5ec4284059fa" name="变更" comment="前端:主页新增想你了按钮">
<change afterPath="$PROJECT_DIR$/config.inc.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ComposerSettings" doNotAsk="true">
<pharConfigPath>$PROJECT_DIR$/composer.json</pharConfigPath>
<execution>
<executable path="composer" />
</execution>
</component>
<component name="DatabaseLocalColorSettings">
<colors>
<entry key="9864e879-99a5-4c5a-9bed-043684f4b73f" value="Green" />
</colors>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="composer.json" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="master" />
</map>
</option>
<option name="RESET_MODE" value="MIXED" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="PhpDebugGeneral" listening_started="true" />
<component name="PhpWorkspaceProjectConfiguration" interpreter_name="PHP 7.4" />
<component name="ProjectId" id="2KPZgvFtvZNtmGwHNeRziA1BF9E" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"ASKED_ADD_EXTERNAL_FILES": "true",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "true",
"WebServerToolWindowPanel.toolwindow.highlight.mappings": "true",
"WebServerToolWindowPanel.toolwindow.highlight.symlinks": "true",
"WebServerToolWindowPanel.toolwindow.show.date": "false",
"WebServerToolWindowPanel.toolwindow.show.permissions": "false",
"WebServerToolWindowPanel.toolwindow.show.size": "false",
"last.edited.regexp": "",
"last_opened_file_path": "E:/Work/WEB/NW_love/modules",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "project.propVCSSupport.DirectoryMappings",
"vue.rearranger.settings.migration": "true"
},
"keyToStringList": {
"DatabaseDriversLRU": [
"mysql"
]
}
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="E:\Work\WEB\NW_love\modules" />
<recent name="E:\Work\WEB\NW_love\plugins" />
<recent name="E:\Work\WEB\NW_love\sources" />
<recent name="E:\Work\WEB\NW_love\cache" />
<recent name="E:\Work\WEB\NW_love\sources\js" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="E:\Work\WEB\NW_love\Aliyun" />
<recent name="E:\Work\WEB\NW_love\api" />
<recent name="E:\Work\WEB\NW_love\plugins" />
</key>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="133bd8ae-815d-49c7-8c0f-5ec4284059fa" name="变更" comment="" />
<created>1673878292692</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1673878292692</updated>
<workItem from="1673878293619" duration="2780000" />
<workItem from="1673883150515" duration="22587000" />
<workItem from="1674010223566" duration="1667000" />
<workItem from="1674053064962" duration="1850000" />
<workItem from="1674121073950" duration="7833000" />
<workItem from="1675165745483" duration="1337000" />
<workItem from="1675168490388" duration="1130000" />
<workItem from="1675169775375" duration="3209000" />
<workItem from="1675176910070" duration="27000" />
<workItem from="1675176951163" duration="54657000" />
<workItem from="1675332432870" duration="12446000" />
<workItem from="1675348952662" duration="13000" />
<workItem from="1675349799410" duration="151000" />
<workItem from="1675350199506" duration="1000" />
<workItem from="1675386141694" duration="1615000" />
<workItem from="1675387772280" duration="3401000" />
</task>
<task id="LOCAL-00001" summary="Initial commit">
<created>1673883582904</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1673883582904</updated>
</task>
<task id="LOCAL-00002" summary="Upload">
<created>1673886226047</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1673886226047</updated>
</task>
<task id="LOCAL-00003" summary="Upload">
<created>1673967829189</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1673967829189</updated>
</task>
<task id="LOCAL-00004" summary="Upload">
<created>1673968188607</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1673968188607</updated>
</task>
<task id="LOCAL-00005" summary="更新新增内容">
<created>1673968869838</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1673968869838</updated>
</task>
<task id="LOCAL-00006" summary="全量增加">
<created>1675331838743</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1675331838743</updated>
</task>
<task id="LOCAL-00007" summary="邮件、想你、BUG修复">
<created>1675349922438</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1675349922438</updated>
</task>
<task id="LOCAL-00008" summary="Gitignore">
<created>1675386301213</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1675386301213</updated>
</task>
<task id="LOCAL-00009" summary="前端:样式修改">
<created>1675387337141</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1675387337141</updated>
</task>
<task id="LOCAL-00010" summary="前端:主页新增想你了按钮">
<created>1675388005730</created>
<option name="number" value="00010" />
<option name="presentableId" value="LOCAL-00010" />
<option name="project" value="LOCAL" />
<updated>1675388005730</updated>
</task>
<task id="LOCAL-00011" summary="Revert &quot;前端:主页新增想你了按钮&quot;&#10;&#10;This reverts commit ca5fdb67">
<created>1675388664906</created>
<option name="number" value="00011" />
<option name="presentableId" value="LOCAL-00011" />
<option name="project" value="LOCAL" />
<updated>1675388664906</updated>
</task>
<task id="LOCAL-00012" summary="Revert &quot;全量增加&quot;&#10;&#10;This reverts commit 51e9797c">
<created>1675388736424</created>
<option name="number" value="00012" />
<option name="presentableId" value="LOCAL-00012" />
<option name="project" value="LOCAL" />
<updated>1675388736424</updated>
</task>
<option name="localTasksCounter" value="13" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
<option name="RECENT_FILTERS">
<map>
<entry key="Branch">
<value>
<list>
<RecentGroup>
<option name="FILTER_VALUES">
<option value="origin/master" />
</option>
</RecentGroup>
<RecentGroup>
<option name="FILTER_VALUES">
<option value="master" />
</option>
</RecentGroup>
<RecentGroup>
<option name="FILTER_VALUES">
<option value="HEAD" />
</option>
</RecentGroup>
</list>
</value>
</entry>
</map>
</option>
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="Initial commit" />
<MESSAGE value="Upload" />
<MESSAGE value="更新新增内容" />
<MESSAGE value="全量增加" />
<MESSAGE value="邮件、想你、BUG修复" />
<MESSAGE value="Gitignore" />
<MESSAGE value="前端:样式修改" />
<MESSAGE value="前端:主页新增想你了按钮" />
<MESSAGE value="Revert &quot;前端:主页新增想你了按钮&quot;&#10;&#10;This reverts commit ca5fdb67" />
<MESSAGE value="Revert &quot;全量增加&quot;&#10;&#10;This reverts commit 51e9797c" />
<option name="LAST_COMMIT_MESSAGE" value="Revert &quot;全量增加&quot;&#10;&#10;This reverts commit 51e9797c" />
</component>
<component name="XSLT-Support.FileAssociations.UIState">
<expand />
<select />
</component>
</project>

1
.user.ini Normal file
View File

@ -0,0 +1 @@
open_basedir=/www/wwwroot/NW_love/:/tmp/:/proc/

Binary file not shown.

11
Aliyun/autoload.php Normal file
View File

@ -0,0 +1,11 @@
<?php
function classLoader($class)
{
$path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
$file = __DIR__ . DIRECTORY_SEPARATOR .'src'. DIRECTORY_SEPARATOR . $path . '.php';
if (file_exists($file)) {
require_once $file;
}
}
spl_autoload_register('classLoader');

9
README.md Normal file
View File

@ -0,0 +1,9 @@
# NW_Love
> 一个基于 PHP 开发的恋爱互动小网站
## 先随便记录
主色调ffc0cb
辅助色根据bootstrap默认蓝色定

251
album.php Normal file
View File

@ -0,0 +1,251 @@
<?php
// 载入
include_once $_SERVER['DOCUMENT_ROOT'].'/modules/header-loader.php';
// 获取类
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/Functions.php';
$F = new Functions();
/**
* @var array $Normal 普通事件API
* @var array $config 配置文件
* @var array $ApiAlbum 图库API
*/
$ApiAlbum_url = $F->Current_HTTP().'/api/album/select_list.php?session='.$config['SESSION'];
$ApiAlbum_ch = curl_init($ApiAlbum_url);
curl_setopt($ApiAlbum_ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ApiAlbum_ch, CURLOPT_RETURNTRANSFER, true);
$ApiAlbum = curl_exec($ApiAlbum_ch);
$ApiAlbum = json_decode($ApiAlbum,true);
$page = 2;
?>
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title><?php echo $Normal['data']['web_title']['data'] ?> - <?php echo $Normal['data']['web_desc']['data'] ?></title>
<link rel="icon" href="<?php echo $Normal['data']['web_icon']['data'] ?>">
<meta name="description" content="<?php echo $Normal['data']['web_desc']['data'] ?>">
<meta name="keywords" content="<?php echo $Normal['data']['web_keyword'] ?>"></meta>
<meta name="full-screen" content="yes"><!--UC强制全屏-->
<meta name="browsermode" content="application"><!--UC应用模式-->
<meta name="x5-fullscreen" content="true"><!--QQ强制全屏-->
<meta name="x5-page-mode" content="app"><!--QQ应用模式-->
<!-- CSS -->
<link rel="stylesheet" href="/sources/css/bootstrap.min.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_3866622_ur298ayiu2.css">
<link rel="stylesheet" href="/sources/icons/bootstrap-icons.css">
</head>
<body style="background-color: rgba(255,192,203,0.25)">
<!-- 页首 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/header.php"; ?>
<!-- 页中 -->
<div class="container-fluid my-4">
<div class="row">
<?php
if (!empty($_COOKIE['user'])) {
?>
<div class="col-12 text-center">
<a class="btn btn-light text-white rounded-5" style="background-color: #ffc0cb;" href="/auth.php" role="button" data-bs-toggle="modal" data-bs-target="#exampleModal"> <i class="bi bi-folder-plus"></i> 新增图库 </a>
</div>
<?php
}
?>
<?PHP
$num = 0;
while ($ApiAlbum['data'][$num]['id'] != null) {
if (empty($_COOKIE['user'])) {
if ($ApiAlbum['data'][$num]['open']) {
?>
<div class="col-12">
<div class="row">
<?PHP
if ($num % 2 == 0) {
?>
<div class="col-5 text-start align-self-center text-center">
<a href="./picture.php?album=<?php echo $ApiAlbum['data'][$num]['id'] ?>" class="text-decoration-none">
<div class="row">
<div class="col-12" style="width: auto;height: 80%">
<img src="<?php echo $ApiAlbum['data'][$num]['first_image'] ?>" style="width: 40%" class="rounded-3">
</div>
<div class="col-12 text-black fw-light"><?PHP echo $ApiAlbum['data'][$num]['date'] ?></div>
<div class="col-12 text-black fw-bold"><?PHP echo $ApiAlbum['data'][$num]['name'] ?></div>
</div>
</a>
</div>
<?php
} else echo '<div class="col-5 text-end"></div>';
?>
<div class="col-2 text-center"><img src="./sources/img/Album_L_0<?php echo 1+$num%4 ?>.png" class="container"></div>
<?PHP
if ($num % 2 == 1) {
?>
<div class="col-5 text-start align-self-center text-center">
<a href="./picture.php?album=<?php echo $ApiAlbum['data'][$num]['id'] ?>" class="text-decoration-none">
<div class="row">
<div class="col-12" style="width: auto;height: 80%">
<img src="<?php echo $ApiAlbum['data'][$num]['first_image'] ?>" style="width: 40%" class="rounded-3">
</div>
<div class="col-12 text-black fw-light"><?PHP echo $ApiAlbum['data'][$num]['date'] ?></div>
<div class="col-12 text-black fw-bold"><?PHP echo $ApiAlbum['data'][$num]['name'] ?></div>
</div>
</a>
</div>
<?php
} else echo '<div class="col-5 text-start"></div>';
?>
</div>
</div>
<?php
}
} else {
?>
<div class="col-12">
<div class="row">
<?PHP
if ($num % 2 == 0) {
?>
<div class="col-5 text-start align-self-center text-center">
<a href="./picture.php?album=<?php echo $ApiAlbum['data'][$num]['id'] ?>" class="text-decoration-none">
<div class="row">
<div class="col-12" style="width: auto;height: 80%">
<img src="<?php echo $ApiAlbum['data'][$num]['first_image'] ?>" style="width: 40%" class="rounded-3">
</div>
<div class="col-12 text-black fw-light"><?PHP echo $ApiAlbum['data'][$num]['date'] ?></div>
<div class="col-12 text-black fw-bold"><b><?php if (!$ApiAlbum['data'][$num]['open']) echo '[隐私]' ?></b> <?PHP echo $ApiAlbum['data'][$num]['name'] ?></div>
</div>
</a>
</div>
<?php
} else echo '<div class="col-5 text-end"></div>';
?>
<div class="col-2 text-center"><img src="./sources/img/Album_L_0<?php echo 1+$num%4 ?>.png" class="container"></div>
<?PHP
if ($num % 2 == 1) {
?>
<div class="col-5 text-start align-self-center text-center">
<a href="./picture.php?album=<?php echo $ApiAlbum['data'][$num]['id'] ?>" class="text-decoration-none">
<div class="row">
<div class="col-12" style="width: auto;height: 80%">
<img src="<?php echo $ApiAlbum['data'][$num]['first_image'] ?>" style="width: 40%" class="rounded-3">
</div>
<div class="col-12 text-black fw-light"><?PHP echo $ApiAlbum['data'][$num]['date'] ?></div>
<div class="col-12 text-black fw-bold"><b><?php if (!$ApiAlbum['data'][$num]['open']) echo '[隐私]' ?></b> <?PHP echo $ApiAlbum['data'][$num]['name'] ?></div>
</div>
</a>
</div>
<?php
} else echo '<div class="col-5 text-start"></div>';
?>
</div>
</div>
<?php
}
$num ++;
}
?>
<div class="col-12 text-center">
<button class="btn btn-light text-white rounded-5" style="background-color: #ffc0cb;">^v^ 开始啦 ^v^</button>
</div>
<div class="col-12 mt-3 text-center">
<div class="col-12"><a href="https://beian.miit.gov.cn/" class="text-decoration-none text-info" target="_blank"><i class="iconfont icon-ICPbeian"></i> <?php echo $Normal['data']['web_icp']['data'] ?></a></div>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">图库创建</h1>
</div>
<div class="modal-body">
<form method="post" action="#" onsubmit="return false" id="forms">
<div class="row">
<div class="col-12 mb-3">
<label class="form-label">图库名称</label>
<input type="text" class="form-control" id="P_name" name="P_name" placeholder="我的图库" required>
</div>
<div class="col-12 mb-3">
<label class="form-label">标定日期</label>
<input type="date" class="form-control" id="P_date" name="P_date" value="<?php echo date('Y-m-d') ?>" required>
</div>
<div class="col-12">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" id="P_open" name="P_open" checked>
<label class="form-check-label">这个图库是否对外公开</label>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-bs-dismiss="modal"><i class="bi bi-x-circle"></i> 取消创建</button>
<button type="button" class="btn btn-success" data-bs-dismiss="modal" aria-label="Close" onclick="create()"><i class="bi bi-folder-plus"></i> 新建图库</button>
</div>
</div>
</div>
</div>
<!-- Toast -->
<div class="toast-container position-fixed top-0 start-0 p-3">
<div id="liveToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<i class="bi bi-info-circle"></i><strong class="me-auto">提醒</strong>
<small>现在</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body" id="ajax_return"></div>
</div>
</div>
<!-- 底部菜单 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/menu.php"; ?>
</body>
<script type="text/javascript" src="/sources/js/jquery.min.js"></script>
<script type="text/javascript" src="/sources/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/sources/js/bootstrap.bundle.min.js"></script>
<script type="text/javascript">
const LiveToast = document.getElementById('liveToast')
const toast = new bootstrap.Toast(LiveToast)
function create()
{
$.ajax({
async: true,
type: "POST",
data: $('#forms').serialize(),
url: "/plugins/album_list_check.php",
success: function(result) {
if (result == 'SUCCESS') {
$('#ajax_return').text('新建好了')
toast.show()
setTimeout(function () {
window.location.reload()
},2000)
} else if (result == 'UPLOAD_FAIL') {
$('#ajax_return').text('新建失败')
toast.show()
} else if (result == 'OPEN_FALSE') {
$('#ajax_return').text('是否开放啊?有问题')
toast.show()
} else if (result == 'DATE_FALSE') {
$('#ajax_return').text('日期出错了额')
toast.show()
} else if (result == 'NAME_FALSE') {
$('#ajax_return').text('起名不符,只允许中文、英文、数字组合')
toast.show()
} else if (result == 'SESSION_DENY') {
$('#ajax_return').text('呼叫管理员')
toast.show()
}
$('#data').load(result)
},
error: function () {
alert('未知错误请联系管理员JS_ERROR')
}
});
}
</script>
</html>

114
api/album/add.php Normal file
View File

@ -0,0 +1,114 @@
<?php
/**
* nw_love API
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var mysqli $SqlConn 数据库链接信息
* @var array $config 设置相关的数据
*/
require_once $_SERVER['DOCUMENT_ROOT'].'/Aliyun/aliyun-oss-php-sdk-2.6.0.phar';
require_once $_SERVER['DOCUMENT_ROOT'].'/Aliyun/autoload.php';
use OSS\OssClient;
use OSS\Core\OssException;
// 载入前置组件
include $_SERVER['DOCUMENT_ROOT'] . "/api/api-loader.php";
// 载入类
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/modules/ApiFunction.php';
$AFT = new ApiFunction();
// 获取参数
// POST
$PostData = file_get_contents('php://input');
$PostData = json_decode($PostData,true);
// 逻辑搭建
if ($AFT->Get_Session($PostData['ssid'])) {
if (preg_match('/^[\一-\龥A-Za-z0-9_]{2,40}$/',$PostData['name'])) {
if (preg_match('/^\d{4}-\d{1,2}-\d{1,2}/',$PostData['date'])) {
if (preg_match('/[0-1]/',$PostData['open'])) {
// 上传数据
if (mysqli_query($SqlConn,"INSERT INTO ".$config['TABLE']['AlbumList']." (`name`,`date`,`open`) VALUES ('".$PostData['name']."','".$PostData['date']."','".$PostData['open']."')")) {
$Result = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['AlbumList']." ORDER BY id DESC");
$Result_Object = mysqli_fetch_object($Result);
$accessKeyId = $config['Aliyun']['AccessKeyID'];
$accessKeySecret = $config['Aliyun']['AccessKeySecret'];
// Endpoint以华东1杭州为例其它Region请按实际情况填写。
$endpoint = "https://oss-cn-shenzhen-internal.aliyuncs.com";
// 填写Bucket名称。
$bucket= "nw-love";
// 填写不包含Bucket名称在内的Object的完整路径。
$object = "Upload/".$Result_Object->id."/";
$content = "";
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->putObject($bucket, $object, $content);
} catch(OssException $e) {
// 输出结果
$data = [
'output' => 'UPLOAD_ALIYUN_FAIL',
'code' => 403,
'info' => '参数 Sql[Upload_Fail] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
return;
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '新建好了',
];
} else {
// 输出结果
$data = [
'output' => 'UPLOAD_FAIL',
'code' => 403,
'info' => '参数 Sql[Upload_Fail] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'OPEN_FALSE',
'code' => 403,
'info' => '参数错误',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'DATE_FALSE',
'code' => 403,
'info' => '参数错误',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'NAME_FALSE',
'code' => 403,
'info' => '参数错误',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'SESSION_DENY',
'code' => 403,
'info' => '参数 Post[session] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
echo json_encode($data, JSON_UNESCAPED_UNICODE);

View File

@ -0,0 +1,57 @@
<?php
/**
* nw_love API
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var mysqli $SqlConn 数据库链接信息
* @var array $config 设置相关的数据
*/
// 载入前置组件
include $_SERVER['DOCUMENT_ROOT'] . "/api/api-loader.php";
// 载入类
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/modules/ApiFunction.php';
$AFT = new ApiFunction();
// 获取参数GET
$GetData = [
'session' => urldecode(htmlspecialchars($_GET['session'])),
];
// 函数构建
if ($AFT->Get_Session($GetData['session'])) {
// 查询数据库
$Result_Album = mysqli_query($SqlConn, "SELECT * FROM " . $config['TABLE']['candid'] . " ORDER BY `id` DESC");
$number = 0;
while ($Result_Album_Object = mysqli_fetch_object($Result_Album)) {
$array[$number] = [
'id' => $Result_Album_Object->id,
'url' => $Result_Album_Object->url,
'date' => $Result_Album_Object->date,
'open' => $Result_Album_Object->open,
'uploader' => $Result_Album_Object->uploader,
];
$number++;
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '输出成功',
'data' => $array
];
} else {
// 输出结果
$data = [
'output' => 'SESSION_DENY',
'code' => 403,
'info' => '参数 Query[session] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
echo json_encode($data, JSON_UNESCAPED_UNICODE);

68
api/album/select.php Normal file
View File

@ -0,0 +1,68 @@
<?php
/**
* nw_love API
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var mysqli $SqlConn 数据库链接信息
* @var array $config 设置相关的数据
*/
// 载入前置组件
include $_SERVER['DOCUMENT_ROOT'] . "/api/api-loader.php";
// 载入类
require_once $_SERVER['DOCUMENT_ROOT'] . '/api/modules/ApiFunction.php';
$AFT = new ApiFunction();
// 获取参数GET
$GetData = [
'session' => urldecode(htmlspecialchars($_GET['session'])),
'album'=>urldecode(htmlspecialchars($_GET['album'])),
];
// 函数构建
if ($AFT->Get_Session($GetData['session'])) {
if (preg_match('/[0-9]+$/',$GetData['album'])) {
// 查询数据库
$Result_Album = mysqli_query($SqlConn, "SELECT * FROM " . $config['TABLE']['Album'] . " WHERE `album_id`='".$GetData['album']."' ORDER BY `id` DESC");
$number = 0;
while ($Result_Album_Object = mysqli_fetch_object($Result_Album)) {
$array[$number] = [
'id' => $Result_Album_Object->id,
'url' => $Result_Album_Object->url,
'date' => $Result_Album_Object->date,
'open' => $Result_Album_Object->open,
'uploader' => $Result_Album_Object->uploader,
];
$number++;
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '输出成功',
'data' => $array
];
} else {
// 输出结果
$data = [
'output' => 'ALBUM_FALSE',
'code' => 403,
'info' => '参数 Query[album] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'SESSION_DENY',
'code' => 403,
'info' => '参数 Query[session] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
echo json_encode($data, JSON_UNESCAPED_UNICODE);

63
api/album/select_list.php Normal file
View File

@ -0,0 +1,63 @@
<?php
/**
* nw_love API
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var mysqli $SqlConn 数据库链接信息
* @var array $config 设置相关的数据
*/
// 载入前置组件
include $_SERVER['DOCUMENT_ROOT']."/api/api-loader.php";
// 载入类
require_once $_SERVER['DOCUMENT_ROOT'].'/api/modules/ApiFunction.php';
$AFT = new ApiFunction();
// 获取参数GET
$GetData = [
'session'=>urldecode(htmlspecialchars($_GET['session'])),
];
// 函数构建
if ($AFT->Get_Session($GetData['session'])) {
// 查询数据库
$Result_AlbumList = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['AlbumList']." ORDER BY `date` DESC");
$number = 0;
while ($Result_AlbumList_Object = mysqli_fetch_object($Result_AlbumList)) {
$Result_Album = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['Album']." WHERE album_id='".$Result_AlbumList_Object->id."'");
$Result_Album_Object = mysqli_fetch_object($Result_Album);
if ($Result_Album_Object->url == null) {
$Url = 'https://www.na-wen.love/sources/img/no-image.jpg';
} else {
$Url = $Result_Album_Object->url.'!pw60';
}
$array[$number] = [
'id'=>$Result_AlbumList_Object->id,
'name'=>$Result_AlbumList_Object->name,
'date'=>$Result_AlbumList_Object->date,
'open'=>$Result_AlbumList_Object->open,
'first_image'=>$Url,
];
$number ++;
}
// 输出结果
$data = [
'output'=>'SUCCESS',
'code'=>200,
'info'=>'输出成功',
'data'=>$array
];
} else {
// 输出结果
$data = [
'output'=>'SESSION_DENY',
'code'=>403,
'info'=>'参数 Query[session] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
echo json_encode($data,JSON_UNESCAPED_UNICODE);

17
api/api-loader.php Normal file
View File

@ -0,0 +1,17 @@
<?php
/**
* nw_love API head_loader
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var string $SqlConn 数据库链接信息
* @var string $config 设置相关的数据
*/
// 设置请求头
header('Content-Type: application/json;charset=utf-8');
// 获取数据
include $_SERVER['DOCUMENT_ROOT']."/config.inc.php";
include $_SERVER['DOCUMENT_ROOT']."/plugins/SqlConn.php";

23
api/index.php Normal file
View File

@ -0,0 +1,23 @@
<?php
/**
* nw_love API
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var string $SqlConn 数据库链接信息
* @var string $config 设置相关的数据
*/
// 载入前置组件
include $_SERVER['DOCUMENT_ROOT']."/api/api-loader.php";
// 编译数据
$data = [
'output'=>'SUCCESS',
'code'=>200,
'info'=>'API正常运行',
];
// 数据输出
echo json_encode($data,JSON_UNESCAPED_UNICODE);

View File

@ -0,0 +1,26 @@
<?php
// 获取数据
include $_SERVER['DOCUMENT_ROOT']."/config.inc.php";
include $_SERVER['DOCUMENT_ROOT']."/plugins/SqlConn.php";
class ApiFunction
{
/**
* @param $data string
* @return bool
*/
public function Get_Session(string $data): bool {
/*
* 判断 Session 是否正确
*/
global $config,$SqlConn;
$Result_Session = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['info']." WHERE `value`='session'");
$Result_Session_Object = mysqli_fetch_object($Result_Session);
if ($data == $Result_Session_Object->data) {
return true;
} else {
return false;
}
}
}

View File

@ -0,0 +1,137 @@
<?php
class Mail_Templates
{
// 检查使用邮件发送模板
public function Templates($type, $G_user)
{
if ($type == 'miss') {
return $this->MissYou($G_user);
} elseif ($type == 'over_miss') {
return $this->MissYouOver($G_user);
}
}
/**
* @param string $G_user 邮件昵称
* @return string 返回HTML
*/
private function MissYou(string $G_user): string
{
$G_year = date('Y');
$G_date = date("Y-m-d H:i:s");
return <<<EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>XF_TLS_MAIL</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600" style="border-collapse: collapse;border: 1px solid #cccccc;box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175)">
<tr>
<td align="center" bgcolor="#70bbd9" style="padding: 30px 0 30px 0;">
<img src="https://www.na-wen.love/sources/img/BigLogo.png" alt="EmailLogo" width="358.2" height="97.8" style="display: block;" />
</td>
</tr>
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="padding: 30px 30px 30px 30px;">
<tr>
<td style="padding: 10px 0px 30px 0px;color: #08212b; font-family: Arial, sans-serif; font-size: 10px;">
时间: <font style="font-family: var(--bs-font-monospace)">$G_date</font>
</td>
</tr>
<tr>
<td style="padding: 0px 0px 10px 0px;color: #000000; font-family: Arial, sans-serif; font-size: 24px;">
Dear. $G_user
</td>
</tr>
<tr>
<td style="padding: 0px 5px 5px 0px;color: #000000; font-family: Arial, sans-serif; font-size: 16px;">
你的崽崽想你啦~快去回想她一下吧!<br/>
<a href="https://www.na-wen.love/tools/miss_you.php" style="text-decoration: none;color: #198754;">去想想TA</a>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td bgcolor="#f0f0f0" style="padding: 30px 20px 30px 20px;">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="font-family: Arial, sans-serif; font-size: 14px;">
<font style="color: grey;">&copy; 2022 - $G_year <a style="text-decoration: none;color: #198754;" href="https://www.na-wen.love/">青空</a> All Rights Reserved.</font><br/>
<font style="color: grey;">本邮件为 <a href="https://www.x-lf.com" style="text-decoration: none;color: #198754;">XF_Mail</a> 自动发出,请勿直接回复</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
<tr>
<td style="padding: 30px 0 20px 0;"></td>
</tr>
</html>
EOF;
}
private function MissYouOver(string $G_user): string
{
$G_year = date('Y');
$G_date = date("Y-m-d H:i:s");
return <<<EOF
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>XF_TLS_MAIL</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600" style="border-collapse: collapse;border: 1px solid #cccccc;box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175)">
<tr>
<td align="center" bgcolor="#70bbd9" style="padding: 30px 0 30px 0;">
<img src="https://www.na-wen.love/sources/img/BigLogo.png" alt="EmailLogo" width="358.2" height="97.8" style="display: block;" />
</td>
</tr>
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="padding: 30px 30px 30px 30px;">
<tr>
<td style="padding: 10px 0px 30px 0px;color: #08212b; font-family: Arial, sans-serif; font-size: 10px;">
时间: <font style="font-family: var(--bs-font-monospace)">$G_date</font>
</td>
</tr>
<tr>
<td style="padding: 0px 0px 10px 0px;color: #000000; font-family: Arial, sans-serif; font-size: 24px;">
Dear. $G_user
</td>
</tr>
<tr>
<td style="padding: 0px 5px 5px 0px;color: #000000; font-family: Arial, sans-serif; font-size: 16px;">
你的崽崽今天也想你啦~ 两个人要天天想念彼此哦~
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td bgcolor="#f0f0f0" style="padding: 30px 20px 30px 20px;">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="font-family: Arial, sans-serif; font-size: 14px;">
<font style="color: grey;">&copy; 2022 - $G_year <a style="text-decoration: none;color: #198754;" href="https://www.na-wen.love/">青空</a> All Rights Reserved.</font><br/>
<font style="color: grey;">本邮件为 <a href="https://www.x-lf.com" style="text-decoration: none;color: #198754;">XF_Mail</a> 自动发出,请勿直接回复</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
<tr>
<td style="padding: 30px 0 20px 0;"></td>
</tr>
</html>
EOF;
}
}

71
api/modules/Mailer.php Normal file
View File

@ -0,0 +1,71 @@
<?php
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
require $_SERVER["DOCUMENT_ROOT"].'/plugins/PHPMailer/Exception.php';
require $_SERVER["DOCUMENT_ROOT"].'/plugins/PHPMailer/PHPMailer.php';
require $_SERVER["DOCUMENT_ROOT"].'/plugins/PHPMailer/SMTP.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/api/modules/Mail_Templates.php';
$SendMail = new Mail_Templates();
class SendMail
{
// 发送邮件函数
/**
* @param string $type 类型
* @param string $email 发件对象
* @return bool
*/
public function Mailer(string $type,string $email,string $user): bool {
global $SendMail;
global $config;
$Mail = new PHPMailer(true);
try {
// 服务器配置
$Mail->CharSet = "UTF-8";
$Mail->SMTPDebug = 0;
$Mail->isSMTP();
$Mail->Host = $config['SMTP']['HOST'];
$Mail->SMTPAuth = true;
$Mail->Username = $config['SMTP']['USER'];
$Mail->Password = $config['SMTP']['PASSWORD'];
$Mail->SMTPSecure = $this->SSL_Check('secure');
$Mail->Port = $this->SSL_Check('port');
$Mail->setFrom('noreplay@x-lf.cn', '筱锋机器人');
$Mail->addAddress($email);
$Mail->isHTML(true);
$Mail->Subject = '筱锋工具箱 - '.$type; // 邮箱标题
$Mail->Body = $SendMail->Templates($type,$user); // 邮箱正文
$Mail->AltBody = '筱锋工具箱 - '.$type.''.$email; // 不支持HTML显示内容
$Mail->send();
return true;
} catch (Exception $e) {
echo '邮件发送失败:', $Mail->ErrorInfo;
return false;
}
}
// 检查是否是SSL
private function SSL_Check($type) {
global $config;
if ($type == 'port') {
if ($_SERVER['SERVER_PORT'] != '443') {
return $config['SMTP']['NOSSL'];
} else {
return $config['SMTP']['SSL'];
}
} elseif ($type == 'secure') {
if ($_SERVER['SERVER_PORT'] != '443') {
return 'TLS';
} else {
return 'ssl';
}
} else {
return null;
}
}
}

143
api/tools/miss_you.php Normal file
View File

@ -0,0 +1,143 @@
<?php
/**
* nw_love API
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var mysqli $SqlConn 数据库链接信息
* @var array $config 设置相关的数据
*/
// 载入前置组件
include $_SERVER['DOCUMENT_ROOT']."/api/api-loader.php";
// 载入类
require_once $_SERVER['DOCUMENT_ROOT'].'/api/modules/ApiFunction.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/api/modules/Mailer.php';
$AFT = new ApiFunction();
$Mail = new SendMail();
// 获取参数
// POST
$PostData = file_get_contents('php://input');
$PostData = json_decode($PostData,true);
// 逻辑构建
if ($AFT->Get_Session((string)$PostData['session'])) {
if (!empty($PostData['user'])) {
// 获取用户数据
$Result_BoyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['info']." WHERE `value`='boy_user'");
$Result_GirlData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['info']." WHERE `value`='girl_user'");
$Result_BoyData_Object = mysqli_fetch_object($Result_BoyData);
$Result_GirlData_Object = mysqli_fetch_object($Result_GirlData);
if ($PostData['user'] == $Result_BoyData_Object->data or $PostData['user'] == $Result_GirlData_Object->data) {
if ($PostData['miss'] == 1) {
// 数据库抽取
$Result_DailyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['daily']." ORDER BY `id` DESC");
$Result_DailyData_Object = mysqli_fetch_object($Result_DailyData);
// 检查日期是否是今天
if ($Result_DailyData_Object->date != date('Y-m-d')) {
// 生成今日数据
mysqli_query($SqlConn,"INSERT INTO ".$config['TABLE']['daily']." (`date`) VALUES ('".date('Y-m-d')."')");
$Result_DailyData = null;
$Result_DailyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['daily']." ORDER BY `id` DESC");
$Result_DailyData_Object = mysqli_fetch_object($Result_DailyData);
}
if ($PostData['user'] == $Result_BoyData_Object->data) {
// 男孩想女孩
if (!$Result_DailyData_Object->boy_miss) {
$Result_Girl = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['info']." WHERE `value`='girl_email'");
$Result_Girl_Object = mysqli_fetch_object($Result_Girl);
// 修改数据库
if (mysqli_query($SqlConn,"UPDATE ".$config['TABLE']['daily']." SET `boy_miss`=1 WHERE `id`='".$Result_DailyData_Object->id."'")) {
if ($Result_DailyData_Object->girl_miss) {
$Mail->Mailer('over_miss',$Result_Girl_Object->data,$Result_GirlData_Object->data);
} else {
$Mail->Mailer('miss',$Result_Girl_Object->data,$Result_GirlData_Object->data);
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '我想你了!',
];
}
} else {
// 输出结果
$data = [
'output' => 'MISS_ALREADY',
'code' => 200,
'info' => '今天已经想过他了呢',
];
}
} else {
// 女孩想男孩
if (!$Result_DailyData_Object->girl_miss) {
$Result_Boy = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['info']." WHERE `value`='boy_email'");
$Result_Boy_Object = mysqli_fetch_object($Result_Boy);
// 修改数据库
if (mysqli_query($SqlConn,"UPDATE ".$config['TABLE']['daily']." SET `girl_miss`=1 WHERE `id`='".$Result_DailyData_Object->id."'")) {
if ($Result_DailyData_Object->boy_miss) {
$Mail->Mailer('over_miss',$Result_Boy_Object->data,$Result_BoyData_Object->data);
} else {
$Mail->Mailer('miss',$Result_Boy_Object->data,$Result_BoyData_Object->data);
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '我想你了!',
];
}
} else {
// 输出结果
$data = [
'output' => 'MISS_ALREADY',
'code' => 200,
'info' => '今天已经想过他了呢',
];
}
}
} else {
// 输出结果
$data = [
'output' => 'MISS_ERROR',
'code' => 403,
'info' => '参数 Post[miss] 参数错误',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'USER_DENY',
'code' => 403,
'info' => '参数 Cookie[user] 非法用户!',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'USER_ERROR',
'code' => 403,
'info' => '参数 Cookie[user] 非法请求!',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'SESSION_DENY',
'code' => 403,
'info' => '参数 Post[session] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
echo json_encode($data, JSON_UNESCAPED_UNICODE);

145
api/tools/miss_you_logs.php Normal file
View File

@ -0,0 +1,145 @@
<?php
/**
* nw_love API
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var mysqli $SqlConn 数据库链接信息
* @var array $config 设置相关的数据
*/
// 载入前置组件
include $_SERVER['DOCUMENT_ROOT']."/api/api-loader.php";
// 载入类
require_once $_SERVER['DOCUMENT_ROOT'].'/api/modules/ApiFunction.php';
$AFT = new ApiFunction();
// 获取参数
// GET
$GetData = [
'session'=>urldecode(htmlspecialchars($_GET['session'])),
'type'=>urldecode(htmlspecialchars($_GET['type'])),
'date'=>urldecode(htmlspecialchars($_GET['date']))
];
// 函数构建
if ($AFT->Get_Session($GetData['session'])) {
// 类型选择
if ($GetData['type'] == 'today') {
// 数据库抽取
$Result_DailyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['daily']." ORDER BY `id` DESC");
$Result_DailyData_Object = mysqli_fetch_object($Result_DailyData);
// 检查日期是否是今天
if ($Result_DailyData_Object->date != date('Y-m-d')) {
// 生成今日数据
mysqli_query($SqlConn,"INSERT INTO ".$config['TABLE']['daily']." (`date`) VALUES ('".date('Y-m-d')."')");
$Result_DailyData = null;
$Result_DailyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['daily']." ORDER BY `id` DESC");
$Result_DailyData_Object = mysqli_fetch_object($Result_DailyData);
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '输出成功',
'data' => $Result_DailyData_Object,
];
} elseif ($GetData['type'] == 'all') {
// 数据库抽取
$Result_DailyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['daily']." ORDER BY `id` DESC");
$Result_DailyData_Object = mysqli_fetch_object($Result_DailyData);
// 检查日期是否是今天
if ($Result_DailyData_Object->date != date('Y-m-d')) {
// 生成今日数据
mysqli_query($SqlConn,"INSERT INTO ".$config['TABLE']['daily']." (`date`) VALUES ('".date('Y-m-d')."')");
}
$Result_DailyData = null;
$Result_DailyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['daily']." ORDER BY `id` DESC");
$num = 0;
while ($Result_DailyData_Object = mysqli_fetch_object($Result_DailyData)) {
$Array[$num] = [
'id'=>$Result_DailyData_Object->id,
'date'=>$Result_DailyData_Object->date,
'boy_miss'=>$Result_DailyData_Object->boy_miss,
'girl_miss'=>$Result_DailyData_Object->girl_miss,
'boy_sleep_time'=>$Result_DailyData_Object->boy_sleep_time,
'girl_sleep_time'=>$Result_DailyData_Object->girl_sleep_time,
'boy_getup_time'=>$Result_DailyData_Object->boy_getup_time,
'girl_getup_time'=>$Result_DailyData_Object->girl_getup_time
];
$num ++;
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '输出成功',
'data' => $Array,
];
} elseif ($GetData['type'] == 'single') {
if (!empty($GetData['date'])) {
// 数据库抽取
$Result_DailyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['daily']." ORDER BY `id` DESC");
$Result_DailyData_Object = mysqli_fetch_object($Result_DailyData);
// 检查日期是否是今天
if ($Result_DailyData_Object->date != date('Y-m-d')) {
// 生成今日数据
mysqli_query($SqlConn,"INSERT INTO ".$config['TABLE']['daily']." (`date`) VALUES ('".date('Y-m-d')."')");
}
$Result_DailyData = null;
$Result_DailyData = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['daily']." WHERE `date`='".$GetData['date']."'");
$Result_DailyData_Object = mysqli_fetch_object($Result_DailyData);
if (!empty($Result_DailyData_Object)) {
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '输出成功',
'data' => $Result_DailyData_Object,
];
} else {
// 输出结果
$data = [
'output' => 'DATA_NONE',
'code' => 403,
'info' => '没有数据',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'DATE_NONE',
'code' => 403,
'info' => '参数 Query[date] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'TYPE_ERROR',
'code' => 403,
'info' => '参数 Query[type] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
} else {
// 输出结果
$data = [
'output' => 'SESSION_DENY',
'code' => 403,
'info' => '参数 Query[session] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
echo json_encode($data, JSON_UNESCAPED_UNICODE);

53
api/web/index.php Normal file
View File

@ -0,0 +1,53 @@
<?php
/**
* nw_love API
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/**
* @var mysqli $SqlConn 数据库链接信息
* @var array $config 设置相关的数据
*/
// 载入前置组件
include $_SERVER['DOCUMENT_ROOT']."/api/api-loader.php";
// 载入类
require_once $_SERVER['DOCUMENT_ROOT'].'/api/modules/ApiFunction.php';
$AFT = new ApiFunction();
// 获取参数GET
$GetData = [
'session'=>urldecode(htmlspecialchars($_GET['session'])),
];
// 构建函数
if ($AFT->Get_Session($GetData['session'])) { // 判断密钥正确
// 数据查询
$Result_info = mysqli_query($SqlConn,"SELECT * FROM ".$config['TABLE']['info']." ORDER BY id");
while ($Result_info_Object = mysqli_fetch_object($Result_info)) {
if ($Result_info_Object->value != 'session') { // 去除密钥输出
$Array[$Result_info_Object->value] = [
'data'=>$Result_info_Object->data,
'autoload'=>$Result_info_Object->autoload,
];
}
}
// 输出结果
$data = [
'output'=>'SUCCESS',
'code'=>200,
'info'=>'DATA OUTPUT DONE',
'data'=>$Array,
];
} else {
// 输出结果
$data = [
'output'=>'SESSION_DENY',
'code'=>403,
'info'=>'参数 Query[session] 缺失/错误',
];
header('HTTP/1.1 403 Forbidden');
}
echo json_encode($data,JSON_UNESCAPED_UNICODE);

71
auth.php Normal file
View File

@ -0,0 +1,71 @@
<?php
// 载入
include_once $_SERVER['DOCUMENT_ROOT'].'/modules/header-loader.php';
if (!empty($_COOKIE['user'])) {
header('location: /');
}
/**
* @var array $Normal
* @var array $config
*/
$page = 1;
?>
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title><?php echo $Normal['data']['web_title']['data'] ?> - <?php echo $Normal['data']['web_desc']['data'] ?></title>
<link rel="icon" href="<?php echo $Normal['data']['web_icon']['data'] ?>">
<meta name="description" content="<?php echo $Normal['data']['web_desc']['data'] ?>">
<meta name="keywords" content="<?php echo $Normal['data']['web_keyword'] ?>"></meta>
<meta name="full-screen" content="yes"><!--UC强制全屏-->
<meta name="browsermode" content="application"><!--UC应用模式-->
<meta name="x5-fullscreen" content="true"><!--QQ强制全屏-->
<meta name="x5-page-mode" content="app"><!--QQ应用模式-->
<!-- CSS -->
<link rel="stylesheet" href="/sources/css/bootstrap.min.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_3866622_q7rcnjbxpn.css">
<link rel="stylesheet" href="/sources/icons/bootstrap-icons.css">
</head>
<body style="background-color: rgba(255,192,203,0.25)">
<!-- 页首 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/header.php"; ?>
<!-- 页中 -->
<div class="container my-5">
<div class="row text-center">
<div class="col-12">
<div class="card shadow rounded-3" style="background-color: rgba(255,192,203,0.15)">
<div class="card-body">
<form action="/plugins/login_check.php" method="post">
<div class="row">
<div class="col-12 fs-3 fw-bold my-3">登录</div>
<div class="col-12 mb-3 text-start">
<label for="exampleFormControlInput1" class="form-label"><i class="iconfont icon-yonghu"></i> 账户</label>
<input type="text" class="form-control" id="user" name="user" placeholder="Petrichor" required>
</div>
<div class="col-12 mb-3 text-start">
<label for="exampleFormControlInput1" class="form-label"><i class="iconfont icon-mima"></i> 密码</label>
<input type="password" class="form-control" id="password" name="password" placeholder="******" required>
</div>
<div class="col-12 my-3"><button class="btn btn-info" type="submit">> 登入 <</button></div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- 页尾 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/footer.php"; ?>
<!-- 底部菜单 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/menu.php"; ?>
</body>
<script src="/sources/js/bootstrap.min.js"></script>
<script src="/sources/js/bootstrap.bundle.min.js"></script>
</html>

52
demo.php Normal file
View File

@ -0,0 +1,52 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>XF_TLS_MAIL</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="600" style="border-collapse: collapse;border: 1px solid #cccccc;box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175)">
<tr>
<td align="center" bgcolor="#70bbd9" style="padding: 30px 0 30px 0;">
<img src="https://www.na-wen.love/sources/img/BigLogo.png" alt="EmailLogo" width="358.2" height="97.8" style="display: block;" />
</td>
</tr>
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="padding: 30px 30px 30px 30px;">
<tr>
<td style="padding: 10px 0px 30px 0px;color: #08212b; font-family: Arial, sans-serif; font-size: 10px;">
时间: <font style="font-family: var(--bs-font-monospace)">$G_date</font>
</td>
</tr>
<tr>
<td style="padding: 0px 0px 10px 0px;color: #000000; font-family: Arial, sans-serif; font-size: 24px;">
Dear. $G_user
</td>
</tr>
<tr>
<td style="padding: 0px 5px 5px 0px;color: #000000; font-family: Arial, sans-serif; font-size: 16px;">
你的崽崽想你啦~快去回想她一下吧!<br/>
<a href="https://www.na-wen.love/tools/miss_you.php" style="text-decoration: none;color: #198754;">去想想TA</a>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td bgcolor="#f0f0f0" style="padding: 30px 20px 30px 20px;">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="font-family: Arial, sans-serif; font-size: 14px;">
<font style="color: grey;">&copy; 2022 - $G_year <a style="text-decoration: none;color: #198754;" href="https://www.na-wen.love/">青空</a> All Rights Reserved.</font><br/>
<font style="color: grey;">本邮件为 <a href="https://www.x-lf.com" style="text-decoration: none;color: #198754;">XF_Mail</a> 自动发出,请勿直接回复</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
<tr>
<td style="padding: 30px 0 20px 0;"></td>
</tr>
</html>

228
index.php Normal file
View File

@ -0,0 +1,228 @@
<?php
// 载入
include_once $_SERVER['DOCUMENT_ROOT'].'/modules/header-loader.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/Functions.php';
$F = new Functions();
/**
* @var array $Normal
* @var array $config
*/
$page = 1;
// MissYou API
$ApiMiss_url = $F->Current_HTTP().'/api/tools/miss_you_logs.php?type=all&session='.$config['SESSION'];
$ApiMiss_ch = curl_init($ApiMiss_url);
curl_setopt($ApiMiss_ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ApiMiss_ch, CURLOPT_RETURNTRANSFER, true);
$ApiMiss = curl_exec($ApiMiss_ch);
$ApiMiss = json_decode($ApiMiss,true);
?>
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title><?php echo $Normal['data']['web_title']['data'] ?> - <?php echo $Normal['data']['web_desc']['data'] ?></title>
<link rel="icon" href="<?php echo $Normal['data']['web_icon']['data'] ?>">
<meta name="description" content="<?php echo $Normal['data']['web_desc']['data'] ?>">
<meta name="keywords" content="<?php echo $Normal['data']['web_keyword'] ?>">
<meta name="full-screen" content="yes"><!--UC强制全屏-->
<meta name="browsermode" content="application"><!--UC应用模式-->
<meta name="x5-fullscreen" content="true"><!--QQ强制全屏-->
<meta name="x5-page-mode" content="app"><!--QQ应用模式-->
<!-- CSS -->
<link rel="stylesheet" href="/sources/css/bootstrap.min.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_3866622_ur298ayiu2.css">
<link rel="stylesheet" href="/sources/icons/bootstrap-icons.css">
</head>
<body style="background-color: rgba(255,192,203,0.25)">
<!-- 页首 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/header.php"; ?>
<!-- 页中 -->
<div class="container">
<div class="row text-center">
<div class="col-12 mt-4">
<div class="progress" role="progressbar">
<div class="progress-bar progress-bar-striped progress-bar-animated" style="width: <?php echo round((time()-strtotime(date('Y-m-d').'00:00'))/86400,2)*100 ?>%;background-color: #ffc0cb">今天过了<?php echo round((time()-strtotime(date('Y-m-d').'00:00'))/86400,2)*100 ?>%</div>
</div>
</div>
<div class="col-12 my-5">
<div class="row">
<div class="col-4">
<div class="row">
<div class="col-12 mb-1"><img src="https://q1.qlogo.cn/g?b=qq&nk=<?php echo $Normal['data']['boy_qq']['data'] ?>&s=640" class="rounded-circle container-fluid"></div>
<div class="col-12"><?php echo $Normal['data']['boy_name']['data'] ?></div>
</div>
</div>
<div class="col-4"><img src="/sources/img/love.png" class="container-fluid"></div>
<div class="col-4">
<div class="row">
<div class="col-12 mb-1"><img src="https://q1.qlogo.cn/g?b=qq&nk=<?php echo $Normal['data']['girl_qq']['data'] ?>&s=640" class="rounded-circle container-fluid"></div>
<div class="col-12"><?php echo $Normal['data']['girl_name']['data'] ?></div>
</div>
</div>
</div>
</div>
<?php
if (!empty($_COOKIE['user'])) {
if ($_COOKIE['user'] == $Normal['data']['boy_user']['data']) {
// 判断为是否是男方
if (!$ApiMiss['data'][0]['boy_miss']) {
?>
<div class="col-12 mb-3">
<div class="card shadow-sm rounded-3 border-light" style="background-color: rgba(255,192,203,0.2); color: #ff8097">
<div class="card-body">
<div class="row">
<div class="col-6 align-self-center fs-3 fw-bold" style="color: #ff8097">想念对方</div>
<div class="col-6 align-self-center" id="button_miss">
<button class="btn btn-outline-info text-center" onclick="miss_button()"><i class="bi bi-balloon-heart"></i> 想你了</button>
</div>
</div>
</div>
</div>
</div>
<?php
}
} else {
// 判断为女方
if (!$ApiMiss['data'][0]['girl_miss']) {
?>
<div class="col-12 mb-3">
<div class="card shadow-sm rounded-3 border-light" style="background-color: rgba(255,192,203,0.2); color: #ff8097">
<div class="card-body">
<div class="row">
<div class="col-6 align-self-center fs-3 fw-bold" style="color: #ff8097">想念对方</div>
<div class="col-6 align-self-center" id="button_miss">
<button class="btn btn-outline-info text-center" onclick="miss_button()"><i class="bi bi-balloon-heart"></i> 想你了</button>
</div>
</div>
</div>
</div>
</div>
<?php
}
}
?>
<?php
}
?>
<div class="col-12 mb-3">
<div class="card shadow-sm rounded-3 border-light" style="background-color: rgba(255,192,203,0.2); color: #ff8097">
<div class="card-body">
<div class="row">
<div class="col-12 fs-3 fw-bold">我们相恋了 <?php echo round((time()-strtotime($Normal['data']['in_love_time']['data']))/86400+1,2) ?> 天</div>
</div>
</div>
</div>
</div>
<div class="col-12 mb-3">
<div class="card shadow-sm rounded-3 border-light" style="background-color: rgba(0,157,255,0.2); color: #266dcc">
<div class="card-body">
<div class="row">
<div class="col-6 text-start fw-bold"><?php echo $Normal['data']['girl_name']['data'] ?> の 生日</div>
<div class="col-6 text-end">
<div class="row">
<div class="col-12 fw-bold"><?php echo $Normal['data']['girl_birthday']['data'] ?></div>
<div class="col-12">还有
<?php
$date = date("Y").'-'.substr($Normal['data']['girl_birthday']['data'],5,5);
$date_unix = strtotime($date);
if (time() >= $date_unix) {
$date = (date("Y")+1).'-'.substr($Normal['data']['girl_birthday']['data'],5,5);
$date_unix = strtotime($date);
}
echo round(($date_unix-time())/86400 + 1,0);
?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 mb-3">
<div class="card shadow-sm rounded-3 border-light" style="background-color: rgba(0,157,255,0.2); color: #266dcc">
<div class="card-body">
<div class="row">
<div class="col-6 text-start fw-bold"><?php echo $Normal['data']['boy_name']['data'] ?> の 生日</div>
<div class="col-6 text-end">
<div class="row">
<div class="col-12 fw-bold"><?php echo $Normal['data']['boy_birthday']['data'] ?></div>
<div class="col-12">还有
<?php
$date = date("Y").'-'.substr($Normal['data']['boy_birthday']['data'],5,5);
$date_unix = strtotime($date);
if (time() >= $date_unix) {
$date = (date("Y")+1).'-'.substr($Normal['data']['girl_birthday']['data'],5,5);
$date_unix = strtotime($date);
}
echo round(($date_unix-time())/86400 + 1,0);
?>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 mt-3">
<div class="col-12"><a href="https://beian.miit.gov.cn/" class="text-decoration-none text-info" target="_blank"><i class="iconfont icon-ICPbeian"></i> <?php echo $Normal['data']['web_icp']['data'] ?></a></div>
</div>
</div>
</div>
<!-- 底部菜单 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/menu.php"; ?>
</body>
<script type="text/javascript" src="/sources/js/jquery.min.js"></script>
<script type="text/javascript" src="/sources/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/sources/js/bootstrap.bundle.min.js"></script>
<script type="text/javascript">
const LiveToast = document.getElementById('liveToast')
const toast = new bootstrap.Toast(LiveToast)
function miss_button() {
$.ajax({
async: true,
type: "GET",
url: "/plugins/miss_you.php",
success: function(result) {
if (result == 'SUCCESS') {
$('#ajax_return').text('你想TA了并传达给了TA~')
toast.show()
$('#button_miss').html('<button class="btn btn-success text-center" disabled><i class="bi bi-balloon-heart"></i> 想过啦</button>')
setTimeout(function () {
window.location.reload()
}, 2000)
} else if (result == 'MISS_ALREADY') {
$('#ajax_return').text('今天想过他了')
toast.show()
} else if (result == 'MISS_ERROR') {
$('#ajax_return').text('参数错误')
toast.show()
} else if (result == 'USER_DENY') {
$('#ajax_return').text('登陆错误')
toast.show()
} else if (result == 'USER_ERROR') {
$('#ajax_return').text('登陆错误')
toast.show()
} else {
$('#ajax_return').text('未知反应')
toast.show()
}
},
error: function () {
$('#ajax_return').text('错误了,问问管理员吧')
toast.show()
}
});
}
function miss_button_notuser() {
$('#button_miss').html('<button class="btn btn-danger text-center" disabled>你有问题</button>')
}
</script>
</html>

16
modules/Functions.php Normal file
View File

@ -0,0 +1,16 @@
<?php
// 获取数据
include $_SERVER['DOCUMENT_ROOT']."/config.inc.php";
class Functions
{
public function Current_HTTP() {
if ($_SERVER['SERVER_PORT'] == 443) {
return 'https://'.$_SERVER['HTTP_HOST'];
} else {
return 'http://'.$_SERVER['HTTP_HOST'];
}
}
}

15
modules/footer.php Normal file
View File

@ -0,0 +1,15 @@
<?php
/**
* @var string $Normal 基本网站信息API获取
*/
?>
<footer>
<div class="container-fluid sticky-bottom">
<div class="row my-5 text-center">
<div class="col-12">© <?php echo date('Y') ?> <a href="https://www.na-wen.love/" class="text-decoration-none text-info" target="_blank">青空</a>. All Rights Reserved.</div>
<div class="col-12"><a href="https://beian.miit.gov.cn/" class="text-decoration-none text-info" target="_blank"><i class="iconfont icon-ICPbeian"></i> <?php echo $Normal['data']['web_icp']['data'] ?></a></div>
<div class="col-12"><a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=<?php echo $Normal['data']['web_beian_02']['data'] ?>" class="text-decoration-none text-info" target="_blank"><i class="iconfont icon-beianxinxi-ICP-gonganbeian"></i> <?php echo $Normal['data']['web_beian_01']['data'].' '.$Normal['data']['web_beian_02']['data'].'号' ?></a></div>
<div class="col-12"><a href="https://icp.gov.moe/?keyword=20230227" class="text-decoration-none text-info" target="_blank">萌ICP备20230227号</a></div>
</div>
</div>
</footer>

16
modules/header-loader.php Normal file
View File

@ -0,0 +1,16 @@
<?php
// 获取数据
include $_SERVER['DOCUMENT_ROOT']."/config.inc.php";
// 获取类
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/Functions.php';
$F = new Functions();
// 网站基本数据
/** @var string $config */
$Normal_url = $F->Current_HTTP().'/api/web/index.php?session='.$config['SESSION'];
$Normal_ch = curl_init($Normal_url);
curl_setopt($Normal_ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($Normal_ch, CURLOPT_RETURNTRANSFER, true);
$Normal = curl_exec($Normal_ch);
$Normal = json_decode($Normal,true);

15
modules/header.php Normal file
View File

@ -0,0 +1,15 @@
<header>
<?PHP
if ($_COOKIE['user'] == null) {
?>
<div class="container-fluid">
<div class="row mt-4">
<div class="col-12 text-center">
<a class="btn btn-sm btn-light text-white rounded-5" style="background-color: #ffc0cb;" href="/auth.php" role="button"> · 访客方式 · </a>
</div>
</div>
</div>
<?php
}
?>
</header>

46
modules/menu.php Normal file
View File

@ -0,0 +1,46 @@
<?php
function color($num) {
global $page;
if ($num == $page) {
echo 'color: #ff8097';
} else {
echo 'color: #000000';
}
}
?>
<div class="container-fluid fixed-bottom" style="background-color: #ffc0cb">
<div class="row text-center">
<div class="col-3">
<a href="/index.php" class="text-decoration-none" style="<?php color(1); ?>">
<div class="row my-1">
<div class="col-12"><i class="iconfont icon-shouye"></i></div>
<div class="col-12">首页</div>
</div>
</a>
</div>
<div class="col-3">
<a href="/album.php" class="text-decoration-none" style="<?php color(2); ?>">
<div class="row my-1">
<div class="col-12"><i class="iconfont icon-xiangce"></i></div>
<div class="col-12">掠影</div>
</div>
</a>
</div>
<div class="col-3">
<a href="/tools.php" class="text-decoration-none" style="<?php color(3); ?>">
<div class="row my-1">
<div class="col-12"><i class="iconfont icon-gongneng"></i></div>
<div class="col-12">功能</div>
</div>
</a>
</div>
<div class="col-3">
<a href="/personal.php" class="text-decoration-none" style="<?php color(4); ?>">
<div class="row my-1">
<div class="col-12"><i class="bi bi-person"></i></div>
<div class="col-12">个人</div>
</div>
</a>
</div>
</div>
</div>

0
nginx.htaccess Normal file
View File

1
personal.php Normal file
View File

@ -0,0 +1 @@
<?php

215
picture.php Normal file
View File

@ -0,0 +1,215 @@
<?php
// 载入
include_once $_SERVER['DOCUMENT_ROOT'].'/modules/header-loader.php';
// 获取类
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/Functions.php';
$F = new Functions();
/**
* @var array $Normal 普通事件API
* @var array $config 配置文件
* @var array $ApiAlbum 图库API
*/
$ApiAlbumList_url = $F->Current_HTTP().'/api/album/select_list.php?session='.$config['SESSION'];
$ApiAlbumList_ch = curl_init($ApiAlbumList_url);
curl_setopt($ApiAlbumList_ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ApiAlbumList_ch, CURLOPT_RETURNTRANSFER, true);
$ApiAlbumList = curl_exec($ApiAlbumList_ch);
$ApiAlbumList = json_decode($ApiAlbumList,true);
if (!empty(urldecode(htmlspecialchars($_GET['album'])))) {
$ApiAlbum_url = $F->Current_HTTP().'/api/album/select.php?session='.$config['SESSION'].'&album='.urldecode(htmlspecialchars($_GET['album']));
$ApiAlbum_ch = curl_init($ApiAlbum_url);
curl_setopt($ApiAlbum_ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ApiAlbum_ch, CURLOPT_RETURNTRANSFER, true);
$ApiAlbum = curl_exec($ApiAlbum_ch);
$ApiAlbum = json_decode($ApiAlbum,true);
} else {
header('location: ./album.php');
}
$page = 2;
if (empty($_COOKIE['user'])) {
$num = 0;
while ($ApiAlbumList['data'][$num]['id'] != null) {
if ($ApiAlbumList['data'][$num]['id'] == urldecode(htmlspecialchars($_GET['album']))) {
if ($ApiAlbumList['data'][$num]['open'] == "0") {
header('location: ./album.php');
}
}
$num ++;
}
}
?>
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title><?php echo $Normal['data']['web_title']['data'] ?> - <?php echo $Normal['data']['web_desc']['data'] ?></title>
<link rel="icon" href="<?php echo $Normal['data']['web_icon']['data'] ?>">
<meta name="description" content="<?php echo $Normal['data']['web_desc']['data'] ?>">
<meta name="keywords" content="<?php echo $Normal['data']['web_keyword'] ?>"></meta>
<meta name="full-screen" content="yes"><!--UC强制全屏-->
<meta name="browsermode" content="application"><!--UC应用模式-->
<meta name="x5-fullscreen" content="true"><!--QQ强制全屏-->
<meta name="x5-page-mode" content="app"><!--QQ应用模式-->
<!-- CSS -->
<link rel="stylesheet" href="/sources/css/bootstrap.min.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_3866622_ur298ayiu2.css">
<link rel="stylesheet" href="/sources/icons/bootstrap-icons.css">
</head>
<body style="background-color: rgba(255,192,203,0.25)">
<!-- 页首 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/header.php"; ?>
<!-- 页中 -->
<div class="container-fluid my-4">
<div class="row">
<div class="col-6 mb-3 text-start">
<a href="./album.php" class="btn btn-outline-info"><i class="bi bi-backspace"></i> 返回主页</a>
</div>
<?PHP
if (!empty($_COOKIE['user'])) {
?>
<div class="col-6 mb-3 text-end">
<button class="btn btn-outline-info text-end" data-bs-toggle="modal" data-bs-target="#exampleModal"><i class="bi bi-cloud-plus"></i> 新增图片</button>
</div>
<?php
}
?>
<div class="col-12 d-flex flex-wrap text-center" id="ImageFile">
<?PHP
$num = 0;
while ($ApiAlbum['data'][$num]['id'] != null) {
if ($ApiAlbum['data'][$num]['open'] == 1) {
?>
<a class="p-1" href="./picture_look.php?album=<?php echo urldecode(htmlspecialchars($_GET['album'])) ?>&id=<?php echo $num ?>"><img src="<?php echo $ApiAlbum['data'][$num]['url'] ?>!pw80" style="width: 50px" class="rounded-1"></a>
<?php
} else {
if ($ApiAlbum['data'][$num]['uploader'] == $_COOKIE['user']) {
?>
<a class="p-1" href="./picture_look.php?album=<?php echo urldecode(htmlspecialchars($_GET['album'])) ?>&id=<?php echo $num ?>"><img src="<?php echo $ApiAlbum['data'][$num]['url'] ?>!pw80" style="width: 50px" class="rounded-1"></a>
<?php
}
}
$num++;
}
?>
</div>
<div class="col-12 mt-3 text-center">
<div class="col-12"><a href="https://beian.miit.gov.cn/" class="text-decoration-none text-info" target="_blank"><i class="iconfont icon-ICPbeian"></i> <?php echo $Normal['data']['web_icp']['data'] ?></a></div>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">图片上传</h1>
</div>
<div class="modal-body">
<form method="post" id="forms" action="#" onsubmit="return false" enctype ='multipart/form-data'>
<div class="row">
<div class="col-12 mb-3">
<label class="form-check-label">图库编号</label>
<input type="text" class="form-control" id="P_album" name="P_album" readonly value="<?php echo urldecode(htmlspecialchars($_GET['album'])) ?>">
</div>
<div class="col-12 mb-3">
<input type="file" class="form-control" id="P_image[]" name="P_image[]" multiple accept='image/*'>
</div>
<div class="col-12 mb-3">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" id="P_open" name="P_open" checked>
<label class="form-check-label">这组照片是否公开(不开放对方也看不见)</label>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="button_cancel" class="btn btn-danger" data-bs-dismiss="modal"><i class="bi bi-x-circle"></i> 取消创建</button>
<button type="button" id="button_upload" class="btn btn-success" onclick="upload()"><i class="bi bi-cloud-arrow-up"></i> 上传图片</button>
</div>
</div>
</div>
</div>
<!-- Toast -->
<div class="toast-container position-fixed top-0 start-0 p-3">
<div id="liveToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<i class="bi bi-info-circle"></i><strong class="me-auto">提醒</strong>
<small>现在</small>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body" id="ajax_return"></div>
</div>
</div>
<!-- 底部菜单 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/menu.php"; ?>
</body>
<script type="text/javascript" src="/sources/js/jquery.min.js"></script>
<script type="text/javascript" src="/sources/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/sources/js/bootstrap.bundle.min.js"></script>
<script type="text/javascript">
const LiveToast = document.getElementById('liveToast')
const toast = new bootstrap.Toast(LiveToast)
window.onload = function () {
var screen = window.screen.width;
$('#ImageFile').find('img').css('width', (screen - 56) / 4)
}
function upload()
{
var formData = new FormData($('#forms')[0]);
$.ajax({
async: true,
type: "POST",
data: formData,
cache: false,
processData: false,
contentType: false,
url: "/plugins/album_add.php",
beforeSend: function () {
$('#button_upload').html('<div class="spinner-border text-light spinner-border-sm" role="status"><span class="visually-hidden">Loading...</span></div> 正在上传')
$('#button_upload').attr('disabled',"true");
$('#button_cancel').attr('disabled',"true");
},
success: function(result) {
if (result == 'SUCCESS') {
$('#ajax_return').text('新建好了')
toast.show()
$('#button_upload').html('<i class="bi bi-check-circle"></i> 已完成')
$('#button_upload').removeAttr("disabled");
$('#button_cancel').attr('disabled',"true");
setTimeout(function () {
window.location.reload()
},2000)
} else if (result == 'UPLOAD_ALIYUN_FAIL') {
$('#ajax_return').text('上传失败')
toast.show()
$('#button_upload').html('<i class="bi bi-arrow-repeat"></i> 重新上传')
$('#button_upload').removeAttr("disabled");
$('#button_cancel').removeAttr("disabled");
} else if (result == 'IMAGE_NONE') {
$('#ajax_return').text('你图片呢')
toast.show()
$('#button_upload').html('<i class="bi bi-arrow-repeat"></i> 重新上传')
$('#button_upload').removeAttr("disabled");
$('#button_cancel').removeAttr("disabled");
}
$('#data').load(result)
},
error: function () {
$('#button_upload').html('<i class="bi bi-x-circle"></i> 发生错误')
$('#button_upload').removeAttr("disabled");
$('#button_cancel').removeAttr("disabled");
alert('未知错误请联系管理员JS_ERROR')
}
});
}
</script>
</html>

77
picture_look.php Normal file
View File

@ -0,0 +1,77 @@
<?php
// 载入
include_once $_SERVER['DOCUMENT_ROOT'].'/modules/header-loader.php';
// 获取类
require_once $_SERVER['DOCUMENT_ROOT'].'/modules/Functions.php';
$F = new Functions();
/**
* @var array $Normal 普通事件API
* @var array $config 配置文件
* @var array $ApiAlbum 图库API
*/
if (!empty(urldecode(htmlspecialchars($_GET['album'])))) {
$ApiAlbum_url = $F->Current_HTTP().'/api/album/select.php?session='.$config['SESSION'].'&album='.urldecode(htmlspecialchars($_GET['album']));
$ApiAlbum_ch = curl_init($ApiAlbum_url);
curl_setopt($ApiAlbum_ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ApiAlbum_ch, CURLOPT_RETURNTRANSFER, true);
$ApiAlbum = curl_exec($ApiAlbum_ch);
$ApiAlbum = json_decode($ApiAlbum,true);
} else {
header('location: ./album.php');
}
$page = 2;
?>
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title><?php echo $Normal['data']['web_title']['data'] ?> - <?php echo $Normal['data']['web_desc']['data'] ?></title>
<link rel="icon" href="<?php echo $Normal['data']['web_icon']['data'] ?>">
<meta name="description" content="<?php echo $Normal['data']['web_desc']['data'] ?>">
<meta name="keywords" content="<?php echo $Normal['data']['web_keyword'] ?>"></meta>
<meta name="full-screen" content="yes"><!--UC强制全屏-->
<meta name="browsermode" content="application"><!--UC应用模式-->
<meta name="x5-fullscreen" content="true"><!--QQ强制全屏-->
<meta name="x5-page-mode" content="app"><!--QQ应用模式-->
<!-- CSS -->
<link rel="stylesheet" href="/sources/css/bootstrap.min.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_3866622_ur298ayiu2.css">
<link rel="stylesheet" href="/sources/icons/bootstrap-icons.css">
</head>
<body style="background-color: rgba(255,192,203,0.25)">
<!-- 页首 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/header.php"; ?>
<!-- 页中 -->
<div class="container-fluid my-4">
<div class="row">
<div class="col-12 mb-3"><a href="./picture.php?album=<?php echo urldecode(htmlspecialchars($_GET['album'])); ?>" class="btn btn-outline-info"><i class="bi bi-backspace"></i> 返回图库</a></div>
<div class="col-12 mb-5">
<div class="container-fluid">
<img src="<?php echo $ApiAlbum['data'][urldecode(htmlspecialchars($_GET['id']))]['url'] ?>" class="container-fluid">
</div>
</div>
<div class="col-12 mt-5">
<nav style="margin: 0 auto;display: table" aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item"><a class="page-link text-info <?php if (urldecode(htmlspecialchars($_GET['id'])) == 0) echo 'disabled'; ?>" href="?album=<?php echo urldecode(htmlspecialchars($_GET['album'])); ?>&id=<?php echo urldecode(htmlspecialchars($_GET['id']))-1; ?>">上一张</a></li>
<li class="page-item"><a class="page-link text-info <?php if (urldecode(htmlspecialchars($_GET['id'])) == count($ApiAlbum['data'])-1) echo 'disabled'?>" href="?album=<?php echo urldecode(htmlspecialchars($_GET['album'])); ?>&id=<?php echo urldecode(htmlspecialchars($_GET['id']))+1; ?>">下一张</a></li>
</ul>
</nav>
</div>
<div class="col-12 mt-3 text-center">
<div class="col-12"><a href="https://beian.miit.gov.cn/" class="text-decoration-none text-info" target="_blank"><i class="iconfont icon-ICPbeian"></i> <?php echo $Normal['data']['web_icp']['data'] ?></a></div>
</div>
</div>
</div>
<!-- 底部菜单 -->
<?php include $_SERVER['DOCUMENT_ROOT']."/modules/menu.php"; ?>
</body>
<script src="/sources/js/bootstrap.min.js"></script>
<script src="/sources/js/bootstrap.bundle.min.js"></script>
</html>

View File

@ -0,0 +1,40 @@
<?php
/**
* PHPMailer Exception class.
* PHP Version 5.5.
*
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
*
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
* @author Brent R. Matzelle (original founder)
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*/
namespace PHPMailer\PHPMailer;
/**
* PHPMailer exception handler.
*
* @author Marcus Bointon <phpmailer@synchromedia.co.uk>
*/
class Exception extends \Exception
{
/**
* Prettify error message output.
*
* @return string
*/
public function errorMessage()
{
return '<strong>' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "</strong><br />\n";
}
}

139
plugins/PHPMailer/OAuth.php Normal file
View File

@ -0,0 +1,139 @@
<?php
/**
* PHPMailer - PHP email creation and transport class.
* PHP Version 5.5.
*
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
*
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
* @author Brent R. Matzelle (original founder)
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*/
namespace PHPMailer\PHPMailer;
use League\OAuth2\Client\Grant\RefreshToken;
use League\OAuth2\Client\Provider\AbstractProvider;
use League\OAuth2\Client\Token\AccessToken;
/**
* OAuth - OAuth2 authentication wrapper class.
* Uses the oauth2-client package from the League of Extraordinary Packages.
*
* @see http://oauth2-client.thephpleague.com
*
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
*/
class OAuth implements OAuthTokenProvider
{
/**
* An instance of the League OAuth Client Provider.
*
* @var AbstractProvider
*/
protected $provider;
/**
* The current OAuth access token.
*
* @var AccessToken
*/
protected $oauthToken;
/**
* The user's email address, usually used as the login ID
* and also the from address when sending email.
*
* @var string
*/
protected $oauthUserEmail = '';
/**
* The client secret, generated in the app definition of the service you're connecting to.
*
* @var string
*/
protected $oauthClientSecret = '';
/**
* The client ID, generated in the app definition of the service you're connecting to.
*
* @var string
*/
protected $oauthClientId = '';
/**
* The refresh token, used to obtain new AccessTokens.
*
* @var string
*/
protected $oauthRefreshToken = '';
/**
* OAuth constructor.
*
* @param array $options Associative array containing
* `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements
*/
public function __construct($options)
{
$this->provider = $options['provider'];
$this->oauthUserEmail = $options['userName'];
$this->oauthClientSecret = $options['clientSecret'];
$this->oauthClientId = $options['clientId'];
$this->oauthRefreshToken = $options['refreshToken'];
}
/**
* Get a new RefreshToken.
*
* @return RefreshToken
*/
protected function getGrant()
{
return new RefreshToken();
}
/**
* Get a new AccessToken.
*
* @return AccessToken
*/
protected function getToken()
{
return $this->provider->getAccessToken(
$this->getGrant(),
['refresh_token' => $this->oauthRefreshToken]
);
}
/**
* Generate a base64-encoded OAuth token.
*
* @return string
*/
public function getOauth64()
{
//Get a new token if it's not available or has expired
if (null === $this->oauthToken || $this->oauthToken->hasExpired()) {
$this->oauthToken = $this->getToken();
}
return base64_encode(
'user=' .
$this->oauthUserEmail .
"\001auth=Bearer " .
$this->oauthToken .
"\001\001"
);
}
}

View File

@ -0,0 +1,44 @@
<?php
/**
* PHPMailer - PHP email creation and transport class.
* PHP Version 5.5.
*
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
*
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
* @author Brent R. Matzelle (original founder)
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*/
namespace PHPMailer\PHPMailer;
/**
* OAuthTokenProvider - OAuth2 token provider interface.
* Provides base64 encoded OAuth2 auth strings for SMTP authentication.
*
* @see OAuth
* @see SMTP::authenticate()
*
* @author Peter Scopes (pdscopes)
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
*/
interface OAuthTokenProvider
{
/**
* Generate a base64-encoded OAuth token ensuring that the access token has not expired.
* The string to be base 64 encoded should be in the form:
* "user=<user_email_address>\001auth=Bearer <access_token>\001\001"
*
* @return string
*/
public function getOauth64();
}

File diff suppressed because it is too large Load Diff

467
plugins/PHPMailer/POP3.php Normal file
View File

@ -0,0 +1,467 @@
<?php
/**
* PHPMailer POP-Before-SMTP Authentication Class.
* PHP Version 5.5.
*
* @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
*
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
* @author Brent R. Matzelle (original founder)
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*/
namespace PHPMailer\PHPMailer;
/**
* PHPMailer POP-Before-SMTP Authentication Class.
* Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication.
* 1) This class does not support APOP authentication.
* 2) Opening and closing lots of POP3 connections can be quite slow. If you need
* to send a batch of emails then just perform the authentication once at the start,
* and then loop through your mail sending script. Providing this process doesn't
* take longer than the verification period lasts on your POP3 server, you should be fine.
* 3) This is really ancient technology; you should only need to use it to talk to very old systems.
* 4) This POP3 class is deliberately lightweight and incomplete, implementing just
* enough to do authentication.
* If you want a more complete class there are other POP3 classes for PHP available.
*
* @author Richard Davey (original author) <rich@corephp.co.uk>
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
*/
class POP3
{
/**
* The POP3 PHPMailer Version number.
*
* @var string
*/
const VERSION = '6.7.1';
/**
* Default POP3 port number.
*
* @var int
*/
const DEFAULT_PORT = 110;
/**
* Default timeout in seconds.
*
* @var int
*/
const DEFAULT_TIMEOUT = 30;
/**
* POP3 class debug output mode.
* Debug output level.
* Options:
* @see POP3::DEBUG_OFF: No output
* @see POP3::DEBUG_SERVER: Server messages, connection/server errors
* @see POP3::DEBUG_CLIENT: Client and Server messages, connection/server errors
*
* @var int
*/
public $do_debug = self::DEBUG_OFF;
/**
* POP3 mail server hostname.
*
* @var string
*/
public $host;
/**
* POP3 port number.
*
* @var int
*/
public $port;
/**
* POP3 Timeout Value in seconds.
*
* @var int
*/
public $tval;
/**
* POP3 username.
*
* @var string
*/
public $username;
/**
* POP3 password.
*
* @var string
*/
public $password;
/**
* Resource handle for the POP3 connection socket.
*
* @var resource
*/
protected $pop_conn;
/**
* Are we connected?
*
* @var bool
*/
protected $connected = false;
/**
* Error container.
*
* @var array
*/
protected $errors = [];
/**
* Line break constant.
*/
const LE = "\r\n";
/**
* Debug level for no output.
*
* @var int
*/
const DEBUG_OFF = 0;
/**
* Debug level to show server -> client messages
* also shows clients connection errors or errors from server
*
* @var int
*/
const DEBUG_SERVER = 1;
/**
* Debug level to show client -> server and server -> client messages.
*
* @var int
*/
const DEBUG_CLIENT = 2;
/**
* Simple static wrapper for all-in-one POP before SMTP.
*
* @param string $host The hostname to connect to
* @param int|bool $port The port number to connect to
* @param int|bool $timeout The timeout value
* @param string $username
* @param string $password
* @param int $debug_level
*
* @return bool
*/
public static function popBeforeSmtp(
$host,
$port = false,
$timeout = false,
$username = '',
$password = '',
$debug_level = 0
) {
$pop = new self();
return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level);
}
/**
* Authenticate with a POP3 server.
* A connect, login, disconnect sequence
* appropriate for POP-before SMTP authorisation.
*
* @param string $host The hostname to connect to
* @param int|bool $port The port number to connect to
* @param int|bool $timeout The timeout value
* @param string $username
* @param string $password
* @param int $debug_level
*
* @return bool
*/
public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0)
{
$this->host = $host;
//If no port value provided, use default
if (false === $port) {
$this->port = static::DEFAULT_PORT;
} else {
$this->port = (int) $port;
}
//If no timeout value provided, use default
if (false === $timeout) {
$this->tval = static::DEFAULT_TIMEOUT;
} else {
$this->tval = (int) $timeout;
}
$this->do_debug = $debug_level;
$this->username = $username;
$this->password = $password;
//Reset the error log
$this->errors = [];
//Connect
$result = $this->connect($this->host, $this->port, $this->tval);
if ($result) {
$login_result = $this->login($this->username, $this->password);
if ($login_result) {
$this->disconnect();
return true;
}
}
//We need to disconnect regardless of whether the login succeeded
$this->disconnect();
return false;
}
/**
* Connect to a POP3 server.
*
* @param string $host
* @param int|bool $port
* @param int $tval
*
* @return bool
*/
public function connect($host, $port = false, $tval = 30)
{
//Are we already connected?
if ($this->connected) {
return true;
}
//On Windows this will raise a PHP Warning error if the hostname doesn't exist.
//Rather than suppress it with @fsockopen, capture it cleanly instead
set_error_handler([$this, 'catchWarning']);
if (false === $port) {
$port = static::DEFAULT_PORT;
}
//Connect to the POP3 server
$errno = 0;
$errstr = '';
$this->pop_conn = fsockopen(
$host, //POP3 Host
$port, //Port #
$errno, //Error Number
$errstr, //Error Message
$tval
); //Timeout (seconds)
//Restore the error handler
restore_error_handler();
//Did we connect?
if (false === $this->pop_conn) {
//It would appear not...
$this->setError(
"Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr"
);
return false;
}
//Increase the stream time-out
stream_set_timeout($this->pop_conn, $tval, 0);
//Get the POP3 server response
$pop3_response = $this->getResponse();
//Check for the +OK
if ($this->checkResponse($pop3_response)) {
//The connection is established and the POP3 server is talking
$this->connected = true;
return true;
}
return false;
}
/**
* Log in to the POP3 server.
* Does not support APOP (RFC 2828, 4949).
*
* @param string $username
* @param string $password
*
* @return bool
*/
public function login($username = '', $password = '')
{
if (!$this->connected) {
$this->setError('Not connected to POP3 server');
return false;
}
if (empty($username)) {
$username = $this->username;
}
if (empty($password)) {
$password = $this->password;
}
//Send the Username
$this->sendString("USER $username" . static::LE);
$pop3_response = $this->getResponse();
if ($this->checkResponse($pop3_response)) {
//Send the Password
$this->sendString("PASS $password" . static::LE);
$pop3_response = $this->getResponse();
if ($this->checkResponse($pop3_response)) {
return true;
}
}
return false;
}
/**
* Disconnect from the POP3 server.
*/
public function disconnect()
{
// If could not connect at all, no need to disconnect
if ($this->pop_conn === false) {
return;
}
$this->sendString('QUIT' . static::LE);
// RFC 1939 shows POP3 server sending a +OK response to the QUIT command.
// Try to get it. Ignore any failures here.
try {
$this->getResponse();
} catch (Exception $e) {
//Do nothing
}
//The QUIT command may cause the daemon to exit, which will kill our connection
//So ignore errors here
try {
@fclose($this->pop_conn);
} catch (Exception $e) {
//Do nothing
}
// Clean up attributes.
$this->connected = false;
$this->pop_conn = false;
}
/**
* Get a response from the POP3 server.
*
* @param int $size The maximum number of bytes to retrieve
*
* @return string
*/
protected function getResponse($size = 128)
{
$response = fgets($this->pop_conn, $size);
if ($this->do_debug >= self::DEBUG_SERVER) {
echo 'Server -> Client: ', $response;
}
return $response;
}
/**
* Send raw data to the POP3 server.
*
* @param string $string
*
* @return int
*/
protected function sendString($string)
{
if ($this->pop_conn) {
if ($this->do_debug >= self::DEBUG_CLIENT) { //Show client messages when debug >= 2
echo 'Client -> Server: ', $string;
}
return fwrite($this->pop_conn, $string, strlen($string));
}
return 0;
}
/**
* Checks the POP3 server response.
* Looks for for +OK or -ERR.
*
* @param string $string
*
* @return bool
*/
protected function checkResponse($string)
{
if (strpos($string, '+OK') !== 0) {
$this->setError("Server reported an error: $string");
return false;
}
return true;
}
/**
* Add an error to the internal error store.
* Also display debug output if it's enabled.
*
* @param string $error
*/
protected function setError($error)
{
$this->errors[] = $error;
if ($this->do_debug >= self::DEBUG_SERVER) {
echo '<pre>';
foreach ($this->errors as $e) {
print_r($e);
}
echo '</pre>';
}
}
/**
* Get an array of error messages, if any.
*
* @return array
*/
public function getErrors()
{
return $this->errors;
}
/**
* POP3 connection error handler.
*
* @param int $errno
* @param string $errstr
* @param string $errfile
* @param int $errline
*/
protected function catchWarning($errno, $errstr, $errfile, $errline)
{
$this->setError(
'Connecting to the POP3 server raised a PHP warning:' .
"errno: $errno errstr: $errstr; errfile: $errfile; errline: $errline"
);
}
}

1458
plugins/PHPMailer/SMTP.php Normal file

File diff suppressed because it is too large Load Diff

27
plugins/SqlConn.php Normal file
View File

@ -0,0 +1,27 @@
<?php
/**
* nw_love API head_loader
* @copyright 2022-2023 ZCW and YN. All Rights Reserved.
*/
/** @var string $config */
$SqlHost = $config['SQL']['host'];
$SqlDBname = $config['SQL']['dbname'];
$SqlUsername = $config['SQL']['username'];
$SqlPassword = $config['SQL']['password'];
// 判断数据库的端口
if ($config['SQL']['port'] == 3306 or $config['SQL']['port'] == NULL) {
$SqlPort = 3306;
} else {
$SqlPort = $config['SQL']['port'];
}
// 链接数据库
$SqlConn = new MySQLi($SqlHost,$SqlUsername,$SqlPassword,$SqlDBname,$SqlPort);
// 检查错误
if ($config['WEB']['DeBUG']) {
die('数据库链接失败ErrorCode: '.$SqlConn->connect_error);
}

73
plugins/album_add.php Normal file
View File

@ -0,0 +1,73 @@
<?php
include_once $_SERVER['DOCUMENT_ROOT'].'/modules/header-loader.php';
include_once $_SERVER['DOCUMENT_ROOT']."/plugins/SqlConn.php";
require_once $_SERVER['DOCUMENT_ROOT'].'/Aliyun/aliyun-oss-php-sdk-2.6.0.phar';
require_once $_SERVER['DOCUMENT_ROOT'].'/Aliyun/autoload.php';
use OSS\OssClient;
use OSS\Core\OssException;
/**
* @var array $data 数据
* @var array $config setting
* @var mysqli $SqlConn MySQL Connect
*/
if (htmlspecialchars($_POST['P_open'])) $open = 1;
else $open = 0;
if (!empty($_FILES['P_image']['name'][0])) {
// 阿里云账号AccessKey拥有所有API的访问权限风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维请登录RAM控制台创建RAM用户。
$accessKeyId = $config['Aliyun']['AccessKeyID'];
$accessKeySecret = $config['Aliyun']['AccessKeySecret'];
// Endpoint以华东1杭州为例其它Region请按实际情况填写。
$endpoint = "https://oss-cn-shenzhen-internal.aliyuncs.com";
// 填写Bucket名称。
$bucket= "nw-love";
for ($i=0; $i<count($_FILES['P_image']['name']); $i++) {
$tmpFilePatch = $_FILES['P_image']['tmp_name'][$i];
$data = explode('.',$_FILES['P_image']['name'][$i]);
$new_name = rand(1000,9999).time().rand(1000,9999).'.'.$data[1];
$_FILES['P_image']['name'][$i] = $new_name;
if ($tmpFilePatch != '') {
move_uploaded_file($_FILES["P_image"]["tmp_name"][$i], $_SERVER['DOCUMENT_ROOT']."/cache/" . $_FILES["P_image"]["name"][$i]);
$FilePatch[$i] = $_SERVER['DOCUMENT_ROOT']."/cache/" . $_FILES["P_image"]["name"][$i];
}
}
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
// 第一次追加上传。第一次追加的位置是0返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
for ($i=0; $i<count($_FILES['P_image']['name']); $i++) {
$object = "Upload/".htmlspecialchars($_POST['P_album'])."/".$_FILES["P_image"]["name"][$i];
// 填写不包含Bucket名称在内的Object的完整路径。
$ossClient->uploadFile($bucket, $object, $FilePatch[$i]);
mysqli_query($SqlConn,"INSERT INTO ".$config['TABLE']['Album']." (`album_id`,`url`,`date`,`open`,`uploader`) VALUES ('".htmlspecialchars($_POST['P_album'])."','https://img.na-wen.love/Upload/".htmlspecialchars($_POST['P_album'])."/".$_FILES['P_image']['name'][$i]."','".date('Y-m-d')."','".$open."','".$_COOKIE['user']."')");
unlink($_SERVER['DOCUMENT_ROOT']."/cache/" . $_FILES["P_image"]["name"][$i]);
}
} catch(OssException $e) {
// 输出结果
$data = [
'output' => 'UPLOAD_ALIYUN_FAIL',
'code' => 403,
'info' => '上传失败',
];
return;
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '完成',
'data' => $_FILES['P_image']['tmp_name'],
];
} else {
// 输出结果
$data = [
'output' => 'IMAGE_NONE',
'code' => 403,
'info' => '你的图片呢?',
];
}
echo $data['output'];

View File

@ -0,0 +1,54 @@
<?php
/**
* @var array $config
*/
include $_SERVER['DOCUMENT_ROOT'].'/config.inc.php';
// 时间转换
$date = htmlspecialchars($_POST['P_date']);
$date = strtotime($date);
$date = date('Y-m-d',$date);
if (htmlspecialchars($_POST['P_open'])) {
$open = 1;
} else {
$open = 0;
}
// 函数处理
$PostUrl = 'https://www.na-wen.love/api/album/add.php';
$data = [
'ssid'=>$config['SESSION'],
'name'=>htmlspecialchars($_POST['P_name']),
'date'=>$date,
'open'=>$open,
];
$JsonStr = json_encode($data); //转换为json格式
$PostData = http_post_json($PostUrl, $JsonStr);
$PostData = json_decode($PostData,true);
echo $PostData['output'];
// 发送POST
/**
* @param $url
* @param $jsonStr
* @return bool|string
*/
function http_post_json($url, $jsonStr) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($jsonStr)
)
);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}

73
plugins/candid_add.php Normal file
View File

@ -0,0 +1,73 @@
<?php
include_once $_SERVER['DOCUMENT_ROOT'].'/modules/header-loader.php';
include_once $_SERVER['DOCUMENT_ROOT']."/plugins/SqlConn.php";
require_once $_SERVER['DOCUMENT_ROOT'].'/Aliyun/aliyun-oss-php-sdk-2.6.0.phar';
require_once $_SERVER['DOCUMENT_ROOT'].'/Aliyun/autoload.php';
use OSS\OssClient;
use OSS\Core\OssException;
/**
* @var array $data 数据
* @var array $config setting
* @var mysqli $SqlConn MySQL Connect
*/
if (htmlspecialchars($_POST['P_open'])) $open = 1;
else $open = 0;
if (!empty($_FILES['P_image']['name'][0])) {
// 阿里云账号AccessKey拥有所有API的访问权限风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维请登录RAM控制台创建RAM用户。
$accessKeyId = $config['Aliyun']['AccessKeyID'];
$accessKeySecret = $config['Aliyun']['AccessKeySecret'];
// Endpoint以华东1杭州为例其它Region请按实际情况填写。
$endpoint = "https://oss-cn-shenzhen-internal.aliyuncs.com";
// 填写Bucket名称。
$bucket= "nw-love";
for ($i=0; $i<count($_FILES['P_image']['name']); $i++) {
$tmpFilePatch = $_FILES['P_image']['tmp_name'][$i];
$data = explode('.',$_FILES['P_image']['name'][$i]);
$new_name = rand(1000,9999).time().rand(1000,9999).'.'.$data[1];
$_FILES['P_image']['name'][$i] = $new_name;
if ($tmpFilePatch != '') {
move_uploaded_file($_FILES["P_image"]["tmp_name"][$i], $_SERVER['DOCUMENT_ROOT']."/cache/" . $_FILES["P_image"]["name"][$i]);
$FilePatch[$i] = $_SERVER['DOCUMENT_ROOT']."/cache/" . $_FILES["P_image"]["name"][$i];
}
}
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
// 第一次追加上传。第一次追加的位置是0返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
for ($i=0; $i<count($_FILES['P_image']['name']); $i++) {
$object = "OtherCandid/".$_FILES["P_image"]["name"][$i];
// 填写不包含Bucket名称在内的Object的完整路径。
$ossClient->uploadFile($bucket, $object, $FilePatch[$i]);
mysqli_query($SqlConn,"INSERT INTO ".$config['TABLE']['candid']." (`url`,`date`,`open`,`uploader`) VALUES ('https://img.na-wen.love/OtherCandid/".$_FILES["P_image"]["name"][$i]."','".date('Y-m-d')."','".$open."','".$_COOKIE['user']."')");
unlink($_SERVER['DOCUMENT_ROOT']."/cache/" . $_FILES["P_image"]["name"][$i]);
}
} catch(OssException $e) {
// 输出结果
$data = [
'output' => 'UPLOAD_ALIYUN_FAIL',
'code' => 403,
'info' => '上传失败',
];
return;
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '完成',
'data' => $_FILES['P_image']['tmp_name'],
];
} else {
// 输出结果
$data = [
'output' => 'IMAGE_NONE',
'code' => 403,
'info' => '你的图片呢?',
];
}
echo $data['output'];

64
plugins/demo.php Normal file
View File

@ -0,0 +1,64 @@
<?php
include_once $_SERVER['DOCUMENT_ROOT'].'/modules/header-loader.php';
include $_SERVER['DOCUMENT_ROOT']."/plugins/SqlConn.php";
require_once $_SERVER['DOCUMENT_ROOT'].'/Aliyun/aliyun-oss-php-sdk-2.6.0.phar';
require_once $_SERVER['DOCUMENT_ROOT'].'/Aliyun/autoload.php';
use OSS\OssClient;
use OSS\Core\OssException;
// 阿里云账号AccessKey拥有所有API的访问权限风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维请登录RAM控制台创建RAM用户。
/**
* @var array $config
* @var mysqli $SqlConn
*/
if (htmlspecialchars($_POST['P_open'])) $open = 1;
else $open = 0;
$accessKeyId = $config['Aliyun']['AccessKeyID'];
$accessKeySecret = $config['Aliyun']['AccessKeySecret'];
// Endpoint以华东1杭州为例其它Region请按实际情况填写。
$endpoint = "https://oss-cn-shenzhen-internal.aliyuncs.com";
// 填写Bucket名称。
$bucket= "nw-love";
for ($i=0; $i<count($_FILES['P_image']['name']); $i++) {
$tmpFilePatch = $_FILES['P_image']['tmp_name'][$i];
$data = explode('.',$_FILES['P_image']['name'][$i]);
$new_name = rand(1000,9999).time().rand(1000,9999).'.'.$data[1];
$_FILES['P_image']['name'][$i] = $new_name;
if ($tmpFilePatch != '') {
move_uploaded_file($_FILES["P_image"]["tmp_name"][$i], "../cache/" . $_FILES["P_image"]["name"][$i]);
$FilePatch[$i] = $_SERVER['DOCUMENT_ROOT']."/cache/" . $_FILES["P_image"]["name"][$i];
}
}
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
// 第一次追加上传。第一次追加的位置是0返回值为下一次追加的位置。后续追加的位置是追加前文件的长度。
for ($i=0; $i<count($_FILES['P_image']['name']); $i++) {
$object = "Upload/".htmlspecialchars($_POST['P_album'])."/".$_FILES["P_image"]["name"][$i];
// 填写不包含Bucket名称在内的Object的完整路径。
$ossClient->uploadFile($bucket, $object, $FilePatch[$i]);
mysqli_query($SqlConn,"INSERT INTO ".$config['TABLE']['Album']." (`album_id`,`url`,`date`,`open`,`uploader`) VALUES ('".htmlspecialchars($_POST['P_album'])."','https://img.na-wen.love/Upload/".htmlspecialchars($_POST['P_album'])."/".$_FILES['P_image']['name'][$i]."','".date('Y-m-d')."','".$open."','".$_COOKIE['user']."')");
unlink($_SERVER['DOCUMENT_ROOT']."/cache/" . $_FILES["P_image"]["name"][$i]);
}
} catch(OssException $e) {
// 输出结果
$data = [
'output' => 'UPLOAD_ALIYUN_FAIL',
'code' => 403,
'info' => '上传失败',
];
return;
}
// 输出结果
$data = [
'output' => 'SUCCESS',
'code' => 200,
'info' => '完成',
'data' => $FilePatch,
];
echo json_encode($data,JSON_UNESCAPED_UNICODE);

38
plugins/login_check.php Normal file
View File

@ -0,0 +1,38 @@
<?php
include $_SERVER['DOCUMENT_ROOT'] . "/modules/header-loader.php";
/**
* @var array $config
* @var array $Normal
*/
if ($_POST['user'] == $Normal['data']['boy_user']['data'] or $_POST['user'] == $Normal['data']['girl_user']['data']) {
$Api_Login_url = $Normal['data']['xf_api']['data'].'/auth/login/?ukey='.$Normal['data']['xf_key']['data'].'&username='.$_POST['user'].'&password='.$_POST['password'];
$Api_Login_ch = curl_init($Api_Login_url);
curl_setopt($Api_Login_ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($Api_Login_ch, CURLOPT_RETURNTRANSFER, true);
$Api_Login = curl_exec($Api_Login_ch);
$Api_Login = json_decode($Api_Login,true);
if ($Api_Login['output'] == 'SUCCESS') {
setcookie('user',$_POST["user"],time()+86400*30,'/');
echo <<<EOF
<script>
alert('登陆成功');
window.location.href = "/";
</script>
EOF;
} else {
echo <<<EOF
<script>
alert('用户名或密码错误');
window.history.go(-1);
</script>
EOF;
}
} else {
echo <<<EOF
<script>
alert('非对应用户哦~');
window.history.go(-1);
</script>
EOF;
}

42
plugins/miss_you.php Normal file
View File

@ -0,0 +1,42 @@
<?php
/**
* @var array $config
*/
include $_SERVER['DOCUMENT_ROOT'].'/config.inc.php';
// 函数处理
$PostUrl = 'https://www.na-wen.love/api/tools/miss_you.php';
$data = [
'session'=>$config['SESSION'],
'miss'=>1,
'user'=>$_COOKIE['user']
];
$JsonStr = json_encode($data); //转换为json格式
$PostData = http_post_json($PostUrl, $JsonStr);
$PostData = json_decode($PostData,true);
echo $PostData['output'];
// 发送POST
/**
* @param $url
* @param $jsonStr
* @return bool|string
*/
function http_post_json($url, $jsonStr) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($jsonStr)
)
);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}

6
sources/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-circle-fill" viewBox="0 0 16 16">
<path d="M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895Z"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.012 4.158c1.858 0 2.96-1.582 2.96-3.99V7.84c0-2.426-1.079-3.996-2.936-3.996-1.864 0-2.965 1.588-2.965 3.996v.328c0 2.42 1.09 3.99 2.941 3.99Z"/>
</svg>

After

Width:  |  Height:  |  Size: 479 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-circle" viewBox="0 0 16 16">
<path d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99ZM8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895Z"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 511 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-square-fill" viewBox="0 0 16 16">
<path d="M8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99Z"/>
</svg>

After

Width:  |  Height:  |  Size: 518 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-0-square" viewBox="0 0 16 16">
<path d="M7.988 12.158c-1.851 0-2.941-1.57-2.941-3.99V7.84c0-2.408 1.101-3.996 2.965-3.996 1.857 0 2.935 1.57 2.935 3.996v.328c0 2.408-1.101 3.99-2.959 3.99ZM8 4.951c-1.008 0-1.629 1.09-1.629 2.895v.31c0 1.81.627 2.895 1.629 2.895s1.623-1.09 1.623-2.895v-.31c0-1.8-.621-2.895-1.623-2.895Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 585 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM9.283 4.002H7.971L6.072 5.385v1.271l1.834-1.318h.065V12h1.312V4.002Z"/>
</svg>

After

Width:  |  Height:  |  Size: 257 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM9.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383h1.312Z"/>
</svg>

After

Width:  |  Height:  |  Size: 287 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm7.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383h1.312Z"/>
</svg>

After

Width:  |  Height:  |  Size: 294 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-1-square" viewBox="0 0 16 16">
<path d="M9.283 4.002V12H7.971V5.338h-.065L6.072 6.656V5.385l1.899-1.383h1.312Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 376 B

3
sources/icons/123.svg Normal file
View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-123" viewBox="0 0 16 16">
<path d="M2.873 11.297V4.142H1.699L0 5.379v1.137l1.64-1.18h.06v5.961h1.174Zm3.213-5.09v-.063c0-.618.44-1.169 1.196-1.169.676 0 1.174.44 1.174 1.106 0 .624-.42 1.101-.807 1.526L4.99 10.553v.744h4.78v-.99H6.643v-.069L8.41 8.252c.65-.724 1.237-1.332 1.237-2.27C9.646 4.849 8.723 4 7.308 4c-1.573 0-2.36 1.064-2.36 2.15v.057h1.138Zm6.559 1.883h.786c.823 0 1.374.481 1.379 1.179.01.707-.55 1.216-1.421 1.21-.77-.005-1.326-.419-1.379-.953h-1.095c.042 1.053.938 1.918 2.464 1.918 1.478 0 2.642-.839 2.62-2.144-.02-1.143-.922-1.651-1.551-1.714v-.063c.535-.09 1.347-.66 1.326-1.678-.026-1.053-.933-1.855-2.359-1.845-1.5.005-2.317.88-2.348 1.898h1.116c.032-.498.498-.944 1.206-.944.703 0 1.206.435 1.206 1.07.005.64-.504 1.106-1.2 1.106h-.75v.96Z"/>
</svg>

After

Width:  |  Height:  |  Size: 870 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM6.646 6.24c0-.691.493-1.306 1.336-1.306.756 0 1.313.492 1.313 1.236 0 .697-.469 1.23-.902 1.705l-2.971 3.293V12h5.344v-1.107H7.268v-.077l1.974-2.22.096-.107c.688-.763 1.287-1.428 1.287-2.43 0-1.266-1.031-2.215-2.613-2.215-1.758 0-2.637 1.19-2.637 2.402v.065h1.271v-.07Z"/>
</svg>

After

Width:  |  Height:  |  Size: 458 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM6.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306Z"/>
</svg>

After

Width:  |  Height:  |  Size: 480 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm4.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306Z"/>
</svg>

After

Width:  |  Height:  |  Size: 487 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-2-square" viewBox="0 0 16 16">
<path d="M6.646 6.24v.07H5.375v-.064c0-1.213.879-2.402 2.637-2.402 1.582 0 2.613.949 2.613 2.215 0 1.002-.6 1.667-1.287 2.43l-.096.107-1.974 2.22v.077h3.498V12H5.422v-.832l2.97-3.293c.434-.475.903-1.008.903-1.705 0-.744-.557-1.236-1.313-1.236-.843 0-1.336.615-1.336 1.306Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 569 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.082.414c.92 0 1.535.54 1.541 1.318.012.791-.615 1.36-1.588 1.354-.861-.006-1.482-.469-1.54-1.066H5.104c.047 1.177 1.05 2.144 2.754 2.144 1.653 0 2.954-.937 2.93-2.396-.023-1.278-1.031-1.846-1.734-1.916v-.07c.597-.1 1.505-.739 1.482-1.876-.03-1.177-1.043-2.074-2.637-2.062-1.675.006-2.59.984-2.625 2.12h1.248c.036-.556.557-1.054 1.348-1.054.785 0 1.348.486 1.348 1.195.006.715-.563 1.237-1.342 1.237h-.838v1.072h.879Z"/>
</svg>

After

Width:  |  Height:  |  Size: 608 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-circle" viewBox="0 0 16 16">
<path d="M7.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318Z"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 645 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318Z"/>
</svg>

After

Width:  |  Height:  |  Size: 637 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-3-square" viewBox="0 0 16 16">
<path d="M7.918 8.414h-.879V7.342h.838c.78 0 1.348-.522 1.342-1.237 0-.709-.563-1.195-1.348-1.195-.79 0-1.312.498-1.348 1.055H5.275c.036-1.137.95-2.115 2.625-2.121 1.594-.012 2.608.885 2.637 2.062.023 1.137-.885 1.776-1.482 1.875v.07c.703.07 1.71.64 1.734 1.917.024 1.459-1.277 2.396-2.93 2.396-1.705 0-2.707-.967-2.754-2.144H6.33c.059.597.68 1.06 1.541 1.066.973.006 1.6-.563 1.588-1.354-.006-.779-.621-1.318-1.541-1.318Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 719 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM7.519 5.057c-.886 1.418-1.772 2.838-2.542 4.265v1.12H8.85V12h1.26v-1.559h1.007V9.334H10.11V4.002H8.176c-.218.352-.438.703-.657 1.055ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218Z"/>
</svg>

After

Width:  |  Height:  |  Size: 391 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-circle" viewBox="0 0 16 16">
<path d="M7.519 5.057c.22-.352.439-.703.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218Z"/>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Z"/>
</svg>

After

Width:  |  Height:  |  Size: 433 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-square-fill" viewBox="0 0 16 16">
<path d="M6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.519 5.057c.22-.352.439-.703.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265Z"/>
</svg>

After

Width:  |  Height:  |  Size: 440 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-4-square" viewBox="0 0 16 16">
<path d="M7.519 5.057c.22-.352.439-.703.657-1.055h1.933v5.332h1.008v1.107H10.11V12H8.85v-1.559H4.978V9.322c.77-1.427 1.656-2.847 2.542-4.265ZM6.225 9.281v.053H8.85V5.063h-.065c-.867 1.33-1.787 2.806-2.56 4.218Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 507 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8.006 4.158c1.74 0 2.924-1.119 2.924-2.806 0-1.641-1.178-2.584-2.56-2.584-.897 0-1.442.421-1.612.68h-.064l.193-2.344h3.621V4.002H5.791L5.445 8.63h1.149c.193-.358.668-.809 1.435-.809.85 0 1.582.604 1.582 1.57 0 1.085-.779 1.682-1.57 1.682-.697 0-1.389-.31-1.53-1.031H5.276c.065 1.213 1.149 2.115 2.72 2.115Z"/>
</svg>

After

Width:  |  Height:  |  Size: 496 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 1 14 0A7 7 0 0 1 1 8Zm15 0A8 8 0 1 0 0 8a8 8 0 0 0 16 0Zm-8.006 4.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
</svg>

After

Width:  |  Height:  |  Size: 516 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm5.994 12.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
</svg>

After

Width:  |  Height:  |  Size: 523 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-5-square" viewBox="0 0 16 16">
<path d="M7.994 12.158c-1.57 0-2.654-.902-2.719-2.115h1.237c.14.72.832 1.031 1.529 1.031.791 0 1.57-.597 1.57-1.681 0-.967-.732-1.57-1.582-1.57-.767 0-1.242.45-1.435.808H5.445L5.791 4h4.705v1.103H6.875l-.193 2.343h.064c.17-.258.715-.68 1.611-.68 1.383 0 2.561.944 2.561 2.585 0 1.687-1.184 2.806-2.924 2.806Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 605 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM8.21 3.855c-1.868 0-3.116 1.395-3.116 4.407 0 1.183.228 2.039.597 2.642.569.926 1.477 1.254 2.409 1.254 1.629 0 2.847-1.013 2.847-2.783 0-1.676-1.254-2.555-2.508-2.555-1.125 0-1.752.61-1.98 1.155h-.082c-.012-1.946.727-3.036 1.805-3.036.802 0 1.213.457 1.312.815h1.29c-.06-.908-.962-1.899-2.573-1.899Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582Z"/>
</svg>

After

Width:  |  Height:  |  Size: 619 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM8.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582Z"/>
</svg>

After

Width:  |  Height:  |  Size: 643 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-square-fill" viewBox="0 0 16 16">
<path d="M8.111 7.863c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582Z"/>
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm6.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Z"/>
</svg>

After

Width:  |  Height:  |  Size: 665 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-6-square" viewBox="0 0 16 16">
<path d="M8.21 3.855c1.612 0 2.515.99 2.573 1.899H9.494c-.1-.358-.51-.815-1.312-.815-1.078 0-1.817 1.09-1.805 3.036h.082c.229-.545.855-1.155 1.98-1.155 1.254 0 2.508.88 2.508 2.555 0 1.77-1.218 2.783-2.847 2.783-.932 0-1.84-.328-2.409-1.254-.369-.603-.597-1.459-.597-2.642 0-3.012 1.248-4.407 3.117-4.407Zm-.099 4.008c-.92 0-1.564.65-1.564 1.576 0 1.032.703 1.635 1.558 1.635.868 0 1.553-.533 1.553-1.629 0-1.06-.744-1.582-1.547-1.582Z"/>
<path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2Zm15 0a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2Z"/>
</svg>

After

Width:  |  Height:  |  Size: 732 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM5.37 5.11h3.972v.07L6.025 12H7.42l3.258-6.85V4.002H5.369v1.107Z"/>
</svg>

After

Width:  |  Height:  |  Size: 252 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-circle" viewBox="0 0 16 16">
<path d="M1 8a7 7 0 1 0 14 0A7 7 0 0 0 1 8Zm15 0A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM5.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
</svg>

After

Width:  |  Height:  |  Size: 281 B

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-7-square-fill" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2Zm3.37 5.11V4.001h5.308V5.15L7.42 12H6.025l3.317-6.82v-.07H5.369Z"/>
</svg>

After

Width:  |  Height:  |  Size: 288 B

Some files were not shown because too many files have changed in this diff Show More