From 7427289570c576af2c308365e976e11bf17d1dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 29 Dec 2015 19:40:38 +0100 Subject: [PATCH] Version 15.80 --- css/{swad15.79.css => swad15.80.css} | 38 +++++++++--- icon/follow64x64.png | Bin 0 -> 1935 bytes icon/following64x64.png | Bin 0 -> 2259 bytes icon/unfollow320x320.png | Bin 7043 -> 6748 bytes swad_changelog.h | 5 +- swad_follow.c | 85 +++++++++++++++++++++++---- swad_follow.h | 3 +- swad_notification.c | 2 +- swad_profile.c | 17 +++++- swad_record.c | 35 +++++------ swad_text.c | 21 +++++++ 11 files changed, 160 insertions(+), 46 deletions(-) rename css/{swad15.79.css => swad15.80.css} (99%) create mode 100644 icon/follow64x64.png create mode 100644 icon/following64x64.png diff --git a/css/swad15.79.css b/css/swad15.80.css similarity index 99% rename from css/swad15.79.css rename to css/swad15.80.css index 02c1b885..36a47e26 100644 --- a/css/swad15.79.css +++ b/css/swad15.80.css @@ -1359,7 +1359,7 @@ a:hover img.CENTRE_PHOTO_SHOW left:-300px; top:-400px; padding:6px; - background-color:rgba(255,255,255,0.8); + background-color:rgba(255,255,255,0.95); border-width:1px; border-style:solid; border-color:#C0C0C0; @@ -1855,27 +1855,49 @@ a:hover img.CENTRE_PHOTO_SHOW opacity:0.67; } -#num_following +#following_side { display:inline-block; box-sizing:border-box; width:50%; padding-right:10px; - text-align:right; } -#num_followers +#followers_side { display:inline-block; box-sizing:border-box; width:50%; padding-left:10px; - text-align:left; } -.FOLLOW +.FOLLOW_SIDE { - display:inline-block; - min-width:125px; + display:table; + box-sizing:border-box; + width:100%; + } +#follows_me + { + display:table-cell; + box-sizing:border-box; + padding-right:20px; + text-align:right; + vertical-align:middle; + } +#follow_usr + { + display:table-cell; + height:60px; + box-sizing:border-box; + padding-left:20px; + text-align:left; + vertical-align:middle; + } +.FOLLOW_BOX + { + display:table-cell; + width:140px; text-align:center; + vertical-align:middle; } .FOLLOW_NUM { diff --git a/icon/follow64x64.png b/icon/follow64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..b35d73507e824669ace71680bee56026522153cd GIT binary patch literal 1935 zcmV;A2XOd_P)hhot@pq ztZ5+)jYUITglQGEQovZK6ug+-wbzTlZ9sl-s2Wv@fCQydlpxabK+-mmA4;o4LKQ_- zk@8R_!5F(_*FPA9>>w*DZepjweMqq4ICg9m@Bhr~J$3Bm!!{Dh?r(}6~IfjRa zzkVK2Qc_}Hw{G2QLWsl6ydV;Zh^3T&8W4pvUu+K$3lR=a-Me=$3IVoEgf3jT007W+{V&-t{ucW}K-cw?%)B9+^I8%E zs;a7<1h6jK3NZ7d9*?I!?}MO}vKoNH0v#MgRGrrZ?Ay1`1>i9Y^?0nVuFjpe1jOU< z?-0>L7V5Dw8jY^X+aNeGF`=ods#z7N(&@B1IXS83tp{kD#ze%HB_l+z+wGjU1gu!G zVp0e(X<0#{D6y3*SH|;}fU{@Mjz}rTtWv@>&5;8K4tzeJTqeoVbkdg97ytmOs`eU& z;lG~>a=sH*)3gt3YisA-0_V=1!`{7nonvETj{`98wq^P9u*(CLl67Ir;ZYg~!LoznD#jXf&Dt;L7?ISiO2Ru3Wh?KtxRz1i<&MUcK6%sl2Z1 zv%Y{-D&@2!1{^(lbb1>+CxjTvqVXdxm+Kh-ICkt<{$_%Q4&5Zo$McJTy1KeMo;x}^rhof%T@Nzz!~+yS6S}SkFJHdg2LNqt zZF8=j(}sxO??)&Uy7gRLUHzz(@?l-qi;9YhhFe-%{sRCzckc8_DSt1e+_*ru|CbQr z<&KVy3sYUD_0ec_jizZ4X8tl94u3W+>+|^#4u|g;zjfkeQhJp?n` z0sIt86vFLxKR(m7_L3nW5{W#qRE=k52vt=#=6c~&DkX2d0U;JO2H4{9_}bYL3yT&N zn>KCwR%d7D@Kn9#b2H znM~&VTxRAq@p$}<$K!cNRn?AEDrL;!)@FZy|K;n~uO}@bAe~MlmoeZr!yWCJ~hb_}mf#R8>vi&&N(#Y{|`6xahFpgU;Jyz=v4E5W23nEolPWZuj4oGy#TT z{8v$wzvg?&Y8e5cP)HviA3w^>@8zTMMC5Qfoz@YsWy=;^yLN3f8)yU_oILU3Mim}0t(0o{|5vT VHK@*)9Wwv`002ovPDHLkV1gOvo#+4n literal 0 HcmV?d00001 diff --git a/icon/following64x64.png b/icon/following64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..d7996e4cc8cb4aa4163084d5d186b753b0ffbd59 GIT binary patch literal 2259 zcmV;^2rT!BP)j}sf?8}5?D3BixVe~tB|T=Ux6`ae@4ax($pcgYJce3D$~l;7NH7ESEeEm z3up_;@ucS+;E1{mRP9e;+z@NUmMG7PoKT z{`@H*J3HIBeEIU%g%Cew=9ow%B9>DAuB)r-=Y4&B+Egn*#M0Pqw*!F4$;o-0h<3+n zd{7ZYM7vh3SW#m#nS{+|`+O*Ha3FcjeNc=lPX)=dCVUS2*W1Wb#jQA0xm06^2UcjICFDEmS{)3k%koEOi26Osc8 z3kzQYusq%qVCE%ev-vwop9H0pB>+qbn1hLkN|Ks@EnBvv0a%*Ac`U7{sK`iK0^Dx* zJR)ckphB!CwCn% zGBR=kz)%9_Fcj=NVaRnv{v9;|Sy@?VZ*T7+qSFaTfT!Er+q<%|vJz&z%Q^a6xSS8~ zg@}lXfW3S7hQeT{5TYlJ$*)IIl%4u9;*FreS-B3p2jEPu1KVBB(fiSFhYJe}(c0RI z!otF@`h31iLWrj-i=~tvMN!tZwzhs0>N`QwR{(SZcqUZW0odnq;x*t2M`9Hf73l8n z9{qp)`t{JYcfo=Mmkb7jortDSFzY|iG_B&og$o_}z8^PstVU<92KqaJ%+*i;bOFfI z=W_t&%+>fLb2UDq2nQZ$Y-}9;Us6)CL`ped)3o&T^z_?xb#>hUV6j+=rIf#xQm%b>}_djX$qb)i^YPLmX@dS{vrT>(Rn`NQO9FL zVB^M(W+B9n0jvNppPAEz5O=+RF%Y}i0Th#88aNSX`0q8r5rwg{ycBpx^>pATepr#DQy6ZLWsWx0)g#B)JH^66lJ8TsYy=I_;~>S z24G1PkM&XL$SZW}W4GIz1_uX=#@qNX^L>-a^fRy5ds02gCu!}>^j4gC@p|(QBjf2=kwJ9P$yc_646Z}8e!&p z54oYa%sic$7wcD?pv-I2)6;)cTU*;7G+=HpZu0>Q1NfE8iGxp4fll_z0K5<2`SBK@ zpku269B?^Y5Hat9> z2B3Hncc2VFzhYGC436YA0C+QaJ)krGSOnEPPWHP290+-ROku{%MgZTKp*7|o_}o2 zhY>J1IQZNodtU{xqqMYi{*A+c%LzY#EdZLMFbDvijWXt|$6G-FKq!i`29u9`zu*6U zWo4x)=$ZQfzN=FLKSh4QlVU!M0JqznGZklXKA*3+x3~9#?%?7+04sntOzgvrsA4{h z0F%iyC9k9aK-09Z*=)9p-QC@Whx-fogZbg?1iFhV=EEMcTCMEycraD3rvX4!)#D2n zE_56@a>T8x?v6!~>BDOKXf{w|6fo7s1Ay1-{dP}J&szYHwPbEAIU(kl4jllpL$7s+xKI$e22zN#88mb$&b;7A;zoOGM8n6A4nvm2S8D+4A!8lN}u$f&Na6 zWUfXFfI$Fv0lWs__x+vV{?4ZxOJrnZyoV$MGsENYlw7-ZtzB0q+yU?^fb9T|yPS{{ ziTOy&pwaL59|!~jRmn(1T3Xu0-rnBgD_5=zCt?hP%jF8poH_H7s;XZhqUFg%01?6O z_b*meb=Hj=H|i5HhFHITJ+5B8dRI}DA4n-*0q|K8aqyXx@)d)@unz#%ty>p=k^#VM zHlwYr4Fv@ShP1S_*+K}55Te-U^Q}UR-xJ3p2P%s44=H7nl(NO`cK2Vtd^r%BV+tvx hkU|P6q>w_q@IQlimc_+2=HdVV002ovPDHLkV1mYdB;x=8 literal 0 HcmV?d00001 diff --git a/icon/unfollow320x320.png b/icon/unfollow320x320.png index d8990c5273cb68766f90c7b662d80f7fcb30a7dc..266121d786cffc19bc391e29db45dc80eb2129c8 100644 GIT binary patch literal 6748 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 Nl;qV=rE=(i{{?13lJ)=q literal 7043 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 diff --git a/swad_changelog.h b/swad_changelog.h index 93f4f0a6..01a2be5b 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -115,13 +115,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.79.2 (2015-12-29)" -#define CSS_FILE "swad15.79.css" +#define Log_PLATFORM_VERSION "SWAD 15.80 (2015-12-29)" +#define CSS_FILE "swad15.80.css" #define JS_FILE "swad15.77.7.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* + Version 15.80: Dec 29, 2015 Changes in layout of user's profile. (188944 lines) Version 15.79.2: Dec 29, 2015 Include my public activity in timeline. (188838 lines) Version 15.79.1: Dec 29, 2015 Changes in layout of user's profile. (188836 lines) Version 15.79: Dec 29, 2015 Show timeline of a selected user. diff --git a/swad_follow.c b/swad_follow.c index d6d822b3..400b9bd1 100644 --- a/swad_follow.c +++ b/swad_follow.c @@ -121,28 +121,90 @@ unsigned Fol_GetNumFollowers (long UsrCod) /*****************************************************************************/ void Fol_ShowFollowingAndFollowers (const struct UsrData *UsrDat, - unsigned NumFollowing,unsigned NumFollowers) + unsigned NumFollowing,unsigned NumFollowers, + bool UsrFollowsMe,bool IFollowUsr) { extern const char *Txt_Following; extern const char *Txt_Followers; + extern const char *Txt_Following_unfollow; + extern const char *Txt_Unfollow; + extern const char *Txt_Follow; + bool ItsMe = (UsrDat->UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod); /***** Start section *****/ fprintf (Gbl.F.Out,"
"); /***** Followed users *****/ - fprintf (Gbl.F.Out,"
"); + fprintf (Gbl.F.Out,"
" + "
"); + + /* User follows me? */ + fprintf (Gbl.F.Out,"
"); + if (UsrFollowsMe) + fprintf (Gbl.F.Out,"TE SIGUE"); // Need translation!!!! + fprintf (Gbl.F.Out,"
"); + + /* Number of followed */ Fol_ShowNumberOfFollowingOrFollowers (UsrDat, NumFollowing, ActSeeFlg,Txt_Following); - fprintf (Gbl.F.Out,"
"); + + /* End following side */ + fprintf (Gbl.F.Out,"
" + "
"); /***** Followers *****/ - fprintf (Gbl.F.Out,"
"); + fprintf (Gbl.F.Out,"
" + "
"); + + /* Number of followers */ Fol_ShowNumberOfFollowingOrFollowers (UsrDat, NumFollowers, ActSeeFlr,Txt_Followers); + + /* I follow user? */ + fprintf (Gbl.F.Out,"
"); + if (!ItsMe) + { + if (IFollowUsr) + { + Act_FormStart (ActUnfUsr); + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_Following_unfollow,"REC_DAT_BOLD"); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "
", + Gbl.Prefs.IconsURL, + Txt_Unfollow,Txt_Following_unfollow); + Act_FormEnd (); + } + else // I do not follow user + { + Act_FormStart (ActFolUsr); + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_Follow,"REC_DAT_BOLD"); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_Follow,Txt_Follow); + Act_FormEnd (); + } + } fprintf (Gbl.F.Out,"
"); + /* End followers side */ + fprintf (Gbl.F.Out,"
" + "
"); + /***** End section *****/ fprintf (Gbl.F.Out,"
"); } @@ -160,7 +222,7 @@ static void Fol_ShowNumberOfFollowingOrFollowers (const struct UsrData *UsrDat, extern const char *The_ClassFormBold[The_NUM_THEMES]; /***** Start container *****/ - fprintf (Gbl.F.Out,"
"); + fprintf (Gbl.F.Out,"
"); /***** Number *****/ if (NumUsrs) @@ -369,6 +431,7 @@ void Fol_ListFollowers (void) static void Fol_ShowFollowedOrFollower (const struct UsrData *UsrDat) { extern const char *Txt_View_public_profile; + extern const char *Txt_Following_unfollow; extern const char *Txt_Unfollow; extern const char *Txt_Follow; bool ShowPhoto; @@ -382,28 +445,28 @@ static void Fol_ShowFollowedOrFollower (const struct UsrData *UsrDat) Gbl.Usrs.Me.Logged && Gbl.Usrs.Me.UsrDat.UsrCod != UsrDat->UsrCod) { - if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,UsrDat->UsrCod)) + if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,UsrDat->UsrCod)) // I follow user { Act_FormStart (ActUnfUsr); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); - Act_LinkFormSubmit (Txt_Unfollow,NULL); + Act_LinkFormSubmit (Txt_Following_unfollow,NULL); fprintf (Gbl.F.Out,"
" - "\"%s\"" "
" "", Gbl.Prefs.IconsURL, - Txt_Unfollow,Txt_Unfollow); + Txt_Unfollow,Txt_Following_unfollow); Act_FormEnd (); } - else + else // I do not follow this user { Act_FormStart (ActFolUsr); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Act_LinkFormSubmit (Txt_Follow,NULL); fprintf (Gbl.F.Out,"
" - "\"%s\"" "
" diff --git a/swad_follow.h b/swad_follow.h index 60787d2c..4f894fd2 100644 --- a/swad_follow.h +++ b/swad_follow.h @@ -47,7 +47,8 @@ bool Fol_CheckUsrIsFollowerOf (long FollowerCod,long FollowedCod); unsigned Fol_GetNumFollowing (long UsrCod); unsigned Fol_GetNumFollowers (long UsrCod); void Fol_ShowFollowingAndFollowers (const struct UsrData *UsrDat, - unsigned NumFollowing,unsigned NumFollowers); + unsigned NumFollowing,unsigned NumFollowers, + bool UsrFollowsMe,bool IFollowUsr); void Fol_ListFollowing (void); void Fol_ListFollowers (void); diff --git a/swad_notification.c b/swad_notification.c index 9b56688a..14208580 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -213,7 +213,7 @@ static const char *Ntf_Icons[Ntf_NUM_NOTIFY_EVENTS] = "survey16x16.gif", // Ntf_EVENT_SURVEY /* Profile tab */ - "follow64x64.gif", // Ntf_EVENT_FOLLOWER + "follow64x64.png", // Ntf_EVENT_FOLLOWER }; /*****************************************************************************/ diff --git a/swad_profile.c b/swad_profile.c index 0ba2c838..c8da5f54 100644 --- a/swad_profile.c +++ b/swad_profile.c @@ -220,6 +220,8 @@ bool Prf_ShowUserProfile (void) { unsigned NumFollowing; unsigned NumFollowers; + bool UsrFollowsMe; + bool IFollowUsr; /***** Check if I can see the public profile *****/ if (Pri_ShowIsAllowed (Gbl.Usrs.Other.UsrDat.ProfileVisibility, @@ -242,11 +244,22 @@ bool Prf_ShowUserProfile (void) /***** Show details of user's profile *****/ Prf_ShowDetailsUserProfile (&Gbl.Usrs.Other.UsrDat); - /***** Show following and followers *****/ + /***** Count following and followers *****/ NumFollowing = Fol_GetNumFollowing (Gbl.Usrs.Other.UsrDat.UsrCod); NumFollowers = Fol_GetNumFollowers (Gbl.Usrs.Other.UsrDat.UsrCod); + UsrFollowsMe = false; + if (NumFollowing) + UsrFollowsMe = Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Other.UsrDat.UsrCod, + Gbl.Usrs.Me.UsrDat.UsrCod); + IFollowUsr = false; + if (NumFollowers) + IFollowUsr = Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.UsrCod); + + /***** Show following and followers *****/ Fol_ShowFollowingAndFollowers (&Gbl.Usrs.Other.UsrDat, - NumFollowing,NumFollowers); + NumFollowing,NumFollowers, + UsrFollowsMe,IFollowUsr); return true; } diff --git a/swad_record.c b/swad_record.c index 6d18bb02..25a2d362 100644 --- a/swad_record.c +++ b/swad_record.c @@ -1956,6 +1956,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, extern const char *Txt_View_works; extern const char *Txt_See_exams; extern const char *Txt_Attendance; + extern const char *Txt_Following_unfollow; extern const char *Txt_Unfollow; extern const char *Txt_Follow; extern const char *Txt_View_public_profile; @@ -2164,8 +2165,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, "
" "", Gbl.Prefs.IconsURL, - Txt_Edit, - Txt_Edit); + Txt_Edit,Txt_Edit); Act_FormEnd (); } @@ -2215,8 +2215,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, "
" "", Gbl.Prefs.IconsURL, - Txt_Admin_user, - Txt_Admin_user); + Txt_Admin_user,Txt_Admin_user); Act_FormEnd (); } @@ -2243,8 +2242,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, "" "", Gbl.Prefs.IconsURL, - Txt_View_works, - Txt_View_works); + Txt_View_works,Txt_View_works); Act_FormEnd (); /***** Button to view user's test exams *****/ @@ -2265,8 +2263,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, "" "", Gbl.Prefs.IconsURL, - Txt_See_exams, - Txt_See_exams); + Txt_See_exams,Txt_See_exams); Act_FormEnd (); /***** Button to view user's attendance *****/ @@ -2293,8 +2290,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, "" "", Gbl.Prefs.IconsURL, - Txt_Attendance, - Txt_Attendance); + Txt_Attendance,Txt_Attendance); Act_FormEnd (); } } @@ -2313,46 +2309,43 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, "" "", Gbl.Prefs.IconsURL, - Txt_Write_a_message, - Txt_Write_a_message); + Txt_Write_a_message,Txt_Write_a_message); Act_FormEnd (); /***** Button to follow / unfollow *****/ if (TypeOfView == Rec_RECORD_PUBLIC && !ItsMe) { - if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,UsrDat->UsrCod)) + if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,UsrDat->UsrCod)) // I follow user { Act_FormStart (ActUnfUsr); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); - Act_LinkFormSubmit (Txt_Unfollow,"REC_DAT_BOLD"); + Act_LinkFormSubmit (Txt_Following_unfollow,"REC_DAT_BOLD"); fprintf (Gbl.F.Out,"
" - "\"%s\"" "
" "", Gbl.Prefs.IconsURL, - Txt_Unfollow, - Txt_Unfollow); + Txt_Unfollow,Txt_Following_unfollow); Act_FormEnd (); } - else + else // I do not follow user { Act_FormStart (ActFolUsr); Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); Act_LinkFormSubmit (Txt_Follow,"REC_DAT_BOLD"); fprintf (Gbl.F.Out,"
" - "\"%s\"" "
" "", Gbl.Prefs.IconsURL, - Txt_Follow, - Txt_Follow); + Txt_Follow,Txt_Follow); Act_FormEnd (); } } diff --git a/swad_text.c b/swad_text.c index 03cef583..0ca92be7 100644 --- a/swad_text.c +++ b/swad_text.c @@ -12045,6 +12045,27 @@ const char *Txt_Following = "Seguinte"; #endif +const char *Txt_Following_unfollow = +#if L==1 + "Següent, deixar de seguir"; +#elif L==2 + "Folgende, entfolgen"; +#elif L==3 + "Following, unfollow"; +#elif L==4 + "Siguiendo, dejar de seguir"; +#elif L==5 + "Suivant, se désabonner"; +#elif L==6 + "Siguiendo, dejar de seguir"; // Okoteve traducción +#elif L==7 + "Following, smetti"; +#elif L==8 + "Następujący, nie obserwuj"; +#elif L==9 + "Seguinte, deixar de seguir"; +#endif + const char *Txt_For_security_enter_your_password = #if L==1 "Per a més seguretat, introdueixi la seva contrasenya";