Browse Source

Merge remote-tracking branch 'upstream/develop' into no-frontend-worker

pull/9755/head
Michael 2 weeks ago
parent
commit
df135c31fe
62 changed files with 304 additions and 14174 deletions
  1. +106
    -0
      CHANGELOG
  2. +4
    -4
      CREDITS.txt
  3. +1
    -1
      VERSION
  4. +5
    -0
      bin/daemon.php
  5. +1
    -1
      boot.php
  6. BIN
      doc/img/editor_frio.png
  7. BIN
      doc/img/editor_vier.png
  8. BIN
      doc/img/vier_icons.png
  9. BIN
      images/article.gif
  10. BIN
      images/b_drop.gif
  11. BIN
      images/b_dropshow.gif
  12. BIN
      images/beer_mug.gif
  13. BIN
      images/camera-icon.gif
  14. BIN
      images/discourse.png
  15. BIN
      images/friendica-404_svg_flexy-o-hare.png
  16. BIN
      images/friendica-404_svg_hare-bottom-light-inside.png
  17. +1
    -240
      images/friendica.svg
  18. BIN
      images/globe.gif
  19. +1
    -57
      images/humane-tech-badge.svg
  20. BIN
      images/larrw.gif
  21. BIN
      images/link-icon.gif
  22. BIN
      images/lock_icon.gif
  23. BIN
      images/pause.gif
  24. BIN
      images/person-300.jpg
  25. BIN
      images/play.gif
  26. BIN
      images/rarrw.gif
  27. BIN
      images/rotator.gif
  28. BIN
      images/smiley-Oo.gif
  29. BIN
      images/smiley-bangheaddesk.gif
  30. BIN
      images/smiley-brokenheart.gif
  31. BIN
      images/smiley-heart.gif
  32. BIN
      images/smiley-shaka.gif
  33. BIN
      images/spencil.gif
  34. BIN
      images/unlock_icon.gif
  35. BIN
      images/youtube_icon.gif
  36. +1
    -162
      spec/dfrn2_contact_confirmation.svg
  37. +1
    -218
      spec/dfrn2_contact_request.svg
  38. +11
    -0
      src/Core/Process.php
  39. +118
    -25
      src/Core/Worker.php
  40. +3
    -0
      src/Model/User.php
  41. +26
    -0
      src/Worker/Cron.php
  42. +10
    -0
      static/defaults.config.php
  43. BIN
      view/theme/duepuntozero/login-bg.gif
  44. +1
    -958
      view/theme/frio/font/open_sans/fonts/Bold/OpenSans-Bold.svg
  45. +1
    -958
      view/theme/frio/font/open_sans/fonts/BoldItalic/OpenSans-BoldItalic.svg
  46. +1
    -958
      view/theme/frio/font/open_sans/fonts/ExtraBold/OpenSans-ExtraBold.svg
  47. +1
    -958
      view/theme/frio/font/open_sans/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg
  48. +1
    -958
      view/theme/frio/font/open_sans/fonts/Italic/OpenSans-Italic.svg
  49. +1
    -958
      view/theme/frio/font/open_sans/fonts/Light/OpenSans-Light.svg
  50. +1
    -958
      view/theme/frio/font/open_sans/fonts/LightItalic/OpenSans-LightItalic.svg
  51. +1
    -958
      view/theme/frio/font/open_sans/fonts/Regular/OpenSans-Regular.svg
  52. +1
    -958
      view/theme/frio/font/open_sans/fonts/Semibold/OpenSans-Semibold.svg
  53. +1
    -958
      view/theme/frio/font/open_sans/fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg
  54. +1
    -288
      view/theme/frio/frameworks/bootstrap/fonts/glyphicons-halflings-regular.svg
  55. +1
    -17
      view/theme/frio/img/friendica-logo.svg
  56. BIN
      view/theme/frio/scheme/plusminus.jpg
  57. +1
    -1463
      view/theme/smoothly/images/icons.svg
  58. BIN
      view/theme/smoothly/images/larrow.gif
  59. BIN
      view/theme/smoothly/images/login-bg.gif
  60. BIN
      view/theme/smoothly/images/rarrow.gif
  61. +1
    -655
      view/theme/vier/font/fontawesome-webfont.svg
  62. +1
    -1463
      view/theme/vier/icons.svg

+ 106
- 0
CHANGELOG View File

@ -1,3 +1,109 @@
Version 2021.03 (unreleased)
Version 2021.01 (2021-01-04)
Friendica Core
Added HU translation
Updates to the translations: DE, IT, RU [translation teams]
Updates to the themes (duepuntozero, frio, vier) [annando, MrPetovan, tobiasd, vinzv]
General Code cleanup [annando, MrPetovan, nupplaphil]
Enhanced the handling of permission sets [annando]
Enhanced the usage of system resources when displaying photos and updating contacts [annando]
Enhanced the database structure [annando, Quix0r]
Enhanced the detection of PeerTube servers [annando]
Enhanced the photo cache [annando]
Enhanced the import of old postings which would otherwise not be imported due their age [annando]
Enhanced the delivery process of ActivityPub content [annando]
Enhanced the performance profiler [annando]
Enhanced the background worker [annando]
Enhanced the handling of blocked authors [MrPetovan]
Enhanced the user management in the admin panel [MrPetovan]
Enhanced the process of expiring postings [annando]
Enhanced the un/follow process of contacts [annando]
Enhanced the handling of HTTP requests [nupplaphil]
Enhanced filter possibilities of contacts [annando]
Enhanced language detection of postings [annando]
Enhanced the admin panel [MrPetovan, tobiasd]
Enhanced the contact suggestions [annando]
Enhanced the community page (filter, tags) [annando]
Enhanced the display of the reason why a posting is displayed in a stream [annando]
Enhanced the forum delivery of postings [redmatrix]
Enhanced PHP8 compatibility [annando]
Enhanced the worker_cooldown mechanism [annando]
Added new options to the remote_self feature [annando]
Added API endpoints for accounts and trends [annando]
Added API endpoints for re-sharing of postings [annando]
Added provider fields to the API [annando]
Added the possibility to map $_SERVER variables during installation [nupplaphil]
Added the possibility to filter account types on the network page [annando]
Added missing Mastodon API endpoints as "unsupported" [annando]
Added a watchdog mode to check if the daemon is running [annando]
Added number of group members to the contact widget [annando]
Added endless scrolling in several places [annando]
Added an option to stay local when clicking on a contact profile [annando]
Added support of ActivityPub relays [annando]
Model\User::getAuthenticationInfo is now available for addons [MrPetovan]
Contact details can only edited for mail and feed contacts [annando]
Fixed some problems during the export of user data [annando]
Fixed various problems with the notification system [MrPetovan]
Fixed a problem with emoticon alt-text interpretation [MrPetovan]
Fixed a problem that caused comments on Tweets being distributed via ActivityPub [annando]
Fixed a problem with the auto-completion when composing comments [MrPetovan]
Fixed an ACL problem while poking contacts [MrPetovan]
Fixed a problem with Mastodon emoticons [MrPetovan]
Fixed a parser problem that caused additional <br> tags [annando]
Fixed escaping of several HTML snippets [MrPetovan]
Fixed a problem with fetching objects by URL [annando]
Friendica Addons
Updated to the translations IT, HU [translation teams]
advancedcontentfilter:
Added examples [hoergen]
blackout:
Improved the wording in the admin interface [urbalazs]
catavatar:
Improved the generation of avatars [annando]
ifttt:
Added support for delayed postings [annando]
mailstream:
Improved code structure [nupplaphil]
Fix case-sensitive check by [nupplaphil]
markdown:
Improved parsing [MrPetovan]
newmemberwidget:
Improved addon description [SpencerDub]
langfilter:
Changed the input to use a slider [MrPetovan]
ldapauth:
Reworked the authentication code [MrPetovan]
libravatar:
Fixed a problem with DNS requests [annando]
Improved the list of available avatars [annando]
phpmailer:
Fixed UTF8 encoding problems [MrPetovan]
rendertime:
Added more information about the "other" things that cost time [annando]
showmore:
Improved handling of the HTML structure of postings [MrPetovan]
showmore_dyn:
Improved user settings, language [MrPetovan]
twitter:
Improved logging [annando]
Improved the twitter_post_hook [MrPetovan]
Improved the posts send to twitter [annando]
Improved the remote_self functionality [annando]
Added support for delayed postings [annando]
Fixed a bug with direct re-shares [MrPetovan]
Closed Issues
2803, 4230, 4486, 4494, 5616, 7393, 7697, 8485, 8533, 8605, 8689,
8796, 8896, 8943, 8950, 9042, 9089, 9127, 9142, 9165, 9235, 9236,
9238, 9249, 9264, 9268, 9276, 9281, 9291, 9296, 9305, 9306, 9315,
9326, 9328, 9329, 9337, 9344, 9348, 9363, 9383, 9385, 9407, 9427,
9430, 9432, 9457, 9461, 9464, 9465, 9480, 9486, 9496, 9508, 9518,
9525, 9538, 9549, 9564, 9568, 9573, 9598, 9611, 9622, 9629, 9630,
9633, 9636, 9639, 9641, 9642, 9662, 9672, 9673, 9678, 9682, 9692,
9712
Version 2020.09-1 (2020-09-24)
Friendica Core:
Updates to the translations: RU [translation teams]

+ 4
- 4
CREDITS.txt View File

@ -35,6 +35,7 @@ Athalbert
aweiher
axelt
balderino
Balázs Úr
Beanow
beardyunixer
Beatriz Vital
@ -133,6 +134,7 @@ julia.domagalska
Julio Cova
Karel
Karolina
Kastal András
Keenan Pepper
Keith Fernie
Klaus Weidenbach
@ -144,11 +146,11 @@ Leberwurscht
Leonard Lausen
Lionel Triay
loma-one
loma1
Lorem Ipsum
Ludovic Grossard
Lynn Stephenson
maase2
Magdalena Gazda
Mai Anh Nguyen
Manuel Pérez Monís
Marcin Klessa
@ -157,7 +159,6 @@ Marcus Müller
Marie Olive
Mariusz Pisz
marmor
Marquis_de_Carabas
Martin Schmitt
Mateusz Mikos
Mats Sjöberg
@ -177,6 +178,7 @@ mpanhans
mytbk
nathilia-peirce
Nicola Spanti
nobody
Olaf Conradi
Oliver
Olivier
@ -225,7 +227,6 @@ Samuli Valavuo
Sandro Santilli
Sebastian Egbers
sella
Sennewood
Seth
Silke Meyer
Simon L'nu
@ -242,7 +243,6 @@ Sveinn í Felli
Sven Anders
Sylke Vicious
Sylvain Lagacé
szymon.filip
Sérgio Lima
Taekus
Tazman DeVille

+ 1
- 1
VERSION View File

@ -1 +1 @@
2020.12-rc
2021.03-dev

+ 5
- 0
bin/daemon.php View File

@ -223,6 +223,11 @@ while (true) {
$sleep = min(1000000, round(log10($arg) * 1000000, 0));
usleep($sleep);
$pid = pcntl_waitpid(-1, $status, WNOHANG);
if ($pid > 0) {
Logger::info('Children quit via pcntl_waitpid', ['pid' => $pid, 'status' => $status]);
}
$timeout = ($seconds >= $wait_interval);
} while (!$timeout && !Worker::IPCJobsExists());

+ 1
- 1
boot.php View File

@ -38,7 +38,7 @@ use Friendica\Util\DateTimeFormat;
define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'Red Hot Poker');
define('FRIENDICA_VERSION', '2020.12-rc');
define('FRIENDICA_VERSION', '2021.03-dev');
define('DFRN_PROTOCOL_VERSION', '2.23');
define('NEW_UPDATE_ROUTINE_VERSION', 1170);

BIN
doc/img/editor_frio.png View File

Before After
Width: 587  |  Height: 288  |  Size: 9.4 KiB Width: 587  |  Height: 288  |  Size: 7.6 KiB

BIN
doc/img/editor_vier.png View File

Before After
Width: 756  |  Height: 291  |  Size: 7.9 KiB Width: 756  |  Height: 291  |  Size: 6.5 KiB

BIN
doc/img/vier_icons.png View File

Before After
Width: 215  |  Height: 26  |  Size: 2.4 KiB Width: 215  |  Height: 26  |  Size: 1.1 KiB

BIN
images/article.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 1.0 KiB Width: 16  |  Height: 16  |  Size: 1.0 KiB

BIN
images/b_drop.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 138 B Width: 16  |  Height: 16  |  Size: 111 B

BIN
images/b_dropshow.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 138 B Width: 16  |  Height: 16  |  Size: 111 B

BIN
images/beer_mug.gif View File

Before After
Width: 19  |  Height: 19  |  Size: 1021 B Width: 19  |  Height: 19  |  Size: 308 B

BIN
images/camera-icon.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 1015 B Width: 16  |  Height: 16  |  Size: 407 B

BIN
images/discourse.png View File

Before After
Width: 235  |  Height: 240  |  Size: 12 KiB Width: 235  |  Height: 240  |  Size: 10 KiB

BIN
images/friendica-404_svg_flexy-o-hare.png View File

Before After
Width: 215  |  Height: 333  |  Size: 14 KiB Width: 215  |  Height: 333  |  Size: 11 KiB

BIN
images/friendica-404_svg_hare-bottom-light-inside.png View File

Before After
Width: 126  |  Height: 189  |  Size: 5.9 KiB Width: 126  |  Height: 189  |  Size: 4.5 KiB

+ 1
- 240
images/friendica.svg View File

@ -1,240 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="96"
height="96"
id="svg2"
version="1.1"
inkscape:version="0.48.0 r9654"
sodipodi:docname="friendica.svg"
inkscape:export-filename="/home/meta/Documents/My random images/friendica.png"
inkscape:export-xdpi="80.552788"
inkscape:export-ydpi="80.552788">
<defs
id="defs4">
<linearGradient
id="highlightgradient">
<stop
id="stop3833"
offset="0"
style="stop-color:#ffffff;stop-opacity:0.74374998;" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3829" />
</linearGradient>
<linearGradient
id="shadowgradient">
<stop
id="stop3833-5"
offset="0"
style="stop-color:#000000;stop-opacity:0.5;" />
<stop
style="stop-color:#818080;stop-opacity:0;"
offset="1"
id="stop3829-9" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#highlightgradient"
id="linearGradient4011"
x1="44.948269"
y1="0"
x2="54.103466"
y2="46.797421"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(1,0.54545455)" />
<linearGradient
inkscape:collect="always"
xlink:href="#shadowgradient"
id="linearGradient4021"
x1="52.016712"
y1="96"
x2="42.867535"
y2="41.837971"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.5,0,48)" />
<filter
inkscape:collect="always"
id="filter4055"
x="-0.03"
width="1.06"
y="-0.12"
height="1.24">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.2"
id="feGaussianBlur4057" />
</filter>
<filter
inkscape:collect="always"
id="filter4059"
x="-0.029877551"
width="1.0597551"
y="-0.122"
height="1.244">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.22"
id="feGaussianBlur4061" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.9132799"
inkscape:cx="53.033009"
inkscape:cy="2.8284271"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
width="256px"
inkscape:snap-global="true"
inkscape:window-width="1680"
inkscape:window-height="1010"
inkscape:window-x="194"
inkscape:window-y="0"
inkscape:window-maximized="0">
<inkscape:grid
type="xygrid"
id="grid2985"
empspacing="3"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="2px"
spacingy="2px" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Colors"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-956.3622)"
style="display:inline">
<path
style="fill:#ffc019;fill-opacity:1;stroke:none"
d="M 16,0 C 7.0091019,0.04308252 0,7.0521845 0,16 0,16 0,57.499123 0,80 0,89.120146 7.0091019,96 16,96 L 32,96 32,70 64,70 63.916016,46.068359 32,46.236328 32,26 64,26 64,0 C 64,0 24,0 16,0 z"
transform="translate(0,956.3622)"
id="rect2993"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccsccccccccc" />
<path
style="fill:#1872a2;fill-opacity:1;stroke:none"
d="m 80,1052.3622 c 8.990898,0 16.086165,-6.966 16,-16 0,0 0,-41.4991 0,-64 0.07767,-9.01639 -7.067354,-16 -16,-16 l -16,0 0,26 -32,0 0,22 32,0 0,22 -32,0 0,26 c 0,0 32,0 48,0 z"
id="rect2993-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccsccccccccc" />
</g>
<g
style="display:inline"
inkscape:label="Lines as original logo"
id="g3997"
inkscape:groupmode="layer">
<path
sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
id="path3999"
d="m 64,0 0,26 -32,0 0,22 m 32,0 0,22 -32,0 0,26"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<rect
ry="16"
rx="16"
y="0"
x="0"
height="96"
width="96"
id="rect4001"
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Lines with center break"
style="display:none">
<path
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 64,0 0,26 -32,0 0,22 32,0 0,22 -32,0 0,26"
id="path3926"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<rect
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect3928"
width="96"
height="96"
x="0"
y="0"
rx="16"
ry="16" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Effects"
style="display:inline">
<rect
style="fill:url(#linearGradient3930);fill-opacity:1;stroke:none"
id="rect3823"
width="96"
height="48.04369"
x="-3.1086245e-15"
y="1.8024861e-14"
ry="15.215644"
rx="15.214664" />
<rect
style="fill:url(#linearGradient3904);fill-opacity:1;stroke:none"
id="rect3823-8"
width="96"
height="47.86721"
x="1.5376101e-14"
y="-96"
ry="15.159752"
rx="15.214664"
transform="scale(1,-1)" />
<rect
style="fill:url(#linearGradient4011);fill-opacity:1;stroke:none;filter:url(#filter4059)"
id="rect4003"
width="98"
height="24"
x="0"
y="0"
rx="15.214664"
ry="8.2994423"
transform="matrix(1.0296115,0,0,1.1963836,-2.901924,-4.7132067)" />
<rect
style="opacity:0.56746030000000003;fill:url(#linearGradient4021);fill-opacity:1;stroke:none;filter:url(#filter4055)"
id="rect4013"
width="96"
height="24"
x="0"
y="72"
rx="14.008356"
ry="12"
transform="matrix(0.9768331,0,0,0.91974646,1.1649641,8.098115)" />
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="svg2" width="96" height="96" version="1.1"><defs id="defs4"><linearGradient id="highlightgradient"><stop id="stop3833" offset="0" style="stop-color:#fff;stop-opacity:.74374998"/><stop style="stop-color:#fff;stop-opacity:0" id="stop3829" offset="1"/></linearGradient><linearGradient id="shadowgradient"><stop id="stop3833-5" offset="0" style="stop-color:#000;stop-opacity:.5"/><stop style="stop-color:#818080;stop-opacity:0" id="stop3829-9" offset="1"/></linearGradient><linearGradient id="linearGradient4011" x1="44.948" x2="54.103" y1="0" y2="46.797" gradientTransform="scale(1,0.54545455)" gradientUnits="userSpaceOnUse" xlink:href="#highlightgradient"/><linearGradient id="linearGradient4021" x1="52.017" x2="42.868" y1="96" y2="41.838" gradientTransform="matrix(1,0,0,0.5,0,48)" gradientUnits="userSpaceOnUse" xlink:href="#shadowgradient"/><filter id="filter4055" width="1.06" height="1.24" x="-.03" y="-.12"><feGaussianBlur id="feGaussianBlur4057" stdDeviation="1.2"/></filter><filter id="filter4059" width="1.06" height="1.244" x="-.03" y="-.122"><feGaussianBlur id="feGaussianBlur4061" stdDeviation="1.22"/></filter></defs><metadata id="metadata7"/><g id="layer1" transform="translate(0,-956.3622)" style="display:inline"><path style="fill:#ffc019;fill-opacity:1;stroke:none" id="rect2993" d="M 16,0 C 7.0091019,0.04308252 0,7.0521845 0,16 0,16 0,57.499123 0,80 0,89.120146 7.0091019,96 16,96 L 32,96 32,70 64,70 63.916016,46.068359 32,46.236328 32,26 64,26 64,0 C 64,0 24,0 16,0 z" transform="translate(0,956.3622)"/><path style="fill:#1872a2;fill-opacity:1;stroke:none" id="rect2993-6" d="m 80,1052.3622 c 8.990898,0 16.086165,-6.966 16,-16 0,0 0,-41.4991 0,-64 0.07767,-9.01639 -7.067354,-16 -16,-16 l -16,0 0,26 -32,0 0,22 32,0 0,22 -32,0 0,26 c 0,0 32,0 48,0 z"/></g><g style="display:inline" id="g3997"><path id="path3999" d="m 64,0 0,26 -32,0 0,22 m 32,0 0,22 -32,0 0,26" style="fill:none;stroke:#000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/><rect id="rect4001" width="96" height="96" x="0" y="0" rx="16" ry="16" style="fill:none;stroke:#000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"/></g><g id="layer3" style="display:none"><path style="fill:none;stroke:#000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path3926" d="m 64,0 0,26 -32,0 0,22 32,0 0,22 -32,0 0,26"/><rect style="fill:none;stroke:#000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="rect3928" width="96" height="96" x="0" y="0" rx="16" ry="16"/></g><g id="layer2" style="display:inline"><rect style="fill:url(#linearGradient3930);fill-opacity:1;stroke:none" id="rect3823" width="96" height="48.044" x="0" y="0" rx="15.215" ry="15.216"/><rect style="fill:url(#linearGradient3904);fill-opacity:1;stroke:none" id="rect3823-8" width="96" height="47.867" x="0" y="-96" rx="15.215" ry="15.16" transform="scale(1,-1)"/><rect style="fill:url(#linearGradient4011);fill-opacity:1;stroke:none;filter:url(#filter4059)" id="rect4003" width="98" height="24" x="0" y="0" rx="15.215" ry="8.299" transform="matrix(1.0296115,0,0,1.1963836,-2.901924,-4.7132067)"/><rect style="opacity:.56746030000000003;fill:url(#linearGradient4021);fill-opacity:1;stroke:none;filter:url(#filter4055)" id="rect4013" width="96" height="24" x="0" y="72" rx="14.008" ry="12" transform="matrix(0.9768331,0,0,0.91974646,1.1649641,8.098115)"/></g></svg>

BIN
images/globe.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 1.0 KiB Width: 16  |  Height: 16  |  Size: 625 B

+ 1
- 57
images/humane-tech-badge.svg
File diff suppressed because it is too large
View File


BIN
images/larrw.gif View File

Before After
Width: 31  |  Height: 31  |  Size: 1004 B Width: 31  |  Height: 31  |  Size: 211 B

BIN
images/link-icon.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 145 B Width: 16  |  Height: 16  |  Size: 121 B

BIN
images/lock_icon.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 932 B Width: 16  |  Height: 16  |  Size: 229 B

BIN
images/pause.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 866 B Width: 16  |  Height: 16  |  Size: 123 B

BIN
images/person-300.jpg View File

Before After
Width: 300  |  Height: 300  |  Size: 11 KiB Width: 300  |  Height: 300  |  Size: 11 KiB

BIN
images/play.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 912 B Width: 16  |  Height: 16  |  Size: 315 B

BIN
images/rarrw.gif View File

Before After
Width: 31  |  Height: 31  |  Size: 999 B Width: 31  |  Height: 31  |  Size: 207 B

BIN
images/rotator.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 826 B Width: 16  |  Height: 16  |  Size: 822 B

BIN
images/smiley-Oo.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 1003 B Width: 16  |  Height: 16  |  Size: 916 B

BIN
images/smiley-bangheaddesk.gif View File

Before After
Width: 34  |  Height: 30  |  Size: 885 B Width: 34  |  Height: 30  |  Size: 868 B

BIN
images/smiley-brokenheart.gif View File

Before After
Width: 18  |  Height: 18  |  Size: 598 B Width: 18  |  Height: 18  |  Size: 392 B

BIN
images/smiley-heart.gif View File

Before After
Width: 18  |  Height: 18  |  Size: 577 B Width: 18  |  Height: 18  |  Size: 373 B

BIN
images/smiley-shaka.gif View File

Before After
Width: 33  |  Height: 17  |  Size: 2.4 KiB Width: 33  |  Height: 17  |  Size: 2.3 KiB

BIN
images/spencil.gif View File

Before After
Width: 12  |  Height: 12  |  Size: 497 B Width: 12  |  Height: 12  |  Size: 297 B

BIN
images/unlock_icon.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 938 B Width: 16  |  Height: 16  |  Size: 235 B

BIN
images/youtube_icon.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 924 B Width: 16  |  Height: 16  |  Size: 221 B

+ 1
- 162
spec/dfrn2_contact_confirmation.svg
File diff suppressed because it is too large
View File


+ 1
- 218
spec/dfrn2_contact_request.svg
File diff suppressed because it is too large
View File


+ 11
- 0
src/Core/Process.php View File

@ -77,6 +77,17 @@ class Process
$this->pid = $pid;
}
/**
* Set the process id
*
* @param integer $pid
* @return void
*/
public function setPid(int $pid)
{
$this->pid = $pid;
}
/**
* Log active processes into the "process" table
*/

+ 118
- 25
src/Core/Worker.php View File

@ -50,6 +50,7 @@ class Worker
private static $lock_duration = 0;
private static $last_update;
private static $state;
private static $daemon_mode = null;
/**
* Processes the tasks that are in the workerqueue table
@ -96,6 +97,10 @@ class Worker
// We fetch the next queue entry that is about to be executed
while ($r = self::workerProcess()) {
if (self::IPCJobsExists(getmypid())) {
self::IPCDeleteJobState(getmypid());
}
// Don't refetch when a worker fetches tasks for multiple workers
$refetched = DI::config()->get('system', 'worker_multiple_fetch');
foreach ($r as $entry) {
@ -146,13 +151,17 @@ class Worker
if (time() > ($starttime + (DI::config()->get('system', 'cron_interval') * 60))) {
Logger::info('Process lifetime reached, respawning.');
self::unclaimProcess();
self::spawnWorker();
if (self::isDaemonMode()) {
self::IPCSetJobState(true);
} else {
self::spawnWorker();
}
return;
}
}
// Cleaning up. Possibly not needed, but it doesn't harm anything.
if (DI::config()->get('system', 'worker_daemon_mode', false)) {
if (self::isDaemonMode()) {
self::IPCSetJobState(false);
}
Logger::info("Couldn't select a workerqueue entry, quitting process", ['pid' => getmypid()]);
@ -190,7 +199,7 @@ class Worker
Logger::warning('Maximum processes reached, quitting.');
return false;
}
return true;
}
@ -412,6 +421,12 @@ class Worker
{
$a = DI::app();
$cooldown = DI::config()->get("system", "worker_cooldown", 0);
if ($cooldown > 0) {
Logger::info('Pre execution cooldown.', ['priority' => $queue["priority"], 'id' => $queue["id"], 'cooldown' => $cooldown]);
sleep($cooldown);
}
Logger::enableWorker($funcname);
Logger::info("Process start.", ['priority' => $queue["priority"], 'id' => $queue["id"]]);
@ -484,10 +499,8 @@ class Worker
DI::profiler()->saveLog(DI::logger(), "ID " . $queue["id"] . ": " . $funcname);
$cooldown = DI::config()->get("system", "worker_cooldown", 0);
if ($cooldown > 0) {
Logger::info('Cooldown.', ['priority' => $queue["priority"], 'id' => $queue["id"], 'cooldown' => $cooldown]);
Logger::info('Post execution cooldown.', ['priority' => $queue["priority"], 'id' => $queue["id"], 'cooldown' => $cooldown]);
sleep($cooldown);
}
}
@ -771,7 +784,7 @@ class Worker
// Are there fewer workers running as possible? Then fork a new one.
if (!DI::config()->get("system", "worker_dont_fork", false) && ($queues > ($active + 1)) && self::entriesExists()) {
Logger::info("There are fewer workers as possible, fork a new worker.", ['active' => $active, 'queues' => $queues]);
if (DI::config()->get('system', 'worker_daemon_mode', false)) {
if (self::isDaemonMode()) {
self::IPCSetJobState(true);
} else {
self::spawnWorker();
@ -780,7 +793,7 @@ class Worker
}
// if there are too much worker, we don't spawn a new one.
if (DI::config()->get('system', 'worker_daemon_mode', false) && ($active > $queues)) {
if (self::isDaemonMode() && ($active > $queues)) {
self::IPCSetJobState(false);
}
@ -1100,6 +1113,11 @@ class Worker
*/
private static function forkProcess(bool $do_cron)
{
if (DI::process()->isMinMemoryReached()) {
Logger::warning('Memory limit reached - quitting');
return;
}
// Children inherit their parent's database connection.
// To avoid problems we disconnect and connect both parent and child
DBA::disconnect();
@ -1111,22 +1129,40 @@ class Worker
} elseif ($pid) {
// The parent process continues here
DBA::connect();
Logger::info('Spawned new worker', ['cron' => $do_cron, 'pid' => $pid]);
self::IPCSetJobState(true, $pid);
Logger::info('Spawned new worker', ['pid' => $pid]);
$cycles = 0;
while (self::IPCJobsExists($pid) && (++$cycles < 100)) {
usleep(10000);
}
Logger::info('Spawned worker is ready', ['pid' => $pid, 'wait_cycles' => $cycles]);
return;
}
// We now are in the new worker
$pid = getmypid();
DBA::connect();
Logger::info('Worker spawned', ['cron' => $do_cron, 'pid' => getmypid()]);
/// @todo Reinitialize the logger to set a new process_id and uid
DI::process()->setPid($pid);
DI::process()->start();
$cycles = 0;
while (!self::IPCJobsExists($pid) && (++$cycles < 100)) {
usleep(10000);
}
Logger::info('Worker spawned', ['pid' => $pid, 'wait_cycles' => $cycles]);
self::processQueue($do_cron);
self::unclaimProcess();
self::IPCSetJobState(false, $pid);
DI::process()->end();
Logger::info('Worker ended', ['cron' => $do_cron, 'pid' => getmypid()]);
Logger::info('Worker ended', ['pid' => $pid]);
exit();
}
@ -1139,18 +1175,14 @@ class Worker
*/
public static function spawnWorker($do_cron = false)
{
// Worker and daemon are started from the command line.
// This means that this is executed by a PHP interpreter without runtime limitations
if (function_exists('pcntl_fork') && in_array(DI::mode()->getExecutor(), [Mode::DAEMON, Mode::WORKER])) {
if (self::isDaemonMode() && DI::config()->get('system', 'worker_fork')) {
self::forkProcess($do_cron);
} else {
$process = new Core\Process(DI::logger(), DI::mode(), DI::config(),
DI::modelProcess(), DI::app()->getBasePath(), getmypid());
$process->run('bin/worker.php', ['no_cron' => !$do_cron]);
}
// after spawning we have to remove the flag.
if (DI::config()->get('system', 'worker_daemon_mode', false)) {
if (self::isDaemonMode()) {
self::IPCSetJobState(false);
}
}
@ -1242,7 +1274,7 @@ class Worker
}
// Set the IPC flag to ensure an immediate process execution via daemon
if (DI::config()->get('system', 'worker_daemon_mode', false)) {
if (self::isDaemonMode()) {
self::IPCSetJobState(true);
}
@ -1267,7 +1299,7 @@ class Worker
}
// Quit on daemon mode
if (DI::config()->get('system', 'worker_daemon_mode', false)) {
if (self::isDaemonMode()) {
return $added;
}
@ -1361,12 +1393,27 @@ class Worker
* Set the flag if some job is waiting
*
* @param boolean $jobs Is there a waiting job?
* @param int $key Key number
* @throws \Exception
*/
public static function IPCSetJobState($jobs)
public static function IPCSetJobState(bool $jobs, int $key = 0)
{
$stamp = (float)microtime(true);
DBA::update('worker-ipc', ['jobs' => $jobs], ['key' => 1], true);
DBA::replace('worker-ipc', ['jobs' => $jobs, 'key' => $key]);
self::$db_duration += (microtime(true) - $stamp);
self::$db_duration_write += (microtime(true) - $stamp);
}
/**
* Delete a key entry
*
* @param int $key Key number
* @throws \Exception
*/
public static function IPCDeleteJobState(int $key)
{
$stamp = (float)microtime(true);
DBA::delete('worker-ipc', ['key' => $key]);
self::$db_duration += (microtime(true) - $stamp);
self::$db_duration_write += (microtime(true) - $stamp);
}
@ -1374,13 +1421,14 @@ class Worker
/**
* Checks if some worker job waits to be executed
*
* @param int $key Key number
* @return bool
* @throws \Exception
*/
public static function IPCJobsExists()
public static function IPCJobsExists(int $key = 0)
{
$stamp = (float)microtime(true);
$row = DBA::selectFirst('worker-ipc', ['jobs'], ['key' => 1]);
$row = DBA::selectFirst('worker-ipc', ['jobs'], ['key' => $key]);
self::$db_duration += (microtime(true) - $stamp);
// When we don't have a row, no job is running
@ -1391,6 +1439,51 @@ class Worker
return (bool)$row['jobs'];
}
/**
* Checks if the worker is running in the daemon mode.
*
* @return boolean
*/
public static function isDaemonMode()
{
if (!is_null(self::$daemon_mode)) {
return self::$daemon_mode;
}
if (DI::mode()->getExecutor() == Mode::DAEMON) {
return true;
}
$daemon_mode = DI::config()->get('system', 'worker_daemon_mode', false, true);
if ($daemon_mode) {
return $daemon_mode;
}
if (!function_exists('pcntl_fork')) {
self::$daemon_mode = false;
return false;
}
$pidfile = DI::config()->get('system', 'pidfile');
if (empty($pidfile)) {
// No pid file, no daemon
self::$daemon_mode = false;
return false;
}
if (!is_readable($pidfile)) {
// No pid file. We assume that the daemon had been intentionally stopped.
self::$daemon_mode = false;
return false;
}
$pid = intval(file_get_contents($pidfile));
$running = posix_kill($pid, 0);
self::$daemon_mode = $running;
return $running;
}
/**
* Test if the daemon is running. If not, it will be started
*

+ 3
- 0
src/Model/User.php View File

@ -1159,6 +1159,9 @@ class User
return false;
}
// Delete the avatar
Photo::delete(['uid' => $register['uid']]);
return DBA::delete('user', ['uid' => $register['uid']]) &&
Register::deleteByHash($register['hash']);
}

+ 26
- 0
src/Worker/Cron.php View File

@ -24,6 +24,7 @@ namespace Friendica\Worker;
use Friendica\Core\Hook;
use Friendica\Core\Logger;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Tag;
@ -54,6 +55,10 @@ class Cron
copy($basepath . '/.htaccess-dist', $basepath . '/.htaccess');
}
if (DI::config()->get('system', 'delete_sleeping_processes')) {
self::deleteSleepingProcesses();
}
// Fork the cron jobs in separate parts to avoid problems when one of them is crashing
Hook::fork(PRIORITY_MEDIUM, 'cron');
@ -137,4 +142,25 @@ class Cron
DI::config()->set('system', 'last_cron', time());
}
/**
* Kill sleeping database processes
*
* @return void
*/
private static function deleteSleepingProcesses()
{
Logger::info('Looking for sleeping processes');
$processes = DBA::p("SHOW FULL PROCESSLIST");
while ($process = DBA::fetch($processes)) {
if (($process['Command'] != 'Sleep') || ($process['Time'] < 300) || ($process['db'] != DBA::databaseName())) {
continue;
}
DBA::e("KILL ?", $process['Id']);
Logger::notice('Killed sleeping process', ['id' => $process['Id']]);
}
DBA::close($processes);
}
}

+ 10
- 0
static/defaults.config.php View File

@ -194,6 +194,10 @@ return [
// If it is not running and hadn't been terminated normally, it will be started automatically.
'daemon_watchdog' => false,
// delete_sleeping_processes (Boolean)
// Periodically delete waiting database processes.
'delete_sleeping_processes' => false,
// diaspora_test (Boolean)
// For development only. Disables the message transfer.
'diaspora_test' => false,
@ -534,6 +538,11 @@ return [
// Number of worker tasks that are fetched in a single query.
'worker_fetch_limit' => 1,
// worker_fork (Boolean)
// Experimental setting. Use pcntl_fork to spawn a new worker process.
// Does not work when "worker_multiple_fetch" is enabled (Needs more testing)
'worker_fork' => false,
// worker_jpm (Boolean)
// If enabled, it prints out the jobs per minute.
'worker_jpm' => false,
@ -551,6 +560,7 @@ return [
// worker_multiple_fetch (Boolean)
// When activated, the worker fetches jobs for multiple workers (not only for itself).
// This is an experimental setting without knowing the performance impact.
// Does not work when "worker_fork" is enabled (Needs more testing)
'worker_multiple_fetch' => false,
// worker_defer_limit (Integer)

BIN
view/theme/duepuntozero/login-bg.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 237 B Width: 16  |  Height: 16  |  Size: 229 B

+ 1
- 958
view/theme/frio/font/open_sans/fonts/Bold/OpenSans-Bold.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/BoldItalic/OpenSans-BoldItalic.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/ExtraBold/OpenSans-ExtraBold.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/Italic/OpenSans-Italic.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/Light/OpenSans-Light.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/LightItalic/OpenSans-LightItalic.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/Regular/OpenSans-Regular.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/Semibold/OpenSans-Semibold.svg
File diff suppressed because it is too large
View File


+ 1
- 958
view/theme/frio/font/open_sans/fonts/SemiboldItalic/OpenSans-SemiboldItalic.svg
File diff suppressed because it is too large
View File


+ 1
- 288
view/theme/frio/frameworks/bootstrap/fonts/glyphicons-halflings-regular.svg
File diff suppressed because it is too large
View File


+ 1
- 17
view/theme/frio/img/friendica-logo.svg View File

@ -1,17 +1 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<mask id="logo_mask" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox"> >
<path
d="M 3.373397,24.925245 3.1938175,24.864033 C 2.9783852,24.790602 2.7764427,24.711452 2.576333,24.622018 2.1356898,24.425082 1.5892046,24.079338 1.3712245,23.859582 c -0.2590846,-0.261194 -1.09281192,-1.09343 -1.38119999,-1.57298 0,0 0.04301756,-13.080693 0.03682785,-18.90953 C 0.18855639,2.6656386 0.64742664,2.0535848 0.99775771,1.5652652 1.6072296,0.97025411 2.5701313,0.19769558 2.9678895,0.09950949 c 0,0 12.9137435,-0.01484001 18.7039335,-0.05867517 0.847454,0.33698487 1.568727,0.88542472 2.11547,1.39213058 0.494844,0.4061206 0.731319,1.0034068 0.991156,1.5173636 0.08059,6.4402732 0.282614,12.9244675 0.19849,18.0961945 -0.343259,1.893337 -1.391611,3.042648 -2.974927,3.719347 -0.09256,0.02206 -0.277975,0.06698 -0.412038,0.09983 -6.265977,0.251978 -12.772934,0.154464 -18.216577,0.05954 z m 17.765379,-1.071592 c 0.761914,-0.07648 1.302942,-0.483573 1.80374,-0.883622 0.367357,-0.361514 0.877684,-0.872658 0.975573,-1.28968 0.28152,-6.286673 -0.0046,-12.5361934 -0.03236,-18.283829 C 23.789738,3.1265829 23.574866,2.7623056 23.332691,2.459023 22.762957,1.7080191 21.824771,1.336704 21.096224,1.0480279 19.421104,0.93184658 18.373471,0.94587766 16.992164,0.9257547 c -6.01e-4,2.2079105 0.0093,4.417548 -0.0085,6.6245631 -2.573444,0.038646 -5.159205,0.044099 -7.9906245,0.076741 -0.00473,1.7025313 -0.00312,3.0000532 -0.00312,4.8341202 2.6428485,0.01943 5.2871665,0.04325 7.9284675,0.10321 0.08164,1.990898 0.123956,3.951248 0.02955,5.922013 -2.797791,0.05135 -4.983297,0.0798 -7.9548925,0.12738 -0.00163,1.883617 -0.014112,3.365037 0.012505,5.357484 4.2382165,-0.0779 8.4402525,0.04732 12.1332265,-0.117613 z"
style="fill-rule:evenodd;clip-rule:evenodd;fill:#ffffff;" />
</mask>
</defs>
<g id="layer1">
<path
d="M 3.373397,24.925245 3.1938175,24.864033 C 2.9783852,24.790602 2.7764427,24.711452 2.576333,24.622018 2.1356898,24.425082 1.5892046,24.079338 1.3712245,23.859582 c -0.2590846,-0.261194 -1.09281192,-1.09343 -1.38119999,-1.57298 0,0 0.04301756,-13.080693 0.03682785,-18.90953 C 0.18855639,2.6656386 0.64742664,2.0535848 0.99775771,1.5652652 1.6072296,0.97025411 2.5701313,0.19769558 2.9678895,0.09950949 c 0,0 12.9137435,-0.01484001 18.7039335,-0.05867517 0.847454,0.33698487 1.568727,0.88542472 2.11547,1.39213058 0.494844,0.4061206 0.731319,1.0034068 0.991156,1.5173636 0.08059,6.4402732 0.282614,12.9244675 0.19849,18.0961945 -0.343259,1.893337 -1.391611,3.042648 -2.974927,3.719347 -0.09256,0.02206 -0.277975,0.06698 -0.412038,0.09983 -6.265977,0.251978 -12.772934,0.154464 -18.216577,0.05954 z m 17.765379,-1.071592 c 0.761914,-0.07648 1.302942,-0.483573 1.80374,-0.883622 0.367357,-0.361514 0.877684,-0.872658 0.975573,-1.28968 0.28152,-6.286673 -0.0046,-12.5361934 -0.03236,-18.283829 C 23.789738,3.1265829 23.574866,2.7623056 23.332691,2.459023 22.762957,1.7080191 21.824771,1.336704 21.096224,1.0480279 19.421104,0.93184658 18.373471,0.94587766 16.992164,0.9257547 c -6.01e-4,2.2079105 0.0093,4.417548 -0.0085,6.6245631 -2.573444,0.038646 -5.159205,0.044099 -7.9906245,0.076741 -0.00473,1.7025313 -0.00312,3.0000532 -0.00312,4.8341202 2.6428485,0.01943 5.2871665,0.04325 7.9284675,0.10321 0.08164,1.990898 0.123956,3.951248 0.02955,5.922013 -2.797791,0.05135 -4.983297,0.0798 -7.9548925,0.12738 -0.00163,1.883617 -0.014112,3.365037 0.012505,5.357484 4.2382165,-0.0779 8.4402525,0.04732 12.1332265,-0.117613 z"
id="path3425"
style="fill:#000000" />
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"><defs><mask id="logo_mask" maskContentUnits="objectBoundingBox" maskUnits="objectBoundingBox">&gt;<path d="M 3.373397,24.925245 3.1938175,24.864033 C 2.9783852,24.790602 2.7764427,24.711452 2.576333,24.622018 2.1356898,24.425082 1.5892046,24.079338 1.3712245,23.859582 c -0.2590846,-0.261194 -1.09281192,-1.09343 -1.38119999,-1.57298 0,0 0.04301756,-13.080693 0.03682785,-18.90953 C 0.18855639,2.6656386 0.64742664,2.0535848 0.99775771,1.5652652 1.6072296,0.97025411 2.5701313,0.19769558 2.9678895,0.09950949 c 0,0 12.9137435,-0.01484001 18.7039335,-0.05867517 0.847454,0.33698487 1.568727,0.88542472 2.11547,1.39213058 0.494844,0.4061206 0.731319,1.0034068 0.991156,1.5173636 0.08059,6.4402732 0.282614,12.9244675 0.19849,18.0961945 -0.343259,1.893337 -1.391611,3.042648 -2.974927,3.719347 -0.09256,0.02206 -0.277975,0.06698 -0.412038,0.09983 -6.265977,0.251978 -12.772934,0.154464 -18.216577,0.05954 z m 17.765379,-1.071592 c 0.761914,-0.07648 1.302942,-0.483573 1.80374,-0.883622 0.367357,-0.361514 0.877684,-0.872658 0.975573,-1.28968 0.28152,-6.286673 -0.0046,-12.5361934 -0.03236,-18.283829 C 23.789738,3.1265829 23.574866,2.7623056 23.332691,2.459023 22.762957,1.7080191 21.824771,1.336704 21.096224,1.0480279 19.421104,0.93184658 18.373471,0.94587766 16.992164,0.9257547 c -6.01e-4,2.2079105 0.0093,4.417548 -0.0085,6.6245631 -2.573444,0.038646 -5.159205,0.044099 -7.9906245,0.076741 -0.00473,1.7025313 -0.00312,3.0000532 -0.00312,4.8341202 2.6428485,0.01943 5.2871665,0.04325 7.9284675,0.10321 0.08164,1.990898 0.123956,3.951248 0.02955,5.922013 -2.797791,0.05135 -4.983297,0.0798 -7.9548925,0.12738 -0.00163,1.883617 -0.014112,3.365037 0.012505,5.357484 4.2382165,-0.0779 8.4402525,0.04732 12.1332265,-0.117613 z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/></mask></defs><g id="layer1"><path id="path3425" d="M 3.373397,24.925245 3.1938175,24.864033 C 2.9783852,24.790602 2.7764427,24.711452 2.576333,24.622018 2.1356898,24.425082 1.5892046,24.079338 1.3712245,23.859582 c -0.2590846,-0.261194 -1.09281192,-1.09343 -1.38119999,-1.57298 0,0 0.04301756,-13.080693 0.03682785,-18.90953 C 0.18855639,2.6656386 0.64742664,2.0535848 0.99775771,1.5652652 1.6072296,0.97025411 2.5701313,0.19769558 2.9678895,0.09950949 c 0,0 12.9137435,-0.01484001 18.7039335,-0.05867517 0.847454,0.33698487 1.568727,0.88542472 2.11547,1.39213058 0.494844,0.4061206 0.731319,1.0034068 0.991156,1.5173636 0.08059,6.4402732 0.282614,12.9244675 0.19849,18.0961945 -0.343259,1.893337 -1.391611,3.042648 -2.974927,3.719347 -0.09256,0.02206 -0.277975,0.06698 -0.412038,0.09983 -6.265977,0.251978 -12.772934,0.154464 -18.216577,0.05954 z m 17.765379,-1.071592 c 0.761914,-0.07648 1.302942,-0.483573 1.80374,-0.883622 0.367357,-0.361514 0.877684,-0.872658 0.975573,-1.28968 0.28152,-6.286673 -0.0046,-12.5361934 -0.03236,-18.283829 C 23.789738,3.1265829 23.574866,2.7623056 23.332691,2.459023 22.762957,1.7080191 21.824771,1.336704 21.096224,1.0480279 19.421104,0.93184658 18.373471,0.94587766 16.992164,0.9257547 c -6.01e-4,2.2079105 0.0093,4.417548 -0.0085,6.6245631 -2.573444,0.038646 -5.159205,0.044099 -7.9906245,0.076741 -0.00473,1.7025313 -0.00312,3.0000532 -0.00312,4.8341202 2.6428485,0.01943 5.2871665,0.04325 7.9284675,0.10321 0.08164,1.990898 0.123956,3.951248 0.02955,5.922013 -2.797791,0.05135 -4.983297,0.0798 -7.9548925,0.12738 -0.00163,1.883617 -0.014112,3.365037 0.012505,5.357484 4.2382165,-0.0779 8.4402525,0.04732 12.1332265,-0.117613 z" style="fill:#000"/></g></svg>

BIN
view/theme/frio/scheme/plusminus.jpg View File

Before After
Width: 640  |  Height: 306  |  Size: 22 KiB Width: 640  |  Height: 306  |  Size: 22 KiB

+ 1
- 1463
view/theme/smoothly/images/icons.svg
File diff suppressed because it is too large
View File


BIN
view/theme/smoothly/images/larrow.gif View File

Before After
Width: 30  |  Height: 26  |  Size: 995 B Width: 30  |  Height: 26  |  Size: 389 B

BIN
view/theme/smoothly/images/login-bg.gif View File

Before After
Width: 16  |  Height: 16  |  Size: 237 B Width: 16  |  Height: 16  |  Size: 229 B

BIN
view/theme/smoothly/images/rarrow.gif View File

Before After
Width: 30  |  Height: 26  |  Size: 995 B Width: 30  |  Height: 26  |  Size: 389 B

+ 1
- 655
view/theme/vier/font/fontawesome-webfont.svg
File diff suppressed because it is too large
View File


+ 1
- 1463
view/theme/vier/icons.svg
File diff suppressed because it is too large
View File


Loading…
Cancel
Save