From 77a604f5bee16f7f728fb9a916cf516ed5077aab Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Sat, 8 Feb 2020 00:50:06 +0100 Subject: [PATCH] =?UTF-8?q?Tootips=20angefangen,=20Model=20fertig=20aber?= =?UTF-8?q?=20fehlen=20noch=20fast=20=C3=BCberalle,=20Gruppen=20fertig=20i?= =?UTF-8?q?nkl.=20Rechte,=20fehlt=20noch=20Benutzer=20hinzuf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/settings.cpython-38.pyc | Bin 4539 -> 4670 bytes digitaleagentur/settings.py | 21 ++++--- standards/__pycache__/views.cpython-38.pyc | Bin 6385 -> 6385 bytes users/__pycache__/admin.cpython-38.pyc | Bin 351 -> 462 bytes users/__pycache__/apps.cpython-38.pyc | Bin 519 -> 519 bytes users/__pycache__/models.cpython-38.pyc | Bin 4131 -> 4663 bytes users/__pycache__/signals.cpython-38.pyc | Bin 1135 -> 1148 bytes users/__pycache__/usersforms.cpython-38.pyc | Bin 6268 -> 6268 bytes users/__pycache__/views.cpython-38.pyc | Bin 16142 -> 17491 bytes users/admin.py | 9 ++- users/apps.py | 2 +- users/models.py | 55 ++++++++++++------ users/signals.py | 25 ++++++-- users/static/users/css/custom.css | 4 +- users/templates/users/base.html | 11 +++- users/usersforms.py | 4 +- users/views.py | 45 +++++++++++++- 17 files changed, 132 insertions(+), 44 deletions(-) diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index c5b95d101d4747eaa19c6734b7edf56d4c8c8583..9cf97d1a9e0e8c24b14d0de049f16b5c1636ce0c 100644 GIT binary patch delta 721 zcmYjPOHUI~6rLGoP^pDhlp@HpyxKx}_$-Pds1!sI5FbYYr+mZhKxt*B6&WA(!5=W) zb|Fg_CMI2)n7D9h;>KU#Mi>497kHQu<2gCs{myq!?l~v9AA_ITB6D7Eg~ayr^U%WA zI!XGmoBVG9PKG(`@SDhL9*t-c0rH?3Eoem$ZD>b_*hdG^NnUgb2^vBOBZ6-92-TDk zEviDMO7v0{`pAcV@?(Gwaa2R2!#GYyZ~`ZB3a4=fF~QXs++{e6a~Q&T)-Qu*Q3)kajWS;zLswD%E10 zj>4ik-n5?M7;oJGn;Ma&CgiBukXMwqWiGZD+P1tc<557OR#yoct=QOBs11*)-Bred zMmaWF>VQL?{8$&BPzX;cjAs<#2Hkj0J;+m(&tAO1?tp!GiC1`S%FO$r%u1oH(uAUw zb&zLG&nB16RMxO;Cx8__Ei%!iOgd|siD)vnrl(EEC{1bp@;a)G$C6IM*&JEV&W)xi zHNG*~zdma@$wJc8U0%gM#EBQCwd&G)&v!XY2U2Fj(k;`l$+MKnrMbmoRu@jCoz>IO zE!a^`?a)AJ%lk#Cv^0L;on*!MuwsQ7-@IH?_~08XeDkSgztsA|Z(q*epveFHkGi8) Q6>NXJLe*H5lpST~FQAsv#sB~S delta 579 zcmYk3$x{o$>i53tPtlK&}EviYWCC^dl@ConAZ2H0Q<`p<4jOIpoN1>YCObY zjYl}j6vs3>&IwK`*DF26Y0fCi<7YX?d8WCbY%ibTBA4oSm$`z}`Bknl%N*Ca!A<4& zYH#V*x1p@9NV6U^Q)C{+9kMKx9WAzy;BoCQGn z-29Z(oFaB0|CUrrR$^XyzFu;EUP)1Al3rqINroO+zPN}3q=2P3vn2HvM^S2eW^qYs c(MpCQUZ8Lh?_@^C01*KolZR1+kp~F^0D$vM4FCWD delta 203 zcmX@de4mLgl$V!_0SJ;`zl`0*Fp*D&F<_#$Y&|1G3R4P84r?x36dNN$Dq|M=0*+MX zg^X}E3lf_R#7^lpK0D>)ZZR0lb{AL6IFX{zB delta 21 bcmZo?X=mXH<>lpK0D}LwpT%zE`OOFbH{}L$ diff --git a/users/__pycache__/models.cpython-38.pyc b/users/__pycache__/models.cpython-38.pyc index f263358f1e2a016d0dcd08ac242a8bd9170c7c11..34618874d5180d31d3cad23098ec931dcdf67128 100644 GIT binary patch literal 4663 zcmb7IOLH5?5ymcFizh*dq)5uLDcO>PB&O^<4sltIB#KmIOR!`?hitL3wZII3B^SHU z?5>;*Q*8u(qjmtpg)`Avp3xv{hKGHYK1=K@;*XCdV*gR{t% zz*$N;E8tvY%it`hoK?2+B-2_w!0t0GLl#CM<9^gKW$tOjg>2mJMzL^v@f|nf#DR4keNRNO6SyNTOTL?uJ(E_Leu$=v+dzrxsF?9O^HpZY_{#X!#CFW~ zWEIN_dV9{7?|*$mlTqx((Ty)Z_wxY)iM_L33S9Btpb-`Qr~z>8gLbXXj$0FvbqK)Wk5tM99uZb3X5!}NS5#2*M z@yVlg3nls|DxR?oma$FPZH^htWZ74yoj+>jSpHSkF3hxxGi~w#8eL#ozJzue?Hns& zwo2M-rM*?OYplfUXqPej9NG<5Vb!#M9_=Q-u(ObkUu4=>miR^OEiVmwna#s6nzC?P z*@es;{2QCW(xT(QOC9Ie7^ZL1nAG(~*VC?3y2ve+uB)jou^JnslNm2fu}ahq ze2G!PDq7jL%qGI0T)r{l%yUzxn%#FRD@*!BU}ds6bR##8h4=+@h@Vk4V~n){kDc)_ zj6(;Le+Y@FfGT4)4a=M?q`!EQQvnbO+f}^@M`4o8V}${iWd(M6 zHga9@OHxtZ!VSlYYZtpNYz074yX(fh14z`;MH0*g;S0MO@GoMP92|Dk_VXX%$UF$(?fFqYy_1d#?KyI5{a?4h~pi zc~(G>DYGJO-jXGK51)ixff$-Oc!Ww^LIuMtg@J>R!DD{P#LhHlLHiKbsXD_T)QQ|j z=b;(TAE`dHRX+nFHO;JD7vo3U!LN>ImLf#ioZ6+zcR(Yn&v5Q>nz27hhNj#39$G&TZCCH z;aYUe5+C6pJ9cI43WQOIVp1z7Zi1;m6WEvdzN`xF!>O3^`~w=YZz_ORLanU&5qD@5 z4V_$~d8VV{6g-QoG~Cc&P9`m`Q1vFNt@F*8GD(Gt2H~Qc(eT&tSR~AVy&q8JNNgX+7EOIPIqo9>`oj33>{L#4VcWw^UJ{B|b%ETfJ~J zCJ|Y^6NX47gEW*p_ad+BbGwY#5CzGIqE#ojowO96ioITW-~a-2j%dxcIF z`2g1C3g(QHuJ84<)Y)BX)UrlK2U8x8Ra2kYqsBB{25-cG0VVfZ#SD++G}?YbJN_M2 z=SI2P=ygyclCTifmJsRc=7LGlu5MI~Mz)%-8r9rXF|C}nh{#7{Pl5DNV2btOx%UCj@U%KB`B7h zS{7w@w@{)rRENtVKPRQ6jMNM)JF8Vp8dECPAM)5m8cO36N-3!iPYf^6Pa3?ec(4Zd z|NgsxaS;Fx@(L{`7w+&Ni6>mFb-63L+{4q0de!Akn)gI99%JaqP9U-y(NF}`-jL7q z#%{D5C1lH;@4t(^!LFM0gph3=TH@r|lhh`oDT%ctU~7HM9`%N-<;Z=`amUEDl&Z59DL#kf-%uh7RhG&T;Ws(OZ?`VV65DZuLAcJkIz3)Z z+dVwQh1XqolX$qUpRelOF35vqZ*`n-WlPDWr@O0pR#aSbdtb(mT(=~Rmx4qCi4&JUkZ(>l$|N> qSDQTRRHXHhejD delta 1821 zcmZ`(&2Jk;6!)w@c5Uyj*Pr=vKAk4nqz#0s4IiP9wkZdi548!ZmV&kROq?|KI?S%A z5)KhcQ4feiI~P<{EvT1p;sz2o{)BSiuu`u`Jt2<0Al_St)Tz?7{M(t|y!YnKo8Q}C zN1qJoYnqk_!Smv)xzFXUdwP-lac^pFPin-icq43uNr;AMtS&VYRszN{3*Soqpi<>W zQr2j^W2PU?60r7imJDVp)$W9>6xC@8-o{5EYS8qZ5KS|3E4?4KGQebL7MLtDMWC`k zFx|>Z${6y}Pw3w4V z(bBN!N_b3(XT@Xb(|i)fTt~pQHe^I9oYx94|KBzzX2SjCp;!*z?WIYoV(KhSHLBkU z?Gr0QQ;?4#jL76b4~FRl@S~Nw?QA`d!q}8}z!$}hNGXj&Ki=A|H*H$>n!G3;MBeZ2 z*dN#Bav4rlF25=Mj(k5c4iq0nc*RVsF|WM6(e#?-7O&5WpQB?WEB=h0BPF567U#0) zGl4J$;49m_xy`t@!zYgi3&LiQ%LAaTTM$oUIayL~ca!#Es4I3dMg<16A9dDxjklhX)i5bz@SG(ri$Ph4qowpnvNW;;O=zPxg6d3E8^ zsvom!%&G1Kkva3_u||F$h14DJNwhKE##tM8x$$v9BEL=``^jv5KJC zE-D4%{$SkZ2Rit{4t}VEAEqg4fCxrtnr7f#Vxu%mbAcF6fn4*n0CFwtOV$|e0%>%^ zS$K1Ov(EUr5M2MNmE5*DbG&j3G;2oqc}Nj-@O!*C2wFk;@FIX24qp5{B+zEJPdrNY zb@M@7ByCaQZSVnvKJiB4%oN^+Dftl$&9SFndn;dyyNS;hG_)svZ0okoYc6=ooPEhS zc;m`R&c1=Fvny`1-trgIQqo(6imGV}^b6t@WB+VNQj0IP@Qd&bprMP@B_^ z=;GUynYL06yWJT|{FXYcYhTnm4gX1*mE&#VC!t{vKV|Mo>h~j9l_yY2*8ot$66yH8 z;Fp11GRJvGSkbGFbzcCU&mz1H;K$mEUCG}; zj~RpKhyIcWz3G) diff --git a/users/__pycache__/signals.cpython-38.pyc b/users/__pycache__/signals.cpython-38.pyc index b6b447c7fdcf5486c1669ea1472ee6e33d532989..183ce7c847e7693ded8857e8a0612f3777a74232 100644 GIT binary patch delta 541 zcmYjOO=}b}7|xrSWIlIxyA(yOc5C%86bfpO)(=p6@lcS03@D6~wC*yqv%a$}t4vRN z^|0h3Uet@f!h=`;LjHkX`~x0Lrl1D$Bs_VZ_kEK5@_+luL9Z7QGxk32KKsU&$r>z{ zTbHwnWekWQ!YO&>WuDo)f|Y(1WI+{XVHIUjcg{bIn67X4$wEe_Uh*oSVq(>OwL-TcQupX6aGU%@rUAxkLHA)@ zeWy<@t{M@cE}UaSh`|Tf;1Cju8*10t+0x$Z>_&LW=u!t`TXfCB6$|TsVWi$Wo6uKZ zorkZH8Cv(nB%dDD+hW|z@_F$Bxn+4}a+gh)83Sv#ABmBL4GWtV{?+YvBg1L`wy_?U X@{WChW@uml0~2=@Vkd-f#Z2}GSe1G9 delta 513 zcmY+AL2DE-6vy*sGMP-e+inYLEiIjG5g7}G)}D%pg5E@mT9APvDgnb4<~TS-^&RZ+#53WZ8XgWxH0=Hn*7+OFV4GjsT~WB%%HcTf5A5QPVMYZa$P) zXB8S+VkVOX722!`hc64v$BkjR!fcGH<1}5p>TN=#AA9j)IQrv{9-h>>p-py*Nu-2+ z?d?IVzj@E$s_y$&SO)~CHNETa+*C`h%d$n{EBDK4#bMPU{)@hT@2^8wfAJsIW=2LHNjG+Q diff --git a/users/__pycache__/usersforms.cpython-38.pyc b/users/__pycache__/usersforms.cpython-38.pyc index f0a65f41380b70d55dd6352fc2bed23ed5a93f70..880d476a56fd36e4ca2cc523e4daa21092733e47 100644 GIT binary patch delta 23 dcmexk@W+5Jl$V!_0SIjF*~SHlZ{*99002>M215V< delta 23 dcmexk@W+5Jl$V!_0SG2n+r+&W+sKzE0RU9{2GRfk diff --git a/users/__pycache__/views.cpython-38.pyc b/users/__pycache__/views.cpython-38.pyc index 2855e95cd43a1d83f833e33c9b2a4956232f34b3..c13658f82064f1fd2c1a59736a2f276f793712eb 100644 GIT binary patch delta 6497 zcmZ`-YjjlCb)GXX&5T}y&;x-$1Bl095MbU&NFZLuHbNMIoeR$RGUtvoVjl9jS4N@2 z6CO$2)Yy>I)TC})sGY8m)uf5FaFf_^>ea+)n>J4DuBN%^T6y$Gi`_KsO6#P~T21%2 zuh58zEUo+9ea_xzpS}0l`F9_7mMN7s>XE!nntZ$b?*c(RV=@2lo5ql9F6{(I=N$jTZvOy~OO0 z%b0l|F_+5~#9Lv7tfmV=<9_N{DU;Nbq@G6VIY{!WEWwfoNOYszM53EWbRLNwA@*jug+&L6yH#!@?zSn_ zM~S;#b}{!D(cN+f(+^6-@gd_O*&}-|`iu|AopKkw4cRAm)B8Bd?vZ<0_5{)UOuIa#mr;8BVx&&gZ8og7j>_eDeq1;NYE1tGg+O#bZFyW45ZYF+2&(brl_Qqb3?33VNEHOxE{HuVCF3& zcFaO6E}~U8U@dwBl=_^; z3Z<*|qb~w0Q?})}0h&{Pw{?CvFl0H&xPB(wS2Aj5guqr?XoS(|Sa}XfDqoJG(K1_a z${aH0PBX~3so)vSvviWMThB2|6*JVJt+4bVbqGd=MlF@MT`}rLXy7PXUgdK6qH>8* zJUS|APg_APyNAG6(=2M}KO!1L%-<~PM1;zC3ALL=Brx^%T7)s;Hv}Rq-4KZRl}Q>V z`>Os?MAJmQClX5P#nDB=(mSI+5E(r`wsFC6;;1$PH#l(U$e=RNMvAE;IvZ;fyY)w7 zTL@o`CF`e6RW=En((lHe?gi!6rc&vgY1?TlmrJE)_%#kia88{h$k1aWiz6aPUIqQ? zr2a*qQa>R;AgEvW+#lmt^Nmp2QvaCxiXB>n0f zm=6;qYm|aaoDwTFHED__GQB)3+sg5*G#FZ*0DK&(g35ua@Tt?LT0CT{-vbAeC=OTI z-lwSVd3~^c)4gZF{T;vrU>@Ks03zzc03OCLjwT2FNuoYY51#-O^pJW|_f{>`x9SJu zND1~^S)eldVEp(__V*IClL7YE(+{g}1lVfzG=$k=o`xsnxnRjllm8ZP6V{BCz$+&7kPaZH^>_)+O6i@_kdaeRh04xM>wqkWSEvLe( z#?bK?;51;$+FBynT;%P`ddu9ssrQZT;}};0aFj9P{X>13xL>5ljuA}dcc3PuF6$r8 z{meobdqXHV^FP%DdniQ##oAW@w_^x-)vk_Vjq!AZX|1` z9y4=Usg6)nl^3rZy#N?~s0n$Id|qx6H3Th;B}RL;Cra<(;S^_S6lUit30{ z^H0!Oo{`rYW8RzmWlM`_WYyOpBLMdi7&_UyT?}d2+Ew}_I0A$rU@#I^*YxrQKi$Vkt1^0>LmiOL4y3od9d^TsLQjcZr?8%&^F6sWZrF0~yw#}t-#IHgj>St0h#X#!|6Gi=mwj{2C~>cL^vy z;0Hmy3ivwUF9E!bze1E7rmL()2YK1?>E%q;&Q>0DP0+tyva6NXZ5+zj8QuY2qo%2k zEYJ)I4R11nrn!PF? zWFH2DW5d9jIZBxFN!WM$3?tWYOM6{+FTb($I)?oL0louxn@f$JQajPRo*)^fLo2kx zn2`gVsc_mWI8F&{Z>j^pd9fH&8h|U9cYH->)FhAjd$9fn@V9_(1O5&$OOV~_=uv#M z45)1JIelwIGWZ>m)a#Zt>AO}w6TgXJ>@wT;72SIG!V(t^woo^Qw6Zf#^<2u2!M0*0Z^|2(f|pV-a%D8 zntp<0Q$@8I(M+~r=J?x&>uZdpj5&yjW9plCcji!uZU~XF)lZ=ZaWG=2fK+N#aKfHhnvCf=n-}WUo8#d=2xN5M=65%6RLc?kQ*e#~%K6OFe2jTf(xOI;L0(ow#PPLdsRp6^Lbq=p@5frWar%le$DCohOJvjZ2_!j^>c^O+ zVuET4k5#bK!(+~w3F!CsHB#$WA*kG=lU~&Dz0lWqH2f+6MKLY#&@HPPJO#vea30fruQ)dK*L&PUXq&r`fV>zpb1bp^+eWhpZ ZJbbd@yzu_xq9zav`9-Wpf48US{{eM1`8xmr delta 5194 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 diff --git a/users/admin.py b/users/admin.py index e436278..482ccba 100644 --- a/users/admin.py +++ b/users/admin.py @@ -1,7 +1,10 @@ from django.contrib import admin -from .models import Profile, Agency +from .models import Profile, Agency, AgencyGroup from .priomodel import Prio - +from django.contrib.auth.models import Permission +admin.site.register(Permission) admin.site.register(Profile) admin.site.register(Agency) -admin.site.register(Prio) \ No newline at end of file +admin.site.register(AgencyGroup) +admin.site.register(Prio) + diff --git a/users/apps.py b/users/apps.py index 95b3cd3..1f60ff9 100644 --- a/users/apps.py +++ b/users/apps.py @@ -4,6 +4,6 @@ from django.apps import AppConfig class UsersConfig(AppConfig): name = 'users' - # Hunzufügen der Signals für den User + # Hinzufügen der Signals für den User def ready(self): import users.signals diff --git a/users/models.py b/users/models.py index 9a31a4c..e36997b 100644 --- a/users/models.py +++ b/users/models.py @@ -2,10 +2,10 @@ from django.db import models from django.contrib.auth.models import User, AbstractBaseUser from django.conf import settings from PIL import Image - +from django.utils import timezone # MAKE EMAIL UNIQUE -from django.contrib.auth.models import AbstractUser, User -from django.contrib.auth.models import Permission +from django.contrib.auth.models import AbstractUser, User, Group, Permission +from django.contrib.contenttypes.models import ContentType # UNIQUE and NO BLANK fields while user-registration @@ -14,16 +14,15 @@ User._meta.get_field('email').blank = False User._meta.get_field('first_name').blank = False User._meta.get_field('last_name').blank = False +# PATH FOR AGENCYPIC def picturepath_agency(instance, filename): # file will be uploaded to MEDIA_ROOT/agency_// return 'agency_{0}/agencystats/{1}'.format(instance.pk, filename) - +# PATH FOR PROFILEPICS def picturepath_user(instance, filename): # file will be uploaded to MEDIA_ROOT/agency_// return 'agency_{0}/agencystats/profilepics/{1}'.format(instance.pk, filename) - - ''' Class Agency @@ -45,6 +44,10 @@ class Agency(models.Model): phone = models.CharField(default="", max_length=50, blank=True) agencypic = models.ImageField(default='agencymain/default.jpg', upload_to=picturepath_agency, blank=True) + # MONEY + balance = models.FloatField(default=0.0, max_length=9, blank=True) + nextdebiting = models.DateTimeField(default=timezone.now, blank=True) + def __str__(self): return f'{self.name}' @@ -105,6 +108,9 @@ class Profile(models.Model): visible = models.BooleanField(default=True) persnumber = models.CharField(default="", max_length=50, blank=True) + # TOOLTIPPS + showtooltips = models.BooleanField(default=True) + # NOTIFICATIONS #NEWS # Mitteilung bei neuen News innerhalb der Agentur @@ -158,19 +164,32 @@ class Profile(models.Model): else: return "/media/userprofilepics/default.jpg" - # PERMISSIONS - Über alle Modelle hinweg, in der url.py wird dann die route verhindert! - # Im template: if perms.users.PERMISSION + + + +''' + CLASS AgencyGroup + + Hier werden die Gruppen mit der Agency verbunden + +''' +class AgencyGroup(models.Model): + group = models.OneToOneField(Group, on_delete=models.CASCADE) + agency = models.ForeignKey(Agency, on_delete=models.PROTECT) + agencygroupname = models.CharField(max_length=60, blank=True) + savefordel = models.BooleanField(default=False) + + # PERMISSIONS - Über alle Modelle hinweg, in der url.py wird dann die route verhindert! + class Meta: permissions = [ - ('agency_change', 'Agenturinformationen verändern'), - ('users_usermanagement', 'Benutzer bearbeiten'), - ('areas_management', 'Bereiche bearbeiten'), - ('tasks_management', 'Aufgabenbereiche bearbeiten'), - ('standard_management', 'Standards bearbeiten und freischalten'), - ('news_management', 'News bearbeiten und veröffentlichen'), - ('ql_management', 'Quicklinks bearbeiten und erstellen') + ('agency', 'Agenturinformationen verändern'), + ('users', 'Benutzer bearbeiten'), + ('group', 'Gruppen bearbeiten'), + ('areas', 'Bereiche bearbeiten'), + ('tasks', 'Tätigkeiten bearbeiten'), + ('standard', 'Standards bearbeiten und freischalten'), + ('news', 'News bearbeiten und veröffentlichen'), + ('quciklinks', 'Quicklinks bearbeiten und erstellen') ] - - - diff --git a/users/signals.py b/users/signals.py index 52d51a9..daabba0 100644 --- a/users/signals.py +++ b/users/signals.py @@ -1,10 +1,10 @@ from django.db.models.signals import post_save, pre_delete -from django.contrib.auth.models import User +from django.contrib.auth.models import User, Group from django.dispatch import receiver -from .models import Profile, Agency +from .models import Profile, Agency, AgencyGroup from django.contrib.auth.models import Permission - +# SIGNALS FOR USER @receiver(post_save, sender=User) def create_profile(sender, instance, created, **kwargs): if created: @@ -20,9 +20,24 @@ def create_profile(sender, instance, created, **kwargs): for ele in temprof._meta.permissions: tempperm = Permission.objects.get(codename=ele[0]) tempuser.user_permissions.add(tempperm) - tempuser.profile.func = 'lead' + #tempuser.profile.func = 'lead' tempuser.save() @receiver(post_save, sender=User) def save_profile(sender, instance, **kwargs): - instance.profile.save() \ No newline at end of file + instance.profile.save() + + +# SIGNALS FOR GROUPS +''' +@receiver(post_save, sender=Group) +def create_group(sender, instance, created, **kwargs): + print("NEW GROUP SIGNAL") + if created: + AgencyGroup.objects.create(group=instance, agency=instance.agency) + +@receiver(post_save, sender=Group) +def save_group(sender, instance, **kwargs): + print("GROUP SAVED SIGNAL") + #instance.group.save() +''' \ No newline at end of file diff --git a/users/static/users/css/custom.css b/users/static/users/css/custom.css index e3f5710..8d918c4 100644 --- a/users/static/users/css/custom.css +++ b/users/static/users/css/custom.css @@ -67,6 +67,7 @@ body{ margin-bottom: 20px; } + .default_content_style { margin-left: 212px !important; } @@ -191,5 +192,4 @@ right connector from last child*/ } /*Thats all. I hope you enjoyed it. -Thanks :)*/ - +Thanks :)*/ \ No newline at end of file diff --git a/users/templates/users/base.html b/users/templates/users/base.html index 68906d7..464c87f 100644 --- a/users/templates/users/base.html +++ b/users/templates/users/base.html @@ -44,7 +44,6 @@ - @@ -374,7 +373,17 @@ + +{% if request.user.profile.showtooltips %} +{% endif %} + +