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.
|
# 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
|
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.
|
# file size limits in megabytes! only applies when using the community tools.
|
||||||
max_icon_size = .5
|
max_icon_size = .5
|
||||||
max_banner_size = 1
|
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_rm = models.BooleanField(default=False)
|
||||||
is_feature = models.BooleanField(default=False)
|
is_feature = models.BooleanField(default=False)
|
||||||
require_auth = 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)
|
creator = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
|
||||||
|
|
||||||
objects = PostManager()
|
objects = PostManager()
|
||||||
@@ -678,14 +678,29 @@ class Community(models.Model):
|
|||||||
post.recent_comment = post.recent_comment()
|
post.recent_comment = post.recent_comment()
|
||||||
return posts
|
return posts
|
||||||
def post_perm(self, request):
|
def post_perm(self, request):
|
||||||
if self.allowed_users:
|
if request.user.level >= self.rank_needed_to_post:
|
||||||
allows = self.allowed_users.split(',')
|
return True
|
||||||
if not request.user.is_authenticated or str(request.user.id) not in allows:
|
elif request.user.staff == True:
|
||||||
return False
|
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
|
return True
|
||||||
else:
|
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
|
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):
|
def has_favorite(self, request):
|
||||||
if request.user.communityfavorite_set.filter(community=self).exists():
|
if request.user.communityfavorite_set.filter(community=self).exists():
|
||||||
return True
|
return True
|
||||||
@@ -1721,16 +1736,6 @@ class Ads(models.Model):
|
|||||||
def __str__(self):
|
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)
|
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):
|
class welcomemsg(models.Model):
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
order = models.IntegerField(max_length=3, default=1)
|
order = models.IntegerField(max_length=3, default=1)
|
||||||
|
|||||||
@@ -19,14 +19,15 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if mesoftheday and request.user.is_authenticated %}
|
{% if announcements and request.user.is_authenticated %}
|
||||||
<div class="post-list-outline index-memo">
|
<div class="Announcements">
|
||||||
<h2 class="label">MOTD / News</h2>
|
{% for announcements in announcements %}
|
||||||
{% for mesoftheday in mesoftheday %}
|
<div class='Announcement-content'>
|
||||||
{% if mesoftheday.Title %}<h2>{{ mesoftheday.Title }}</h2>{% endif %}
|
{% user_icon_container announcements.creator post.feeling %}
|
||||||
<p>{{ mesoftheday.message|linebreaksbr|urlize }}</p>
|
<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>
|
||||||
{% if mesoftheday.image %}<image src={{ mesoftheday.image.url }}></image>{% endif %}
|
<p>{{ announcements.body|linebreaksbr|urlize }}</p>
|
||||||
{% if mesoftheday.hide_date == False %}<p class="memo-date">Posted {{ mesoftheday.created }}</p>{% endif %}
|
{% if announcements.screenshot %}<image class='Announcement-image' src={{ announcements.screenshot }}></image>{% endif %}
|
||||||
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{% extends "closedverse_main/layout.html" %}
|
{% extends "closedverse_main/layout.html" %}
|
||||||
{% block main-body %}{% load closedverse_user %}{% load closedverse_tags %}{% load closedverse_community %}
|
{% block main-body %}{% load closedverse_user %}{% load closedverse_tags %}{% load closedverse_community %}
|
||||||
{% if community.is_feature %}<div class='notice'>
|
{% if not request.user == community.creator %}<div class='notice'>
|
||||||
<p>Who the fuck gave you ownership of a fucking featured community!</p>
|
<p>Mods and staff members can edit communities.</p>
|
||||||
</div>{% endif %}
|
</div>{% endif %}
|
||||||
{% community_sidebar community request %}
|
{% community_sidebar community request %}
|
||||||
<div class="main-column"><div class="post-list-outline">
|
<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 %}>
|
<form class="setting-form" method="post" action={% url "main:community-tools-set" community.id %}>
|
||||||
<li class="setting-community-name">
|
<li class="setting-community-name">
|
||||||
<p class="settings-label">Set name:</p>
|
<p class="settings-label">Set name:</p>
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
<input type="checkbox" name="force_login" {% if community.require_auth %}checked{% endif %}>Require login:
|
<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">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>
|
||||||
<li>
|
<li>
|
||||||
<p class="settings-label">Platform</p>
|
<p class="settings-label">Platform</p>
|
||||||
@@ -61,4 +62,4 @@
|
|||||||
<input type="submit" class="black-button apply-button" value="Save">
|
<input type="submit" class="black-button apply-button" value="Save">
|
||||||
</div>
|
</div>
|
||||||
</form></div></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 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>
|
<!--<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>
|
<button class="button" data-href="{% url "main:community-tools" community.id %}">Community Settings</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ register = template.Library()
|
|||||||
def community_sidebar(community, request):
|
def community_sidebar(community, request):
|
||||||
return {
|
return {
|
||||||
'community': community,
|
'community': community,
|
||||||
|
'can_edit': community.can_edit_community(request),
|
||||||
'request': request,
|
'request': request,
|
||||||
}
|
}
|
||||||
@register.inclusion_tag('closedverse_main/elements/community_post.html')
|
@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')
|
@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 = {
|
text = {
|
||||||
0: "This community doesn't have any posts yet.",
|
0: "This community doesn't have any posts yet.",
|
||||||
}.get(type, nf_text)
|
}.get(type, nf_text)
|
||||||
@@ -23,6 +24,7 @@ def post_list(posts, next_offset=None, type=0, nf_text=''):
|
|||||||
'posts': posts,
|
'posts': posts,
|
||||||
'nf': text,
|
'nf': text,
|
||||||
'next': next_offset,
|
'next': next_offset,
|
||||||
|
'time': time,
|
||||||
}
|
}
|
||||||
@register.inclusion_tag('closedverse_main/elements/post-form.html')
|
@register.inclusion_tag('closedverse_main/elements/post-form.html')
|
||||||
def post_form(user, community):
|
def post_form(user, community):
|
||||||
@@ -67,4 +69,4 @@ def community_page_element(communities, text='General Communities', feature=Fals
|
|||||||
'communities': communities,
|
'communities': communities,
|
||||||
'title': text,
|
'title': text,
|
||||||
'feature': feature,
|
'feature': feature,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,12 +69,12 @@ def community_list(request):
|
|||||||
ad = "no ads"
|
ad = "no ads"
|
||||||
|
|
||||||
WelcomeMSG = welcomemsg.objects.filter(show=True).order_by('-order', '-id')
|
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', {
|
return render(request, 'closedverse_main/community_list.html', {
|
||||||
'title': 'Communities',
|
'title': 'Communities',
|
||||||
'ad': ad,
|
'ad': ad,
|
||||||
'mesoftheday': mesoftheday,
|
'announcements': announcements,
|
||||||
'WelcomeMSG': WelcomeMSG,
|
'WelcomeMSG': WelcomeMSG,
|
||||||
'availableads': availableads,
|
'availableads': availableads,
|
||||||
'classes': classes,
|
'classes': classes,
|
||||||
@@ -821,6 +821,7 @@ def community_view(request, community):
|
|||||||
"""View an individual community"""
|
"""View an individual community"""
|
||||||
communities = get_object_or_404(Community, id=community)
|
communities = get_object_or_404(Community, id=community)
|
||||||
communities.setup(request)
|
communities.setup(request)
|
||||||
|
can_edit = communities.can_edit_community(request)
|
||||||
if not communities.clickable():
|
if not communities.clickable():
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
if not request.user.is_authenticated and communities.require_auth:
|
if not request.user.is_authenticated and communities.require_auth:
|
||||||
@@ -836,7 +837,6 @@ def community_view(request, community):
|
|||||||
next_offset = 50
|
next_offset = 50
|
||||||
else:
|
else:
|
||||||
next_offset = None
|
next_offset = None
|
||||||
|
|
||||||
if request.META.get('HTTP_X_AUTOPAGERIZE'):
|
if request.META.get('HTTP_X_AUTOPAGERIZE'):
|
||||||
return render(request, 'closedverse_main/elements/post-list.html', {
|
return render(request, 'closedverse_main/elements/post-list.html', {
|
||||||
'posts': posts,
|
'posts': posts,
|
||||||
@@ -875,7 +875,8 @@ def community_tools(request, community):
|
|||||||
the_community = get_object_or_404(Community, id=community)
|
the_community = get_object_or_404(Community, id=community)
|
||||||
if not request.user.is_authenticated:
|
if not request.user.is_authenticated:
|
||||||
raise Http404()
|
raise Http404()
|
||||||
if request.user != the_community.creator:
|
can_edit = the_community.can_edit_community(request)
|
||||||
|
if not can_edit:
|
||||||
raise Http404()
|
raise Http404()
|
||||||
return render(request, 'closedverse_main/community_tools.html', {
|
return render(request, 'closedverse_main/community_tools.html', {
|
||||||
'title': 'Community tools',
|
'title': 'Community tools',
|
||||||
@@ -890,7 +891,8 @@ def community_tools_set(request, community):
|
|||||||
#do the checks
|
#do the checks
|
||||||
if not request.user.is_authenticated:
|
if not request.user.is_authenticated:
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
if request.user != the_community.creator:
|
can_edit = the_community.can_edit_community(request)
|
||||||
|
if not can_edit:
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
if len(request.POST.get('community_name')) == 0 or len(request.POST.get('community_name')) >= 100:
|
if len(request.POST.get('community_name')) == 0 or len(request.POST.get('community_name')) >= 100:
|
||||||
return json_response('bad name')
|
return json_response('bad name')
|
||||||
|
|||||||
@@ -81,6 +81,18 @@ button {
|
|||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
width: 175px;
|
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 {
|
.none {
|
||||||
display: none !important;
|
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:hover,
|
||||||
#global-menu #global-my-menu form input:active {
|
#global-menu #global-my-menu form input:active {
|
||||||
text-indent: 27px;
|
text-indent: 27px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
h2.label {
|
h2.label {
|
||||||
border-bottom: 3px solid var(--theme, #5ac800);
|
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 |