Removed MOTDs, Allowed mods and staff to edit communities.
@@ -193,6 +193,9 @@ allow_signups = True
|
||||
# Mods under this level will still be able to manage users, however will not be able to view any sensitive data.
|
||||
min_lvl_metadata_perms = 10
|
||||
|
||||
# if someone's level is equal or above this, they can edit any community on your clone.
|
||||
level_needed_to_man_communities = 5
|
||||
|
||||
# file size limits in megabytes! only applies when using the community tools.
|
||||
max_icon_size = .5
|
||||
max_banner_size = 1
|
||||
|
||||
@@ -1,433 +0,0 @@
|
||||
# Generated by Django 3.2.3 on 2023-02-07 01:50
|
||||
|
||||
import closedverse_main.models
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='User',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('username', models.CharField(max_length=32, unique=True)),
|
||||
('nickname', models.CharField(max_length=64, null=True)),
|
||||
('password', models.CharField(max_length=128)),
|
||||
('email', models.EmailField(blank=True, default='', max_length=254, null=True)),
|
||||
('has_mh', models.BooleanField(default=False)),
|
||||
('avatar', models.CharField(blank=True, default='', max_length=1200)),
|
||||
('theme', closedverse_main.models.ColorField(blank=True, max_length=18, null=True)),
|
||||
('level', models.SmallIntegerField(default=0)),
|
||||
('role', models.SmallIntegerField(choices=[(0, 'normal'), (1, 'Bot'), (2, 'Administrator'), (3, 'Moderator'), (4, 'NO'), (5, 'Donator'), (6, 'Tester'), (7, 'Cools'), (8, 'Developer'), (9, 'SMF9-Django'), (10, 'Staff'), (11, 'GAY DOGWATER'), (12, 'DUMB SNAIL'), (13, 'Russian ADRIAN'), (14, 'Contest'), (15, 'Gamecon'), (16, 'Cedar')], default=0)),
|
||||
('addr', models.CharField(blank=True, max_length=64, null=True)),
|
||||
('signup_addr', models.CharField(blank=True, max_length=64, null=True)),
|
||||
('user_agent', models.TextField(blank=True, null=True)),
|
||||
('c_tokens', models.IntegerField(default=1)),
|
||||
('hide_online', models.BooleanField(default=False)),
|
||||
('color', closedverse_main.models.ColorField(blank=True, default='', max_length=18, null=True)),
|
||||
('staff', models.BooleanField(default=False)),
|
||||
('active', models.BooleanField(default=True)),
|
||||
('warned', models.BooleanField(default=False)),
|
||||
('warned_reason', models.CharField(blank=True, max_length=600, null=True)),
|
||||
('bg_url', models.CharField(blank=True, max_length=300, null=True)),
|
||||
('last_login', models.DateTimeField(auto_now=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Ads',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('url', models.CharField(max_length=256)),
|
||||
('imageurl', models.ImageField(upload_to='ad/%y/%m/%d/')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Comment',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('feeling', models.SmallIntegerField(choices=[(0, 'normal'), (1, 'happy'), (2, 'wink'), (3, 'surprised'), (4, 'frustrated'), (5, 'confused'), (38, 'japan'), (39, 'lol i lied'), (69, 'adam is gay'), (70, 'I am a faggot!'), (71, 'Juice'), (72, 'Commit Suicide'), (73, 'Fresh!')], default=0)),
|
||||
('body', models.TextField(null=True)),
|
||||
('screenshot', models.CharField(blank=True, default='', max_length=1200, null=True)),
|
||||
('drawing', models.CharField(blank=True, max_length=200, null=True)),
|
||||
('spoils', models.BooleanField(default=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('edited', models.DateTimeField(auto_now=True)),
|
||||
('befores', models.TextField(blank=True, null=True)),
|
||||
('has_edit', models.BooleanField(default=False)),
|
||||
('is_rm', models.BooleanField(default=False)),
|
||||
('status', models.SmallIntegerField(choices=[(0, 'ok'), (1, 'delete by user'), (2, 'delete by authority'), (3, 'delete by mod'), (4, 'delete by admin'), (5, 'account pruge')], default=0)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Community',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('name', models.CharField(max_length=255)),
|
||||
('description', models.TextField(blank=True, default='')),
|
||||
('ico', models.ImageField(blank=True, null=True, upload_to='icon/%y/%m/%d/')),
|
||||
('banner', models.ImageField(blank=True, null=True, upload_to='banner/%y/%m/%d/')),
|
||||
('type', models.SmallIntegerField(choices=[(0, 'General'), (1, 'Game'), (2, 'Special'), (3, 'User Community'), (4, 'Hide')], default=0)),
|
||||
('platform', models.SmallIntegerField(choices=[(0, 'none'), (1, '3ds'), (2, 'wii u'), (3, 'switch'), (4, 'both'), (5, 'PC'), (6, 'Xbox'), (7, 'Playstation')], default=0)),
|
||||
('tags', models.CharField(blank=True, choices=[('announcements', 'main announcement community'), ('changelog', 'main changelog'), ('activity', 'Activity Feed posting community'), ('general', 'General Discussion Community')], max_length=255, null=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('updated', models.DateTimeField(auto_now=True)),
|
||||
('is_rm', models.BooleanField(default=False)),
|
||||
('is_feature', models.BooleanField(default=False)),
|
||||
('require_auth', models.BooleanField(default=False)),
|
||||
('allowed_users', models.TextField(blank=True, null=True)),
|
||||
('creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name_plural': 'communities',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Conversation',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='conv_source', to=settings.AUTH_USER_MODEL)),
|
||||
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='conv_target', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Motd',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('order', models.IntegerField(default=1, max_length=3)),
|
||||
('show', models.BooleanField(default=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('Title', models.CharField(blank=True, default='Title', max_length=256)),
|
||||
('message', models.TextField()),
|
||||
('hide_date', models.BooleanField(default=False)),
|
||||
('image', models.ImageField(blank=True, max_length=255, null=True, upload_to='MOTD/%y/%m/%d/')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Poll',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('able_vote', models.BooleanField(default=True)),
|
||||
('choices', models.TextField(default='[]')),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Post',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('feeling', models.SmallIntegerField(choices=[(0, 'normal'), (1, 'happy'), (2, 'wink'), (3, 'surprised'), (4, 'frustrated'), (5, 'confused'), (38, 'japan'), (39, 'lol i lied'), (69, 'adam is gay'), (70, 'I am a faggot!'), (71, 'Juice'), (72, 'Commit Suicide'), (73, 'Fresh!')], default=0)),
|
||||
('body', models.TextField(null=True)),
|
||||
('drawing', models.CharField(blank=True, max_length=200, null=True)),
|
||||
('screenshot', models.CharField(blank=True, default='', max_length=1200, null=True)),
|
||||
('url', models.URLField(blank=True, default='', max_length=1200, null=True)),
|
||||
('spoils', models.BooleanField(default=False)),
|
||||
('disable_yeah', models.BooleanField(default=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('edited', models.DateTimeField(auto_now=True)),
|
||||
('befores', models.TextField(blank=True, null=True)),
|
||||
('has_edit', models.BooleanField(default=False)),
|
||||
('is_rm', models.BooleanField(default=False)),
|
||||
('status', models.SmallIntegerField(choices=[(0, 'ok'), (1, 'delete by user'), (2, 'delete by authority'), (3, 'delete by mod'), (4, 'delete by admin'), (5, 'account pruge')], default=0)),
|
||||
('community', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.community')),
|
||||
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('poll', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.poll')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='welcomemsg',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('order', models.IntegerField(default=1, max_length=3)),
|
||||
('show', models.BooleanField(default=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('Title', models.CharField(default='Title', max_length=256)),
|
||||
('message', models.TextField()),
|
||||
('image', models.ImageField(blank=True, max_length=255, null=True, upload_to='welcomemsg/%y/%m/%d/')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserRequest',
|
||||
fields=[
|
||||
('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='closedverse_main.user')),
|
||||
('ua', models.TextField(blank=True, default='', null=True)),
|
||||
('latest', models.DateTimeField(auto_now=True)),
|
||||
('status', models.SmallIntegerField(choices=[(0, 'submitted'), (1, 'viewed'), (2, 'accepted'), (3, 'decline'), (4, 'ignore')], default=0)),
|
||||
],
|
||||
bases=('closedverse_main.user',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Yeah',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
|
||||
('type', models.SmallIntegerField(choices=[(0, 'post'), (1, 'comment')], default=0)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('comment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.comment')),
|
||||
('post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.post')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserBlock',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('full', models.BooleanField(default=False)),
|
||||
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='block_source', to=settings.AUTH_USER_MODEL)),
|
||||
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='block_target', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ThermostatTouch',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('lvl', models.IntegerField(default=1)),
|
||||
('who', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Restriction',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('type', models.SmallIntegerField(choices=[(0, 'Prevent yeah'), (1, 'Prevent follow'), (2, 'Prevent comment')])),
|
||||
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='restriction_by', to=settings.AUTH_USER_MODEL)),
|
||||
('comment', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='restriction_comment', to='closedverse_main.comment')),
|
||||
('post', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='restriction_post', to='closedverse_main.post')),
|
||||
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='restriction_user', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RedFlag',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('type', models.SmallIntegerField(choices=[(0, 'Post'), (1, 'Comment'), (2, 'User')])),
|
||||
('reason', models.SmallIntegerField(choices=[(0, 'Actual harassment'), (1, 'Spam'), (2, "I don't like this"), (3, 'Personal info'), (4, 'Obscene use of swearing'), (5, 'NSFW where not allowed'), (6, 'Overly advertising/spam'), (7, 'Please delete this')])),
|
||||
('reasoning', models.TextField(blank=True, default='', null=True)),
|
||||
('comment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.comment')),
|
||||
('post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.post')),
|
||||
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ProfileHistory',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('old_nickname', models.CharField(blank=True, max_length=64)),
|
||||
('new_nickname', models.CharField(blank=True, max_length=64)),
|
||||
('old_comment', models.TextField(blank=True)),
|
||||
('new_comment', models.TextField(blank=True)),
|
||||
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Profile',
|
||||
fields=[
|
||||
('is_new', models.BooleanField(default=True)),
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('origin_id', models.CharField(blank=True, max_length=16, null=True)),
|
||||
('origin_info', models.CharField(blank=True, max_length=255, null=True)),
|
||||
('comment', models.TextField(blank=True, default='')),
|
||||
('country', models.CharField(blank=True, default='', max_length=120)),
|
||||
('whatareyou', models.CharField(blank=True, default='', max_length=120)),
|
||||
('id_visibility', models.SmallIntegerField(choices=[(0, 'show'), (1, 'friends only'), (2, 'hide')], default=0)),
|
||||
('pronoun_is', models.IntegerField(choices=[(0, "I don't know"), (1, 'He/him'), (2, 'She/her'), (3, 'He/she'), (4, 'It'), (5, 'They/Them')], default=0)),
|
||||
('gender_is', models.IntegerField(choices=[(0, "I don't know"), (1, 'Girl'), (2, 'Boy'), (3, 'Minion'), (4, 'Toaster'), (5, 'Dinosaur'), (6, 'Truck'), (7, 'Robot'), (8, 'Monkey'), (9, 'Big chungus'), (10, 'Other')], default=0)),
|
||||
('let_friendrequest', models.SmallIntegerField(choices=[(0, 'show'), (1, 'friends only'), (2, 'hide')], default=0)),
|
||||
('yeahs_visibility', models.SmallIntegerField(choices=[(0, 'show'), (1, 'friends only'), (2, 'hide')], default=0)),
|
||||
('comments_visibility', models.SmallIntegerField(choices=[(0, 'show'), (1, 'friends only'), (2, 'hide')], default=2)),
|
||||
('weblink', models.CharField(blank=True, default='', max_length=1200)),
|
||||
('external', models.CharField(blank=True, default='', max_length=255)),
|
||||
('let_yeahnotifs', models.BooleanField(default=True)),
|
||||
('let_freedom', models.BooleanField(default=True)),
|
||||
('limit_post', models.SmallIntegerField(default=0)),
|
||||
('cannot_edit', models.BooleanField(default=False)),
|
||||
('email_login', models.SmallIntegerField(choices=[(0, 'Do not allow'), (1, 'Okay'), (2, 'Only allow')], default=1)),
|
||||
('adopted', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to=settings.AUTH_USER_MODEL)),
|
||||
('favorite', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='closedverse_main.post')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PollVote',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('done', models.DateTimeField(auto_now_add=True)),
|
||||
('choice', models.SmallIntegerField(default=0)),
|
||||
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('poll', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.poll')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Notification',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('read', models.BooleanField(default=False)),
|
||||
('type', models.SmallIntegerField(choices=[(0, 'Yeah on post'), (1, 'Yeah on comment'), (2, 'Comment on my post'), (3, "Comment on others' post"), (4, 'Follow to me')])),
|
||||
('merges', models.TextField(blank=True, default='')),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('latest', models.DateTimeField(auto_now=True)),
|
||||
('context_comment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.comment')),
|
||||
('context_post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.post')),
|
||||
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_sender', to=settings.AUTH_USER_MODEL)),
|
||||
('to', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_to', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Message',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('feeling', models.SmallIntegerField(choices=[(0, 'normal'), (1, 'happy'), (2, 'wink'), (3, 'surprised'), (4, 'frustrated'), (5, 'confused'), (38, 'japan'), (39, 'lol i lied'), (69, 'adam is gay'), (70, 'I am a faggot!'), (71, 'Juice'), (72, 'Commit Suicide'), (73, 'Fresh!')], default=0)),
|
||||
('body', models.TextField(null=True)),
|
||||
('drawing', models.CharField(blank=True, max_length=200, null=True)),
|
||||
('screenshot', models.CharField(blank=True, default='', max_length=1200, null=True)),
|
||||
('url', models.URLField(blank=True, default='', max_length=1200, null=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('read', models.BooleanField(default=False)),
|
||||
('is_rm', models.BooleanField(default=False)),
|
||||
('conversation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.conversation')),
|
||||
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='LoginAttempt',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('success', models.BooleanField(default=False)),
|
||||
('addr', models.CharField(blank=True, max_length=64, null=True)),
|
||||
('user_agent', models.TextField(blank=True, null=True)),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Friendship',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('latest', models.DateTimeField(auto_now=True)),
|
||||
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='friend_source', to=settings.AUTH_USER_MODEL)),
|
||||
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='friend_target', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FriendRequest',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('body', models.TextField(blank=True, default='', null=True)),
|
||||
('read', models.BooleanField(default=False)),
|
||||
('finished', models.BooleanField(default=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fr_source', to=settings.AUTH_USER_MODEL)),
|
||||
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fr_target', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Follow',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='follow_source', to=settings.AUTH_USER_MODEL)),
|
||||
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='follow_target', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ConversationInvite',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('body', models.TextField(blank=True, default='', null=True)),
|
||||
('read', models.BooleanField(default=False)),
|
||||
('finished', models.BooleanField(default=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('conversation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.conversation')),
|
||||
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='convinvite_source', to=settings.AUTH_USER_MODEL)),
|
||||
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='convinvite_target', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Complaint',
|
||||
fields=[
|
||||
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('type', models.SmallIntegerField(choices=[(0, 'Bug report'), (1, 'Suggestion'), (2, 'Want')])),
|
||||
('body', models.TextField(blank=True, default='')),
|
||||
('sex', models.SmallIntegerField(choices=[(0, 'girl'), (1, 'privileged one'), (2, '(none)')], null=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CommunityFavorite',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('community', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.community')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CommunityClink',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('kind', models.BooleanField(default=False)),
|
||||
('also', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='two', to='closedverse_main.community')),
|
||||
('root', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='one', to='closedverse_main.community')),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='comment',
|
||||
name='community',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.community'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='comment',
|
||||
name='creator',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='comment',
|
||||
name='original_post',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.post'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AuditLog',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('type', models.SmallIntegerField(choices=[(0, 'Post delete'), (1, 'Comment delete'), (2, 'User edit'), (3, 'Generate passwd reset'), (4, 'User delete'), (5, 'Image delete'), (6, 'Purge 1'), (7, 'Purge 2'), (8, 'Purge 3'), (9, 'Purge 4'), (10, 'Purge 5'), (11, 'Un-purge 1'), (12, 'Changed server settings')])),
|
||||
('reasoning', models.TextField(blank=True, default='', null=True)),
|
||||
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='audit_by', to=settings.AUTH_USER_MODEL)),
|
||||
('comment', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='audit_comment', to='closedverse_main.comment')),
|
||||
('post', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='audit_post', to='closedverse_main.post')),
|
||||
('reversed_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='audit_reverse_by', to=settings.AUTH_USER_MODEL)),
|
||||
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='audit_user', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -1,24 +0,0 @@
|
||||
# Generated by Django 3.2.3 on 2023-02-08 00:56
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('closedverse_main', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='MetaViews',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('from_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='from_user', to=settings.AUTH_USER_MODEL)),
|
||||
('target_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='target_user', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -614,7 +614,7 @@ class Community(models.Model):
|
||||
is_rm = models.BooleanField(default=False)
|
||||
is_feature = models.BooleanField(default=False)
|
||||
require_auth = models.BooleanField(default=False)
|
||||
allowed_users = models.TextField(null=True, blank=True)
|
||||
rank_needed_to_post = models.IntegerField(default=0)
|
||||
creator = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
|
||||
|
||||
objects = PostManager()
|
||||
@@ -678,14 +678,29 @@ class Community(models.Model):
|
||||
post.recent_comment = post.recent_comment()
|
||||
return posts
|
||||
def post_perm(self, request):
|
||||
if self.allowed_users:
|
||||
allows = self.allowed_users.split(',')
|
||||
if not request.user.is_authenticated or str(request.user.id) not in allows:
|
||||
return False
|
||||
if request.user.level >= self.rank_needed_to_post:
|
||||
return True
|
||||
elif request.user.staff == True:
|
||||
return True
|
||||
# If the community is made by you, you should be able to post in there regardless.
|
||||
elif request.user == self.creator:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
def can_edit_community(self, request):
|
||||
# yanderedev moment
|
||||
if not request.user.is_authenticated:
|
||||
return False
|
||||
# If the user is a mod but can't post in one community, the user should not edit it either.
|
||||
if not request.user.level >= self.rank_needed_to_post and not request.user.staff == True:
|
||||
return False
|
||||
|
||||
if request.user == self.creator:
|
||||
return True
|
||||
|
||||
elif request.user.level >= settings.level_needed_to_man_communities or request.user.staff == True:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
def has_favorite(self, request):
|
||||
if request.user.communityfavorite_set.filter(community=self).exists():
|
||||
return True
|
||||
@@ -1721,16 +1736,6 @@ class Ads(models.Model):
|
||||
def __str__(self):
|
||||
return "Ad with id " + str(self.id) + ", created at " + str(self.created) + ", with url " + str(self.url) + ", and imageurl " + str(self.imageurl)
|
||||
|
||||
class Motd(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
order = models.IntegerField(max_length=3, default=1)
|
||||
show = models.BooleanField(default=True)
|
||||
created = models.DateTimeField(auto_now_add=True)
|
||||
Title = models.CharField(max_length=256, blank=True, default='Title')
|
||||
message = models.TextField(null=False, blank=False)
|
||||
hide_date = models.BooleanField(default=False)
|
||||
image = models.ImageField(upload_to='MOTD/%y/%m/%d/', max_length=255, null=True, blank=True)
|
||||
|
||||
class welcomemsg(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
order = models.IntegerField(max_length=3, default=1)
|
||||
|
||||
@@ -19,14 +19,15 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if mesoftheday and request.user.is_authenticated %}
|
||||
<div class="post-list-outline index-memo">
|
||||
<h2 class="label">MOTD / News</h2>
|
||||
{% for mesoftheday in mesoftheday %}
|
||||
{% if mesoftheday.Title %}<h2>{{ mesoftheday.Title }}</h2>{% endif %}
|
||||
<p>{{ mesoftheday.message|linebreaksbr|urlize }}</p>
|
||||
{% if mesoftheday.image %}<image src={{ mesoftheday.image.url }}></image>{% endif %}
|
||||
{% if mesoftheday.hide_date == False %}<p class="memo-date">Posted {{ mesoftheday.created }}</p>{% endif %}
|
||||
{% if announcements and request.user.is_authenticated %}
|
||||
<div class="Announcements">
|
||||
{% for announcements in announcements %}
|
||||
<div class='Announcement-content'>
|
||||
{% user_icon_container announcements.creator post.feeling %}
|
||||
<a class='user-name' href={% url "main:user-view" announcements.creator.username %} {% if announcements.creator.color %}style=color:{{ announcements.creator.color }}{% endif %}>{{ announcements.creator }}</a><a class='timestamp"'> - {{ announcements.created }}</a>
|
||||
<p>{{ announcements.body|linebreaksbr|urlize }}</p>
|
||||
{% if announcements.screenshot %}<image class='Announcement-image' src={{ announcements.screenshot }}></image>{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{% extends "closedverse_main/layout.html" %}
|
||||
{% block main-body %}{% load closedverse_user %}{% load closedverse_tags %}{% load closedverse_community %}
|
||||
{% if community.is_feature %}<div class='notice'>
|
||||
<p>Who the fuck gave you ownership of a fucking featured community!</p>
|
||||
{% if not request.user == community.creator %}<div class='notice'>
|
||||
<p>Mods and staff members can edit communities.</p>
|
||||
</div>{% endif %}
|
||||
{% community_sidebar community request %}
|
||||
<div class="main-column"><div class="post-list-outline">
|
||||
<h2 class="label">Change settings for {{ community.creator }}'s community</h2>
|
||||
<h2 class="label">Change settings for {% if community.creator %}{{ community.creator }}'s{% else %}this{% endif %} community</h2>
|
||||
<form class="setting-form" method="post" action={% url "main:community-tools-set" community.id %}>
|
||||
<li class="setting-community-name">
|
||||
<p class="settings-label">Set name:</p>
|
||||
@@ -37,6 +37,7 @@
|
||||
<p> </p>
|
||||
<input type="checkbox" name="force_login" {% if community.require_auth %}checked{% endif %}>Require login:
|
||||
<p class="note">If this is on, users will need to sign in to view your community.</p>
|
||||
<p class="note">I plan on removing this feature as it's implemented in an extremely janky way. Or at least improving it, so you are no longer forced to sign in to view yeahs from anyone. The whole idea behind this feature is to prevent web crawling or unauthorized third parties from seeing content without an account.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="settings-label">Platform</p>
|
||||
@@ -61,4 +62,4 @@
|
||||
<input type="submit" class="black-button apply-button" value="Save">
|
||||
</div>
|
||||
</form></div></div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -38,9 +38,9 @@
|
||||
<button type="button" class="symbol button favorite-button{% if community.has_favorite %} checked{% endif %}" data-action-favorite="{% url "main:community-favorite-add" community.id %}" data-action-unfavorite="{% url "main:community-favorite-rm" community.id %}"><span class="favorite-button-text">Favorite</span></button>
|
||||
<!--<button class="button reload-btn">Refresh posts</button>
|
||||
-->
|
||||
{% if request.user == community.creator %}
|
||||
{% if can_edit %}
|
||||
<button class="button" data-href="{% url "main:community-tools" community.id %}">Community Settings</button>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,6 +5,7 @@ register = template.Library()
|
||||
def community_sidebar(community, request):
|
||||
return {
|
||||
'community': community,
|
||||
'can_edit': community.can_edit_community(request),
|
||||
'request': request,
|
||||
}
|
||||
@register.inclusion_tag('closedverse_main/elements/community_post.html')
|
||||
@@ -15,7 +16,7 @@ def community_post(post, type=0):
|
||||
}
|
||||
|
||||
@register.inclusion_tag('closedverse_main/elements/post-list.html')
|
||||
def post_list(posts, next_offset=None, type=0, nf_text=''):
|
||||
def post_list(posts, next_offset=None, type=0, nf_text='', time=None):
|
||||
text = {
|
||||
0: "This community doesn't have any posts yet.",
|
||||
}.get(type, nf_text)
|
||||
@@ -23,6 +24,7 @@ def post_list(posts, next_offset=None, type=0, nf_text=''):
|
||||
'posts': posts,
|
||||
'nf': text,
|
||||
'next': next_offset,
|
||||
'time': time,
|
||||
}
|
||||
@register.inclusion_tag('closedverse_main/elements/post-form.html')
|
||||
def post_form(user, community):
|
||||
@@ -67,4 +69,4 @@ def community_page_element(communities, text='General Communities', feature=Fals
|
||||
'communities': communities,
|
||||
'title': text,
|
||||
'feature': feature,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,12 +69,12 @@ def community_list(request):
|
||||
ad = "no ads"
|
||||
|
||||
WelcomeMSG = welcomemsg.objects.filter(show=True).order_by('-order', '-id')
|
||||
mesoftheday = Motd.objects.filter(show=True).order_by('-order', '-id')
|
||||
announcements = Post.objects.filter(community__tags='announcements').order_by('-id')[:6]
|
||||
|
||||
return render(request, 'closedverse_main/community_list.html', {
|
||||
'title': 'Communities',
|
||||
'ad': ad,
|
||||
'mesoftheday': mesoftheday,
|
||||
'announcements': announcements,
|
||||
'WelcomeMSG': WelcomeMSG,
|
||||
'availableads': availableads,
|
||||
'classes': classes,
|
||||
@@ -821,6 +821,7 @@ def community_view(request, community):
|
||||
"""View an individual community"""
|
||||
communities = get_object_or_404(Community, id=community)
|
||||
communities.setup(request)
|
||||
can_edit = communities.can_edit_community(request)
|
||||
if not communities.clickable():
|
||||
return HttpResponseForbidden()
|
||||
if not request.user.is_authenticated and communities.require_auth:
|
||||
@@ -836,7 +837,6 @@ def community_view(request, community):
|
||||
next_offset = 50
|
||||
else:
|
||||
next_offset = None
|
||||
|
||||
if request.META.get('HTTP_X_AUTOPAGERIZE'):
|
||||
return render(request, 'closedverse_main/elements/post-list.html', {
|
||||
'posts': posts,
|
||||
@@ -875,7 +875,8 @@ def community_tools(request, community):
|
||||
the_community = get_object_or_404(Community, id=community)
|
||||
if not request.user.is_authenticated:
|
||||
raise Http404()
|
||||
if request.user != the_community.creator:
|
||||
can_edit = the_community.can_edit_community(request)
|
||||
if not can_edit:
|
||||
raise Http404()
|
||||
return render(request, 'closedverse_main/community_tools.html', {
|
||||
'title': 'Community tools',
|
||||
@@ -890,7 +891,8 @@ def community_tools_set(request, community):
|
||||
#do the checks
|
||||
if not request.user.is_authenticated:
|
||||
return HttpResponseForbidden()
|
||||
if request.user != the_community.creator:
|
||||
can_edit = the_community.can_edit_community(request)
|
||||
if not can_edit:
|
||||
return HttpResponseForbidden()
|
||||
if len(request.POST.get('community_name')) == 0 or len(request.POST.get('community_name')) >= 100:
|
||||
return json_response('bad name')
|
||||
|
||||
@@ -81,6 +81,18 @@ button {
|
||||
font-size: 20px;
|
||||
width: 175px;
|
||||
}
|
||||
.Announcement-content {
|
||||
background: var(--theme-dark, #202030);
|
||||
border: 1px solid black;
|
||||
border-radius: 6px;
|
||||
padding: 6px;
|
||||
margin-bottom: 12px;
|
||||
text-align: left;
|
||||
padding-bottom: 22px;
|
||||
}
|
||||
.Announcement-content .Announcement-image {
|
||||
padding-top: 6px;
|
||||
}
|
||||
.none {
|
||||
display: none !important;
|
||||
}
|
||||
@@ -857,7 +869,7 @@ left: 10% !important;
|
||||
#global-menu #global-my-menu form input:hover,
|
||||
#global-menu #global-my-menu form input:active {
|
||||
text-indent: 27px;
|
||||
}
|
||||
}
|
||||
}
|
||||
h2.label {
|
||||
border-bottom: 3px solid var(--theme, #5ac800);
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
width="130"
|
||||
height="130"
|
||||
viewBox="0 0 130 130"
|
||||
sodipodi:docname="backgroundclear.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xml:space="preserve"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs1"><inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect5"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
nodesatellites_param="C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1"
|
||||
radius="8"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false" /><inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect4"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
nodesatellites_param="C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1"
|
||||
radius="8"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false" /><inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect3"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
nodesatellites_param="F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1"
|
||||
radius="11"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false" /></defs><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="5.08125"
|
||||
inkscape:cx="63.468635"
|
||||
inkscape:cy="55.694957"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g1"
|
||||
showgrid="false"
|
||||
showguides="false" /><g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Image"
|
||||
id="g1"><rect
|
||||
style="opacity:1;fill:#000000;fill-opacity:0.40000001;stroke-width:0.8125"
|
||||
id="rect2"
|
||||
width="130"
|
||||
height="130"
|
||||
x="0"
|
||||
y="0" /><path
|
||||
style="fill:#000000;fill-opacity:0.11323686"
|
||||
id="rect1"
|
||||
width="65"
|
||||
height="65"
|
||||
x="0"
|
||||
y="0"
|
||||
sodipodi:type="rect"
|
||||
inkscape:path-effect="#path-effect4"
|
||||
d="m 8,0 h 49 l 8,8 v 49 l -8,8 H 8 L 0,57 V 8 Z" /><path
|
||||
style="fill:#000000;fill-opacity:0.11323686"
|
||||
id="rect1-3"
|
||||
width="65"
|
||||
height="65"
|
||||
x="65"
|
||||
y="65"
|
||||
inkscape:path-effect="#path-effect5"
|
||||
sodipodi:type="rect"
|
||||
d="m 73,65 h 49 l 8,8 v 49 l -8,8 H 73 l -8,-8 V 73 Z" /><image
|
||||
width="128"
|
||||
height="128"
|
||||
preserveAspectRatio="none"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAEpElEQVR4nO2dW3LiQBAEE8kmOPae
|
||||
2w7j/ZjFa0CAHi1N16jqABMZlf2pKB1Op9MfgnI8Hun7Puq5q5zPZz4+Pvj+/g55z6yFs4t6zIWW
|
||||
qLBeOEMOwIWWqLD+5lx8AC60RIX1lnPRAbjQEhXWIc7ZB+BCS1RYH3HOOgAXWqLC+oxz8gG40BIV
|
||||
1leckw7AhZaosI7hHH0ALrREhXUs56gDcKElKqxTOF8egAstUWGdyvn0AFxoiQrrHM6HB+BCS1RY
|
||||
53IOHoALLVFhXcJ5dwAutESFdSnn1QG40BIV1gjOnwNwoSUqrFGcHbjQS1RYIzk7F1qiwhrN2e29
|
||||
UNBhXYPzLeSlm3x9ffH5+Zm+UNi3/L7v4z4KvcTydeTDwk/CbmP5WvIh8AAsX08+BB2A5WvKh4AD
|
||||
OJ/Plh+cLTkXHYBKoaDDujXn7ANQKRR0WGtwzjoAlUJBh7UW5+QDUCkUdFhrck46AJVCQYe1Nufo
|
||||
A6gNOiUqrBk4Rx1ABtCxUWHNwvnyALKAjokKaybOpweQCfRVVFizcT48gGygz6LCmpFz8AAygj6K
|
||||
CmtWzrsDyAo6FBXWzJxXB5AZ9DYqrNk5fw4gO+jvqLAqcHagAXqJCqsKZ6cCCjqlqnACdCqgKqWq
|
||||
cEL5kqtTAFUpVYUTinxPxQZGhRP+y4eAbwItX4cTruWDp2IXR4UT7uWDp2IXRYUThuWDp2JnR4UT
|
||||
HssHT8XOigonPJcPnoqdHBVOeC0fPBU7KSqcME4+eCp2dFQ4Ybx88FTsqKhwwjT54KnYl1HhhOny
|
||||
wVOxT6PCCfPkg6diH0aFE+bLB0/FDkaFE5bJB0/F3kWFE5bLB0/FXkWFE2Lkg6dif6LCCXHywVOx
|
||||
gA4nxMo/HA6eilXhhHj5x+MxfikUdEpV4YSV5Hdd/AGolKrCCevJh+CpWJVSVThhXfkQeAAqpapw
|
||||
wvryIegAVEpV4YRt5EPQVKxCqSqcsJ182MlUrAonbCsfdjAVq8IJ28uHxqdiVTihjnxoeCpWhRPq
|
||||
yYdGp2JVOKGufGhwKlaFE+rLh8amYlU4IYd8aGgqVoUT8siHRqZiVTghl3xoYCpWhRPyyQfxqVgV
|
||||
TsgpH4SnYlU4Ia98EJ2KVeGE3PJBcCpWhRPyywexqVgVTtCQD/Cm8t9fy1/l+106y4+NknyJqVjL
|
||||
X09++qlYy19XPiSeirX89eVD0qlYy99GPiScirX87eRDsqlYy99WPiSairX87eVDkqlYy68jHxJM
|
||||
xVp+PflQeSrW8uvKh4pTsZZfXz5Umoq1/BzyocJUrOXnkQ8bT8Vafi75sOFUrOXnkw8bTcVafk75
|
||||
sMFUrOXnlQ8rT8Vafm75sOJUrOXnl7/aVKzla8h/f3/f71IoWH7f97yFvPgvlq8hf5WpWMvXkw87
|
||||
WwoFyw+firV8Xfmwk6VQsPzwqVjL15cPjS+FguWHT8VafjvyodGlULD88KlYy29PPjS2FAr1C52S
|
||||
DKzNLIVCjkLHJgtrE0uhkKfQMcnEKr8UCrkKfZVsrNJLoZCv0GfJyCq7FAo5C32UrKySS6GQt9Ch
|
||||
ZGaVWwqF3IXeJjur1FIo5C/0dxRYO8vfr3yAv3rECG2I4F0DAAAAAElFTkSuQmCC
|
||||
"
|
||||
id="image3405"
|
||||
x="-149.11778"
|
||||
y="16" /></g></svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,129 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
width="160"
|
||||
height="160"
|
||||
viewBox="0 0 160 160"
|
||||
sodipodi:docname="background.svg"
|
||||
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect5"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
nodesatellites_param="C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1"
|
||||
radius="8"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false" />
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect4"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
nodesatellites_param="C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1"
|
||||
radius="8"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false" />
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect3"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
nodesatellites_param="F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1"
|
||||
radius="11"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="2.540625"
|
||||
inkscape:cx="-35.621156"
|
||||
inkscape:cy="65.535055"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g1" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Image"
|
||||
id="g1">
|
||||
<image
|
||||
width="160"
|
||||
height="160"
|
||||
preserveAspectRatio="none"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAIAAAC2BqGFAAAABmJLR0QAFgAWACbcRYNiAAAACXBI WXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QkQChoXcqytowAAATpJREFUeNrt3MEJwzAQRFFn8MlV uIT0X5jPqSEgLVr5/QLC7DskYII/9/095vQ8z9Gt67omfXIOlQQaNGiBBg0aAWjQAg0atECDFmjQ oAUatECDBi3QoLUIdMd/z0ydHco140O55oRQrjkklGvOOct05v1Rc57mQJy8WblyWN6sXDkvL1cu GxnKNVNDuWawZx1FgQYNWqBBg0YAGrRAgwYt0KAFGjRogQYt0KBBCzRogQYNWqBBCzRo0AINWqBB gxZo0AINGrRAgxZo0KAFGrSWgG73Grypg9N3eq+p6X5Al5HZ44z152WnY1Yedg58B1nZez7LGoiT NWdtpjz+q2Mb6+GHZP2JGyjP+jFsbT1pfHrNbap8eNZRFmjQoAUaNGgEoEELNGjQAg1aoEGDFmjQ Ag0atECD1p/9AKkzTyh2EOP+AAAAAElFTkSuQmCC "
|
||||
id="image1"
|
||||
x="-167.89395"
|
||||
y="0" />
|
||||
<rect
|
||||
style="fill:#161626;fill-opacity:1"
|
||||
id="rect2"
|
||||
width="160"
|
||||
height="160"
|
||||
x="0"
|
||||
y="0" />
|
||||
<path
|
||||
style="fill:#202030;fill-opacity:1"
|
||||
id="rect1"
|
||||
width="80"
|
||||
height="80"
|
||||
x="0"
|
||||
y="0"
|
||||
sodipodi:type="rect"
|
||||
inkscape:path-effect="#path-effect4"
|
||||
d="m 8,0 h 64 l 8,8 v 64 l -8,8 H 8 L 0,72 V 8 Z" />
|
||||
<path
|
||||
style="fill:#202030;fill-opacity:1"
|
||||
id="rect1-3"
|
||||
width="80"
|
||||
height="80"
|
||||
x="80"
|
||||
y="80"
|
||||
inkscape:path-effect="#path-effect5"
|
||||
sodipodi:type="rect"
|
||||
d="m 88,80 h 64 l 8,8 v 64 l -8,8 H 88 l -8,-8 V 88 Z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 28 KiB |