mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-19 21:30:10 +01:00
Add Author Name and Author Email fields. (Closes: #90)
This commit is contained in:
parent
622195bf16
commit
7f3434ea50
@ -474,6 +474,8 @@ The following sections describe the fields recognised within the file.
|
||||
|
||||
@menu
|
||||
* Categories::
|
||||
* Author Name::
|
||||
* Author Email::
|
||||
* License::
|
||||
* Auto Name::
|
||||
* Name::
|
||||
@ -524,6 +526,28 @@ for older clients to at least see one category.
|
||||
|
||||
This is converted to (@code{<categories>}) in the public index file.
|
||||
|
||||
@node Author Name
|
||||
@section Author Name
|
||||
|
||||
@cindex Author Name
|
||||
|
||||
The name of the author, either full, abbreviated or pseudonym. If
|
||||
present, it should represent the name(s) as published by upstream,
|
||||
e.g. in their copyright or authors file. This can be omitted (or left
|
||||
blank).
|
||||
|
||||
This is converted to (@code{<author>}) in the public index file.
|
||||
|
||||
@node Author Email
|
||||
@section Author Email
|
||||
|
||||
@cindex Author Email
|
||||
|
||||
The e-mail address of the author(s). This can be omitted (or left
|
||||
blank).
|
||||
|
||||
This is converted to (@code{<email>}) in the public index file.
|
||||
|
||||
@node License
|
||||
@section License
|
||||
|
||||
|
@ -62,6 +62,8 @@ app_fields = set([
|
||||
'Provides',
|
||||
'Categories',
|
||||
'License',
|
||||
'Author Name',
|
||||
'Author Email',
|
||||
'Web Site',
|
||||
'Source Code',
|
||||
'Issue Tracker',
|
||||
@ -103,6 +105,8 @@ class App():
|
||||
self.Provides = None
|
||||
self.Categories = ['None']
|
||||
self.License = 'Unknown'
|
||||
self.AuthorName = None
|
||||
self.AuthorEmail = None
|
||||
self.WebSite = ''
|
||||
self.SourceCode = ''
|
||||
self.IssueTracker = ''
|
||||
@ -440,6 +444,10 @@ valuetypes = {
|
||||
r'^http[s]?://', None,
|
||||
["WebSite", "SourceCode", "IssueTracker", "Changelog", "Donate"], []),
|
||||
|
||||
FieldValidator("Email",
|
||||
r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', None,
|
||||
["AuthorEmail"], []),
|
||||
|
||||
FieldValidator("Bitcoin address",
|
||||
r'^[a-zA-Z0-9]{27,34}$', None,
|
||||
["Bitcoin"],
|
||||
@ -1228,6 +1236,8 @@ def write_plaintext_metadata(mf, app, w_comment, w_field, w_build):
|
||||
w_field_nonempty('Provides')
|
||||
w_field_always('Categories')
|
||||
w_field_always('License')
|
||||
w_field_nonempty('Author Name')
|
||||
w_field_nonempty('Author Email')
|
||||
w_field_always('Web Site')
|
||||
w_field_always('Source Code')
|
||||
w_field_always('Issue Tracker')
|
||||
|
@ -103,7 +103,7 @@ def update_wiki(apps, sortedids, apks):
|
||||
requiresroot = 'Yes'
|
||||
else:
|
||||
requiresroot = 'No'
|
||||
wikidata += '{{App|id=%s|name=%s|added=%s|lastupdated=%s|source=%s|tracker=%s|web=%s|changelog=%s|donate=%s|flattr=%s|bitcoin=%s|litecoin=%s|license=%s|root=%s}}\n' % (
|
||||
wikidata += '{{App|id=%s|name=%s|added=%s|lastupdated=%s|source=%s|tracker=%s|web=%s|changelog=%s|donate=%s|flattr=%s|bitcoin=%s|litecoin=%s|license=%s|root=%s|author=%s|email=%s}}\n' % (
|
||||
appid,
|
||||
app.Name,
|
||||
time.strftime('%Y-%m-%d', app.added) if app.added else '',
|
||||
@ -117,7 +117,9 @@ def update_wiki(apps, sortedids, apks):
|
||||
app.Bitcoin,
|
||||
app.Litecoin,
|
||||
app.License,
|
||||
requiresroot)
|
||||
requiresroot,
|
||||
app.AuthorName,
|
||||
app.AuthorEmail)
|
||||
|
||||
if app.Provides:
|
||||
wikidata += "This app provides: %s" % ', '.join(app.Summary.split(','))
|
||||
@ -850,6 +852,8 @@ def make_index(apps, sortedids, apks, repodir, archive, categories):
|
||||
addElement('source', app.SourceCode, doc, apel)
|
||||
addElement('tracker', app.IssueTracker, doc, apel)
|
||||
addElementNonEmpty('changelog', app.Changelog, doc, apel)
|
||||
addElementNonEmpty('author', app.AuthorName, doc, apel)
|
||||
addElementNonEmpty('email', app.AuthorEmail, doc, apel)
|
||||
addElementNonEmpty('donate', app.Donate, doc, apel)
|
||||
addElementNonEmpty('bitcoin', app.Bitcoin, doc, apel)
|
||||
addElementNonEmpty('litecoin', app.Litecoin, doc, apel)
|
||||
|
@ -48,386 +48,390 @@ sS'No Source Since'
|
||||
p24
|
||||
S''
|
||||
p25
|
||||
sS'Repo Type'
|
||||
sS'Author Name'
|
||||
p26
|
||||
S'git'
|
||||
NsS'Repo Type'
|
||||
p27
|
||||
sS'Auto Name'
|
||||
S'git'
|
||||
p28
|
||||
sS'Auto Name'
|
||||
p29
|
||||
g25
|
||||
sS'Categories'
|
||||
p29
|
||||
(lp30
|
||||
p30
|
||||
(lp31
|
||||
S'None'
|
||||
p31
|
||||
aS'Navigation'
|
||||
p32
|
||||
asS'Source Code'
|
||||
aS'Navigation'
|
||||
p33
|
||||
S'https://github.com/osmandapp/Osmand'
|
||||
asS'Source Code'
|
||||
p34
|
||||
sS'added'
|
||||
S'https://github.com/osmandapp/Osmand'
|
||||
p35
|
||||
NsS'Update Check Ignore'
|
||||
sS'added'
|
||||
p36
|
||||
NsS'Name'
|
||||
NsS'Update Check Ignore'
|
||||
p37
|
||||
S'OsmAnd~'
|
||||
NsS'Name'
|
||||
p38
|
||||
sS'License'
|
||||
S'OsmAnd~'
|
||||
p39
|
||||
S'GPLv3'
|
||||
sS'License'
|
||||
p40
|
||||
sS'Changelog'
|
||||
S'GPLv3'
|
||||
p41
|
||||
sS'Changelog'
|
||||
p42
|
||||
g25
|
||||
sS'Update Check Mode'
|
||||
p42
|
||||
S'None'
|
||||
p43
|
||||
sS'Summary'
|
||||
S'None'
|
||||
p44
|
||||
S'Offline/online maps and navigation'
|
||||
sS'Summary'
|
||||
p45
|
||||
sS'Current Version'
|
||||
S'Offline/online maps and navigation'
|
||||
p46
|
||||
S'1.9.5'
|
||||
sS'Current Version'
|
||||
p47
|
||||
sS'Maintainer Notes'
|
||||
S'1.9.5'
|
||||
p48
|
||||
S"\nNo UCMs apply because git never contains actual releases, only pre-releses.\n\nThe build instructions have been moved to a script in the root of the repo,\n'build'. This way it can be updated along with the submodules.\n "
|
||||
sS'Author Email'
|
||||
p49
|
||||
sS'Current Version Code'
|
||||
NsS'Maintainer Notes'
|
||||
p50
|
||||
S'197'
|
||||
S"\nNo UCMs apply because git never contains actual releases, only pre-releses.\n\nThe build instructions have been moved to a script in the root of the repo,\n'build'. This way it can be updated along with the submodules.\n "
|
||||
p51
|
||||
sS'Binaries'
|
||||
sS'Current Version Code'
|
||||
p52
|
||||
NsS'builds'
|
||||
S'197'
|
||||
p53
|
||||
(lp54
|
||||
(dp55
|
||||
sS'Binaries'
|
||||
p54
|
||||
NsS'builds'
|
||||
p55
|
||||
(lp56
|
||||
(dp57
|
||||
S'submodules'
|
||||
p56
|
||||
p58
|
||||
I01
|
||||
sS'vercode'
|
||||
p57
|
||||
S'182'
|
||||
p58
|
||||
sS'forceversion'
|
||||
p59
|
||||
S'182'
|
||||
p60
|
||||
sS'forceversion'
|
||||
p61
|
||||
I00
|
||||
sS'oldsdkloc'
|
||||
p60
|
||||
p62
|
||||
I00
|
||||
sS'gradleprops'
|
||||
p61
|
||||
(lp62
|
||||
sS'kivy'
|
||||
p63
|
||||
(lp64
|
||||
sS'kivy'
|
||||
p65
|
||||
I00
|
||||
sS'patch'
|
||||
p64
|
||||
(lp65
|
||||
sS'scanignore'
|
||||
p66
|
||||
(lp67
|
||||
sS'srclibs'
|
||||
sS'scanignore'
|
||||
p68
|
||||
(lp69
|
||||
sS'encoding'
|
||||
sS'srclibs'
|
||||
p70
|
||||
(lp71
|
||||
sS'encoding'
|
||||
p72
|
||||
NsS'extlibs'
|
||||
p71
|
||||
(lp72
|
||||
sS'init'
|
||||
p73
|
||||
(lp74
|
||||
sS'init'
|
||||
p75
|
||||
g25
|
||||
sS'version'
|
||||
p74
|
||||
S'1.8.2'
|
||||
p75
|
||||
sS'build'
|
||||
p76
|
||||
S'./old-ndk-build.sh && ant -Dsdk.dir="$ANDROID_SDK" -Dndk.dir="$ANDROID_NDK" -DBLACKBERRY_BUILD=false -DBUILD_SUFFIX= -DAPK_NUMBER_VERSION=182 "-DFEATURES=+play_market +gps_status -parking_plugin -blackberry -amazon -route_nav" -DCLEAN_CPP=false -DPACKAGE_TO_BUILT=net.osmand.plus -DAPK_VERSION=1.8.2 -Dnet.osmand.plus= -Dbuild.version=1.8.2 -Dbuild.version.code=182 -Dnativeoff=false "-DversionFeatures=+play_market +gps_status -parking_plugin -blackberry -amazon -route_nav" clean release'
|
||||
S'1.8.2'
|
||||
p77
|
||||
sS'rm'
|
||||
sS'build'
|
||||
p78
|
||||
(lp79
|
||||
sS'subdir'
|
||||
S'./old-ndk-build.sh && ant -Dsdk.dir="$ANDROID_SDK" -Dndk.dir="$ANDROID_NDK" -DBLACKBERRY_BUILD=false -DBUILD_SUFFIX= -DAPK_NUMBER_VERSION=182 "-DFEATURES=+play_market +gps_status -parking_plugin -blackberry -amazon -route_nav" -DCLEAN_CPP=false -DPACKAGE_TO_BUILT=net.osmand.plus -DAPK_VERSION=1.8.2 -Dnet.osmand.plus= -Dbuild.version=1.8.2 -Dbuild.version.code=182 -Dnativeoff=false "-DversionFeatures=+play_market +gps_status -parking_plugin -blackberry -amazon -route_nav" clean release'
|
||||
p79
|
||||
sS'rm'
|
||||
p80
|
||||
S'android/OsmAnd'
|
||||
p81
|
||||
sS'forcevercode'
|
||||
(lp81
|
||||
sS'subdir'
|
||||
p82
|
||||
S'android/OsmAnd'
|
||||
p83
|
||||
sS'forcevercode'
|
||||
p84
|
||||
I00
|
||||
sS'preassemble'
|
||||
p83
|
||||
(lp84
|
||||
sS'update'
|
||||
p85
|
||||
(lp86
|
||||
sS'maven'
|
||||
sS'update'
|
||||
p87
|
||||
(lp88
|
||||
sS'maven'
|
||||
p89
|
||||
I00
|
||||
sS'disable'
|
||||
p88
|
||||
p90
|
||||
I00
|
||||
sS'output'
|
||||
p89
|
||||
S'bin/OsmAnd-release-unsigned.apk'
|
||||
p90
|
||||
sS'scandelete'
|
||||
p91
|
||||
(lp92
|
||||
sS'buildjni'
|
||||
S'bin/OsmAnd-release-unsigned.apk'
|
||||
p92
|
||||
sS'scandelete'
|
||||
p93
|
||||
S'no'
|
||||
p94
|
||||
sS'ndk'
|
||||
(lp94
|
||||
sS'buildjni'
|
||||
p95
|
||||
NsS'target'
|
||||
S'no'
|
||||
p96
|
||||
NsS'antcommands'
|
||||
sS'ndk'
|
||||
p97
|
||||
(lp98
|
||||
sS'gradle'
|
||||
NsS'target'
|
||||
p98
|
||||
NsS'antcommands'
|
||||
p99
|
||||
(lp100
|
||||
sS'prebuild'
|
||||
sS'gradle'
|
||||
p101
|
||||
S'sed -i \'s/"OsmAnd+"/"OsmAnd~"/g\' build.xml'
|
||||
p102
|
||||
sS'novcheck'
|
||||
(lp102
|
||||
sS'prebuild'
|
||||
p103
|
||||
S'sed -i \'s/"OsmAnd+"/"OsmAnd~"/g\' build.xml'
|
||||
p104
|
||||
sS'novcheck'
|
||||
p105
|
||||
I00
|
||||
sS'commit'
|
||||
p104
|
||||
p106
|
||||
S'76ada6c8a08afe69acb755503373ac36328ef665'
|
||||
p105
|
||||
sa(dp106
|
||||
g56
|
||||
I01
|
||||
sg57
|
||||
S'183'
|
||||
p107
|
||||
sa(dp108
|
||||
g58
|
||||
I01
|
||||
sg59
|
||||
I00
|
||||
sg60
|
||||
I00
|
||||
S'183'
|
||||
p109
|
||||
sg61
|
||||
(lp108
|
||||
sg63
|
||||
I00
|
||||
sg64
|
||||
(lp109
|
||||
sg66
|
||||
sg62
|
||||
I00
|
||||
sg63
|
||||
(lp110
|
||||
sg68
|
||||
sg65
|
||||
I00
|
||||
sg66
|
||||
(lp111
|
||||
sg70
|
||||
Nsg71
|
||||
sg68
|
||||
(lp112
|
||||
sg73
|
||||
sg70
|
||||
(lp113
|
||||
sg72
|
||||
Nsg73
|
||||
(lp114
|
||||
sg75
|
||||
g25
|
||||
sg74
|
||||
S'1.8.3'
|
||||
p113
|
||||
sg76
|
||||
S'../../build'
|
||||
p114
|
||||
S'1.8.3'
|
||||
p115
|
||||
sg78
|
||||
(lp115
|
||||
sg80
|
||||
S'android/OsmAnd'
|
||||
S'../../build'
|
||||
p116
|
||||
sg82
|
||||
I00
|
||||
sg83
|
||||
sg80
|
||||
(lp117
|
||||
sg82
|
||||
S'android/OsmAnd'
|
||||
p118
|
||||
sg84
|
||||
I00
|
||||
sg85
|
||||
(lp118
|
||||
(lp119
|
||||
sg87
|
||||
I00
|
||||
sg88
|
||||
I00
|
||||
sg89
|
||||
S'bin/OsmAnd-release-unsigned.apk'
|
||||
p119
|
||||
sg91
|
||||
(lp120
|
||||
sg93
|
||||
S'no'
|
||||
sg89
|
||||
I00
|
||||
sg90
|
||||
I00
|
||||
sg91
|
||||
S'bin/OsmAnd-release-unsigned.apk'
|
||||
p121
|
||||
sg95
|
||||
Nsg96
|
||||
Nsg97
|
||||
sg93
|
||||
(lp122
|
||||
sg99
|
||||
(lp123
|
||||
sg95
|
||||
S'no'
|
||||
p123
|
||||
sg97
|
||||
Nsg98
|
||||
Nsg99
|
||||
(lp124
|
||||
sg101
|
||||
g25
|
||||
(lp125
|
||||
sg103
|
||||
g25
|
||||
sg105
|
||||
I00
|
||||
sg104
|
||||
sg106
|
||||
S'1.8.3'
|
||||
p124
|
||||
sa(dp125
|
||||
g56
|
||||
I01
|
||||
sg57
|
||||
S'196'
|
||||
p126
|
||||
sg59
|
||||
I00
|
||||
sg60
|
||||
I00
|
||||
sg61
|
||||
(lp127
|
||||
sg63
|
||||
I00
|
||||
sg64
|
||||
(lp128
|
||||
sg66
|
||||
(lp129
|
||||
sg68
|
||||
(lp130
|
||||
sg70
|
||||
Nsg71
|
||||
(lp131
|
||||
sg73
|
||||
g25
|
||||
sg74
|
||||
S'1.9.4'
|
||||
p132
|
||||
sg76
|
||||
S'../../build'
|
||||
p133
|
||||
sg78
|
||||
(lp134
|
||||
sg80
|
||||
S'android/OsmAnd'
|
||||
p135
|
||||
sg82
|
||||
I00
|
||||
sg83
|
||||
(lp136
|
||||
sg85
|
||||
(lp137
|
||||
sg87
|
||||
I00
|
||||
sg88
|
||||
I00
|
||||
sg89
|
||||
S'bin/OsmAnd-release-unsigned.apk'
|
||||
p138
|
||||
sg91
|
||||
(lp139
|
||||
sg93
|
||||
S'no'
|
||||
p140
|
||||
sg95
|
||||
S'r10d'
|
||||
p141
|
||||
sg96
|
||||
Nsg97
|
||||
(lp142
|
||||
sg99
|
||||
(lp143
|
||||
sg101
|
||||
g25
|
||||
sg103
|
||||
I00
|
||||
sg104
|
||||
S'1.9.4'
|
||||
p144
|
||||
sa(dp145
|
||||
g56
|
||||
sa(dp127
|
||||
g58
|
||||
I01
|
||||
sg57
|
||||
S'197'
|
||||
p146
|
||||
sg59
|
||||
I00
|
||||
sg60
|
||||
I00
|
||||
S'196'
|
||||
p128
|
||||
sg61
|
||||
(lp147
|
||||
I00
|
||||
sg62
|
||||
I00
|
||||
sg63
|
||||
(lp129
|
||||
sg65
|
||||
I00
|
||||
sg64
|
||||
(lp148
|
||||
sg66
|
||||
(lp149
|
||||
(lp130
|
||||
sg68
|
||||
(lp150
|
||||
(lp131
|
||||
sg70
|
||||
Nsg71
|
||||
(lp151
|
||||
sg73
|
||||
(lp132
|
||||
sg72
|
||||
Nsg73
|
||||
(lp133
|
||||
sg75
|
||||
g25
|
||||
sg74
|
||||
S'1.9.5'
|
||||
p152
|
||||
sg76
|
||||
S'../../build'
|
||||
p153
|
||||
S'1.9.4'
|
||||
p134
|
||||
sg78
|
||||
(lp154
|
||||
S'../../build'
|
||||
p135
|
||||
sg80
|
||||
S'android/OsmAnd'
|
||||
p155
|
||||
(lp136
|
||||
sg82
|
||||
S'android/OsmAnd'
|
||||
p137
|
||||
sg84
|
||||
I00
|
||||
sg83
|
||||
(lp156
|
||||
sg85
|
||||
(lp157
|
||||
(lp138
|
||||
sg87
|
||||
I00
|
||||
sg88
|
||||
I00
|
||||
(lp139
|
||||
sg89
|
||||
S'bin/OsmAnd-release-unsigned.apk'
|
||||
p158
|
||||
sg91
|
||||
(lp159
|
||||
sg93
|
||||
S'no'
|
||||
p160
|
||||
sg95
|
||||
S'r10d'
|
||||
p161
|
||||
sg96
|
||||
Nsg97
|
||||
(lp162
|
||||
sg99
|
||||
(lp163
|
||||
sg101
|
||||
g25
|
||||
sg103
|
||||
I00
|
||||
sg104
|
||||
sg90
|
||||
I00
|
||||
sg91
|
||||
S'bin/OsmAnd-release-unsigned.apk'
|
||||
p140
|
||||
sg93
|
||||
(lp141
|
||||
sg95
|
||||
S'no'
|
||||
p142
|
||||
sg97
|
||||
S'r10d'
|
||||
p143
|
||||
sg98
|
||||
Nsg99
|
||||
(lp144
|
||||
sg101
|
||||
(lp145
|
||||
sg103
|
||||
g25
|
||||
sg105
|
||||
I00
|
||||
sg106
|
||||
S'1.9.4'
|
||||
p146
|
||||
sa(dp147
|
||||
g58
|
||||
I01
|
||||
sg59
|
||||
S'197'
|
||||
p148
|
||||
sg61
|
||||
I00
|
||||
sg62
|
||||
I00
|
||||
sg63
|
||||
(lp149
|
||||
sg65
|
||||
I00
|
||||
sg66
|
||||
(lp150
|
||||
sg68
|
||||
(lp151
|
||||
sg70
|
||||
(lp152
|
||||
sg72
|
||||
Nsg73
|
||||
(lp153
|
||||
sg75
|
||||
g25
|
||||
sg76
|
||||
S'1.9.5'
|
||||
p154
|
||||
sg78
|
||||
S'../../build'
|
||||
p155
|
||||
sg80
|
||||
(lp156
|
||||
sg82
|
||||
S'android/OsmAnd'
|
||||
p157
|
||||
sg84
|
||||
I00
|
||||
sg85
|
||||
(lp158
|
||||
sg87
|
||||
(lp159
|
||||
sg89
|
||||
I00
|
||||
sg90
|
||||
I00
|
||||
sg91
|
||||
S'bin/OsmAnd-release-unsigned.apk'
|
||||
p160
|
||||
sg93
|
||||
(lp161
|
||||
sg95
|
||||
S'no'
|
||||
p162
|
||||
sg97
|
||||
S'r10d'
|
||||
p163
|
||||
sg98
|
||||
Nsg99
|
||||
(lp164
|
||||
sg101
|
||||
(lp165
|
||||
sg103
|
||||
g25
|
||||
sg105
|
||||
I00
|
||||
sg106
|
||||
S'1.9.5'
|
||||
p164
|
||||
sasS'FlattrID'
|
||||
p165
|
||||
NsS'metadatapath'
|
||||
p166
|
||||
S'metadata/net.osmand.plus.xml'
|
||||
sasS'FlattrID'
|
||||
p167
|
||||
sS'Disabled'
|
||||
NsS'metadatapath'
|
||||
p168
|
||||
NsS'Web Site'
|
||||
S'metadata/net.osmand.plus.xml'
|
||||
p169
|
||||
S'http://osmand.net'
|
||||
sS'Disabled'
|
||||
p170
|
||||
sS'Update Check Name'
|
||||
NsS'Web Site'
|
||||
p171
|
||||
NsS'Vercode Operation'
|
||||
S'http://osmand.net'
|
||||
p172
|
||||
NsS'Auto Update Mode'
|
||||
sS'Update Check Name'
|
||||
p173
|
||||
S'None'
|
||||
NsS'Vercode Operation'
|
||||
p174
|
||||
NsS'Auto Update Mode'
|
||||
p175
|
||||
S'None'
|
||||
p176
|
||||
s.
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -280,6 +280,12 @@ class FDroid
|
||||
case "license":
|
||||
$license=$el;
|
||||
break;
|
||||
case "author":
|
||||
$author=$el;
|
||||
break;
|
||||
case "email":
|
||||
$email=$el;
|
||||
break;
|
||||
case "source":
|
||||
$source=$el;
|
||||
break;
|
||||
@ -399,6 +405,11 @@ class FDroid
|
||||
$out.="<p>";
|
||||
if(strlen($web)>0)
|
||||
$out.='<b>Website:</b> <a href="'.$web.'">'.$web.'</a><br />';
|
||||
if(isset($author) && strlen($author)>0)
|
||||
if(isset($email) && strlen($email)>0)
|
||||
$out.='<b>Author(s):</b> <a href="mailto:'.$email.'">'.$author.'</a><br />';
|
||||
else
|
||||
$out.='<b>Author(s):</b> '.$author.'<br />';
|
||||
if(strlen($issues)>0)
|
||||
$out.='<b>Issue Tracker:</b> <a href="'.$issues.'">'.$issues.'</a><br />';
|
||||
if(strlen($source)>0)
|
||||
|
Loading…
Reference in New Issue
Block a user