diff --git a/lib/KD2/Graphics/SVG/Avatar.php b/lib/KD2/Graphics/SVG/Avatar.php
new file mode 100644
index 0000000..08cae95
--- /dev/null
+++ b/lib/KD2/Graphics/SVG/Avatar.php
@@ -0,0 +1,166 @@
+= 128) ? '#000000' : '#FFFFFF';
+ }
+
+ static public function beam(string $name, array $options = []): string
+ {
+ $colors = $options['colors'] ?? ['#0c9', '#9c0', '#6f0'];
+ $w = intval($options['size'] ?? 36);
+ $options['square'] ??= false;
+
+ $size = 36;
+ $numFromName = self::hashCode($name);
+ $range = count($colors);
+ $wrapperColor = self::getRandomColor($numFromName, $colors, $range);
+ $preTranslateX = self::getUnit($numFromName, 10, 1);
+ $wrapperTranslateX = $preTranslateX < 5 ? $preTranslateX + $size / 9 : $preTranslateX;
+ $preTranslateY = self::getUnit($numFromName, 10, 2);
+ $wrapperTranslateY = $preTranslateY < 5 ? $preTranslateY + $size / 9 : $preTranslateY;
+
+ $faceColor = self::getContrast($wrapperColor);
+ $backgroundColor = self::getRandomColor($numFromName + 13, $colors, $range);
+ $wrapperRotate = self::getUnit($numFromName, 360);
+ $wrapperScale = 1 + self::getUnit($numFromName, intval($size / 12)) / 10;
+ $isMouthOpen = self::getBoolean($numFromName, 2);
+ $isCircle = self::getBoolean($numFromName, 1);
+ $eyeSpread = self::getUnit($numFromName, 5);
+ $mouthSpread = self::getUnit($numFromName, 3);
+ $faceRotate = self::getUnit($numFromName, 10, 3);
+ $faceTranslateX = $wrapperTranslateX > $size / 6 ? $wrapperTranslateX / 2 : self::getUnit($numFromName, 6, 1);
+ $faceTranslateY = $wrapperTranslateY > $size / 6 ? $wrapperTranslateY / 2 : self::getUnit($numFromName, 5, 2);
+
+ $maskID = 'mask-' . md5(random_bytes(8));
+
+ $rx1 = $options['square'] ? 0 : $size * 2;
+ $rx2 = $isCircle ? $size : $size / 6;
+ $rx3 = 1 + self::getUnit($numFromName, 6, 2);
+ $half_size = $size / 2;
+ $spread = 22 + $mouthSpread;
+
+ if (!$isMouthOpen) {
+ $mouth = "";
+ }
+ else {
+ $mouth = "";
+ }
+
+ $x1 = 14 - $eyeSpread;
+ $x2 = 20 + $eyeSpread;
+
+ return <<
+
+
+
+
+
+
+
+ {$mouth}
+
+
+
+
+
+EOF;
+ }
+}
diff --git a/lib/KaraDAV/NextCloud.php b/lib/KaraDAV/NextCloud.php
index 8815333..feed3fa 100644
--- a/lib/KaraDAV/NextCloud.php
+++ b/lib/KaraDAV/NextCloud.php
@@ -4,6 +4,7 @@ namespace KaraDAV;
use KD2\WebDAV\NextCloud as WebDAV_NextCloud;
use KD2\WebDAV\Exception as WebDAV_Exception;
+use KD2\Graphics\SVG\Avatar;
class NextCloud extends WebDAV_NextCloud
{
@@ -187,4 +188,9 @@ class NextCloud extends WebDAV_NextCloud
return ['created' => !$exists, 'etag' => md5(filemtime($target) . filesize($target))];
}
+ protected function nc_avatar(): void
+ {
+ header('Content-Type: image/svg+xml; charset=utf-8');
+ echo Avatar::beam($_SERVER['REQUEST_URI'] ?? '', ['colors' => ['#009', '#ccf', '#9cf']]);
+ }
}
diff --git a/lib/KaraDAV/Storage.php b/lib/KaraDAV/Storage.php
index c71c62e..f6f7546 100644
--- a/lib/KaraDAV/Storage.php
+++ b/lib/KaraDAV/Storage.php
@@ -649,7 +649,7 @@ class Storage extends AbstractStorage implements TrashInterface
return null;
}
- $path = $this->users->current()->path . $uri;
+ $path = $user->path . $uri;
if (!file_exists($path)) {
return null;
@@ -662,7 +662,7 @@ class Storage extends AbstractStorage implements TrashInterface
WOPI::PROP_READ_ONLY => $readonly,
WOPI::PROP_USER_NAME => $user->login,
WOPI::PROP_USER_ID => md5($user->login),
- WOPI::PROP_USER_AVATAR => null,
+ WOPI::PROP_USER_AVATAR => $user->avatar_url,
];
}
diff --git a/lib/KaraDAV/Users.php b/lib/KaraDAV/Users.php
index 6ea3813..7109147 100644
--- a/lib/KaraDAV/Users.php
+++ b/lib/KaraDAV/Users.php
@@ -80,6 +80,7 @@ class Users
$user->path = rtrim(realpath($user->path), '/') . '/';
$user->dav_url = WWW_URL . 'files/' . $user->login . '/';
+ $user->avatar_url = WWW_URL . 'avatars/' . substr(md5($user->login), 0, 16);
}
return $user;
diff --git a/www/index.php b/www/index.php
index d25d4f2..3afd37a 100644
--- a/www/index.php
+++ b/www/index.php
@@ -46,7 +46,7 @@ html_head('My files');
echo <<Manage my files
-Hello, {$username} !
+Hello, {$username} !
{$percent} used, {$free} free
-
diff --git a/www/ui.css b/www/ui.css
index 0a8f8dc..6039615 100644
--- a/www/ui.css
+++ b/www/ui.css
@@ -180,6 +180,11 @@ p.info tt {
padding: .2em;
}
+h3 img {
+ vertical-align: middle;
+ margin: 0 1em;
+}
+
@media screen and (max-width: 900px) {
main {
border-radius: 0;
diff --git a/www/users.php b/www/users.php
index 12cdaf4..a731e62 100644
--- a/www/users.php
+++ b/www/users.php
@@ -142,6 +142,7 @@ else {
+ |
User |
Quota |
Admin |
@@ -154,11 +155,13 @@ else {
$quota = $users->quota($user);
printf('
+ |
%s |
%s used out of %s
|
%s |
Edit Delete |
',
+ $user->avatar_url,
htmlspecialchars($user->login),
format_bytes($quota->used),
format_bytes($quota->total),