Version 15.91

This commit is contained in:
Antonio Cañas Vargas 2016-01-02 14:36:34 +01:00
parent a0c5cfdf57
commit e6b1957937
3 changed files with 179 additions and 135 deletions

View File

@ -117,13 +117,15 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.90 (2016-01-02)" #define Log_PLATFORM_VERSION "SWAD 15.91 (2016-01-02)"
#define CSS_FILE "swad15.88.1.css" #define CSS_FILE "swad15.88.1.css"
#define JS_FILE "swad15.77.7.js" #define JS_FILE "swad15.77.7.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // 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 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 15.91: Jan 02, 2016 Every social note can be shared.
Fixed bug when unsharing a social note. (190161 lines)
Version 15.90: Jan 02, 2016 Change in fields of database table that stores social notes. (190122 lines) Version 15.90: Jan 02, 2016 Change in fields of database table that stores social notes. (190122 lines)
6 changes necessary in database: 6 changes necessary in database:
ALTER TABLE social_notes ADD COLUMN HieCod INT NOT NULL DEFAULT -1 AFTER UsrCod; ALTER TABLE social_notes ADD COLUMN HieCod INT NOT NULL DEFAULT -1 AFTER UsrCod;

View File

@ -78,7 +78,7 @@ static const Act_Action_t Soc_DefaultActions[Soc_NUM_SOCIAL_NOTES] =
/* Users tab */ /* Users tab */
/* Social tab */ /* Social tab */
ActSeeSocTmlGbl, // Soc_NOTE_SOCIAL_POST (action not used) ActUnk, // Soc_NOTE_SOCIAL_POST (action not used)
ActSeeFor, // Soc_NOTE_FORUM_POST ActSeeFor, // Soc_NOTE_FORUM_POST
/* Messages tab */ /* Messages tab */
@ -153,12 +153,13 @@ static long Soc_GetParamPubCod (void);
static void Soc_ShareSocialPublishing (void); static void Soc_ShareSocialPublishing (void);
static void Soc_UnshareSocialPublishing (void); static void Soc_UnshareSocialPublishing (void);
static void Soc_UnshareASocialPublishingFromDB (const struct SocialNote *SocNot);
static void Soc_RequestRemovalSocialPublishing (void); static void Soc_RequestRemovalSocialPublishing (void);
static void Soc_RemoveSocialPublishing (void); static void Soc_RemoveSocialPublishing (void);
static void Soc_RemoveASocialPublishingFromDB (const struct SocialPublishing *SocPub,
static void Soc_DeleteASocialPublishingFromDB (const struct SocialPublishing *SocPub,
const struct SocialNote *SocNot); const struct SocialNote *SocNot);
static void Soc_CheckAndDeleteASocialNoteFromDB (const struct SocialNote *SocNot);
static bool Soc_CheckIfNoteIsYetPublishedByMe (long NotCod); static bool Soc_CheckIfNoteIsYetPublishedByMe (long NotCod);
static unsigned long Soc_GetNumPubsOfANote (long NotCod); static unsigned long Soc_GetNumPubsOfANote (long NotCod);
@ -332,19 +333,19 @@ static void Soc_ShowTimeline (const char *Query,Act_Action_t UpdateAction)
static void Soc_GetDataOfSocialPublishingFromRow (MYSQL_ROW row,struct SocialPublishing *SocPub) static void Soc_GetDataOfSocialPublishingFromRow (MYSQL_ROW row,struct SocialPublishing *SocPub)
{ {
/* Get social publishing code (row[0]) */ /* Get social publishing code (row[0]) */
SocPub->PubCod = Str_ConvertStrCodToLongCod (row[0]); SocPub->PubCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get author's code (row[1]) */ /* Get author's code (row[1]) */
SocPub->AuthorCod = Str_ConvertStrCodToLongCod (row[1]); SocPub->AuthorCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get publisher's code (row[2]) */ /* Get publisher's code (row[2]) */
SocPub->PublisherCod = Str_ConvertStrCodToLongCod (row[2]); SocPub->PublisherCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get social note code (row[3]) */ /* Get social note code (row[3]) */
SocPub->NotCod = Str_ConvertStrCodToLongCod (row[3]); SocPub->NotCod = Str_ConvertStrCodToLongCod (row[3]);
/* Get time of the note (row[4]) */ /* Get time of the note (row[4]) */
SocPub->DateTimeUTC = Dat_GetUNIXTimeFromStr (row[4]); SocPub->DateTimeUTC = Dat_GetUNIXTimeFromStr (row[4]);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -404,7 +405,7 @@ static void Soc_WriteSocialNote (const struct SocialPublishing *SocPub,
"PHOTO60x80",Pho_ZOOM); "PHOTO60x80",Pho_ZOOM);
fprintf (Gbl.F.Out,"</div>"); fprintf (Gbl.F.Out,"</div>");
/***** Right: author's name, time and summary *****/ /***** Right: author's name, time, summary and buttons *****/
fprintf (Gbl.F.Out,"<div class=\"SOCIAL_RIGHT_CONTAINER\">"); fprintf (Gbl.F.Out,"<div class=\"SOCIAL_RIGHT_CONTAINER\">");
/* Write author's full name and nickname */ /* Write author's full name and nickname */
@ -418,32 +419,13 @@ static void Soc_WriteSocialNote (const struct SocialPublishing *SocPub,
/* Write date and time */ /* Write date and time */
Soc_WriteNoteDate (SocNot->DateTimeUTC); Soc_WriteNoteDate (SocNot->DateTimeUTC);
/* Write content of the note */
if (SocNot->NoteType == Soc_NOTE_SOCIAL_POST) if (SocNot->NoteType == Soc_NOTE_SOCIAL_POST)
{ {
/* Write post content */ /* Write post content */
fprintf (Gbl.F.Out,"<div class=\"DAT\">"); fprintf (Gbl.F.Out,"<div class=\"DAT\">");
Soc_GetAndWriteSocialPost (SocNot->Cod); Soc_GetAndWriteSocialPost (SocNot->Cod);
fprintf (Gbl.F.Out,"</div>"); fprintf (Gbl.F.Out,"</div>");
/***** Put icons to share/unshare/remove *****/
if (Gbl.Usrs.Me.Logged)
{
if (UsrDat->UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // I am the author
{
if (PutIconRemove)
/* Put icon to remove this publishing */
Soc_PutFormToRemoveSocialPublishing (SocPub->PubCod);
}
else // I am not the author
{
if (Soc_CheckIfNoteIsYetPublishedByMe (SocNot->NotCod)) // I have yet published this social note
/* Put icon to unshare this publishing */
Soc_PutFormToUnshareSocialPublishing (SocPub->PubCod);
else // I have not yet published this social note
/* Put icon to share this publishing */
Soc_PutFormToShareSocialPublishing (SocPub->PubCod);
}
}
} }
else else
{ {
@ -458,13 +440,14 @@ static void Soc_WriteSocialNote (const struct SocialPublishing *SocPub,
fprintf (Gbl.F.Out,"</div>"); fprintf (Gbl.F.Out,"</div>");
switch (SocNot->NoteType) switch (SocNot->NoteType)
{ {
case Soc_NOTE_INS_DOC_PUB_FILE: case Soc_NOTE_INS_DOC_PUB_FILE:
case Soc_NOTE_INS_SHA_PUB_FILE: case Soc_NOTE_INS_SHA_PUB_FILE:
/* Get institution data */ /* Get institution data */
Ins.InsCod = SocNot->HieCod; Ins.InsCod = SocNot->HieCod;
Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA);
/* Write location (institution) in hierarchy */
fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>", fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>",
Txt_Institution,Ins.ShortName); Txt_Institution,Ins.ShortName);
break; break;
@ -474,6 +457,7 @@ static void Soc_WriteSocialNote (const struct SocialPublishing *SocPub,
Ctr.CtrCod = SocNot->HieCod; Ctr.CtrCod = SocNot->HieCod;
Ctr_GetDataOfCentreByCod (&Ctr); Ctr_GetDataOfCentreByCod (&Ctr);
/* Write location (centre) in hierarchy */
fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>", fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>",
Txt_Centre,Ctr.ShortName); Txt_Centre,Ctr.ShortName);
break; break;
@ -483,6 +467,7 @@ static void Soc_WriteSocialNote (const struct SocialPublishing *SocPub,
Deg.DegCod = SocNot->HieCod; Deg.DegCod = SocNot->HieCod;
Deg_GetDataOfDegreeByCod (&Deg); Deg_GetDataOfDegreeByCod (&Deg);
/* Write location (degree) in hierarchy */
fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>", fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>",
Txt_Degree,Deg.ShortName); Txt_Degree,Deg.ShortName);
break; break;
@ -494,22 +479,46 @@ static void Soc_WriteSocialNote (const struct SocialPublishing *SocPub,
Crs.CrsCod = SocNot->HieCod; Crs.CrsCod = SocNot->HieCod;
Crs_GetDataOfCourseByCod (&Crs); Crs_GetDataOfCourseByCod (&Crs);
/* Write location (course) in hierarchy */
fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>", fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>",
Txt_Course,Crs.ShortName); Txt_Course,Crs.ShortName);
break; break;
case Soc_NOTE_FORUM_POST: case Soc_NOTE_FORUM_POST:
/* Write forum name */
fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>", fprintf (Gbl.F.Out,"<div class=\"DAT\">%s: %s</div>",
Txt_Forum,ForumName); Txt_Forum,ForumName);
break; break;
default: default:
break; break;
} }
/* Write content of the note */ /* Write note summary */
Soc_GetNoteSummary (SocNot,SummaryStr,Soc_MAX_BYTES_SUMMARY); Soc_GetNoteSummary (SocNot,SummaryStr,Soc_MAX_BYTES_SUMMARY);
fprintf (Gbl.F.Out,"<div class=\"DAT\">%s</div>",SummaryStr); fprintf (Gbl.F.Out,"<div class=\"DAT\">%s</div>",SummaryStr);
} }
/* Put icons to share/unshare/remove */
if (Gbl.Usrs.Me.Logged)
{
if (UsrDat->UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) // I am the author
{
if (PutIconRemove)
/* Put icon to remove this publishing */
Soc_PutFormToRemoveSocialPublishing (SocPub->PubCod);
}
else // I am not the author
{
if (Soc_CheckIfNoteIsYetPublishedByMe (SocNot->NotCod))
// I have yet published this social note
/* Put icon to unshare this publishing */
Soc_PutFormToUnshareSocialPublishing (SocPub->PubCod);
else
// I have not yet published this social note
/* Put icon to share this publishing */
Soc_PutFormToShareSocialPublishing (SocPub->PubCod);
}
}
/* End of right part */ /* End of right part */
fprintf (Gbl.F.Out,"</div>"); fprintf (Gbl.F.Out,"</div>");
@ -943,7 +952,7 @@ static void Soc_PutFormToShareSocialPublishing (long PubCod)
static void Soc_PutFormToUnshareSocialPublishing (long PubCod) static void Soc_PutFormToUnshareSocialPublishing (long PubCod)
{ {
extern const char *Txt_Shared; extern const char *Txt_SOCIAL_PUBLISHING_Shared;
/***** Form to share social publishing *****/ /***** Form to share social publishing *****/
if (Gbl.Usrs.Other.UsrDat.UsrCod > 0) if (Gbl.Usrs.Other.UsrDat.UsrCod > 0)
@ -961,8 +970,8 @@ static void Soc_PutFormToUnshareSocialPublishing (long PubCod)
" class=\"ICON20x20\" />" " class=\"ICON20x20\" />"
"</div>", "</div>",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,
Txt_Shared, Txt_SOCIAL_PUBLISHING_Shared,
Txt_Shared); Txt_SOCIAL_PUBLISHING_Shared);
Act_FormEnd (); Act_FormEnd ();
} }
@ -1057,7 +1066,7 @@ void Soc_ShareSocialPubUsr (void)
static void Soc_ShareSocialPublishing (void) static void Soc_ShareSocialPublishing (void)
{ {
extern const char *Txt_Shared; extern const char *Txt_SOCIAL_PUBLISHING_Shared;
struct SocialPublishing SocPub; struct SocialPublishing SocPub;
bool ICanShare; bool ICanShare;
bool IHavePublishedThisNote; bool IHavePublishedThisNote;
@ -1081,7 +1090,7 @@ static void Soc_ShareSocialPublishing (void)
Soc_PublishSocialNoteInTimeline (&SocPub); Soc_PublishSocialNoteInTimeline (&SocPub);
/***** Message of success *****/ /***** Message of success *****/
Lay_ShowAlert (Lay_SUCCESS,Txt_Shared); Lay_ShowAlert (Lay_SUCCESS,Txt_SOCIAL_PUBLISHING_Shared);
} }
} }
} }
@ -1122,11 +1131,10 @@ void Soc_UnshareSocialPubUsr (void)
static void Soc_UnshareSocialPublishing (void) static void Soc_UnshareSocialPublishing (void)
{ {
extern const char *Txt_Unshared; extern const char *Txt_SOCIAL_PUBLISHING_Unshared;
struct SocialPublishing SocPub; struct SocialPublishing SocPub;
struct SocialNote SocNot; struct SocialNote SocNot;
bool ICanUnshare; bool ICanUnshare;
bool IHavePublishedThisNote;
/***** Get the code of the social publishing to unshare *****/ /***** Get the code of the social publishing to unshare *****/
SocPub.PubCod = Soc_GetParamPubCod (); SocPub.PubCod = Soc_GetParamPubCod ();
@ -1139,22 +1147,40 @@ static void Soc_UnshareSocialPublishing (void)
Soc_GetDataOfSocialNoteByCod (&SocNot); Soc_GetDataOfSocialNoteByCod (&SocNot);
ICanUnshare = (Gbl.Usrs.Me.Logged && ICanUnshare = (Gbl.Usrs.Me.Logged &&
SocPub.AuthorCod != Gbl.Usrs.Me.UsrDat.UsrCod); // I am not the author SocPub.AuthorCod != Gbl.Usrs.Me.UsrDat.UsrCod); // I have shared the note
if (ICanUnshare) if (ICanUnshare)
{ {
/***** Check if I have yet shared this social note *****/ /***** Delete social publishing from database *****/
IHavePublishedThisNote = Soc_CheckIfNoteIsYetPublishedByMe (SocPub.NotCod); Soc_UnshareASocialPublishingFromDB (&SocNot);
if (IHavePublishedThisNote)
{
/***** Delete social publishing from database *****/
Soc_DeleteASocialPublishingFromDB (&SocPub,&SocNot);
/***** Message of success *****/ /***** Message of success *****/
Lay_ShowAlert (Lay_SUCCESS,Txt_Unshared); Lay_ShowAlert (Lay_SUCCESS,Txt_SOCIAL_PUBLISHING_Unshared);
}
} }
} }
/*****************************************************************************/
/**************** Unshare a social publishing from database ******************/
/*****************************************************************************/
static void Soc_UnshareASocialPublishingFromDB (const struct SocialNote *SocNot)
{
char Query[128];
/***** Remove social publishing *****/
sprintf (Query,"DELETE FROM social_timeline"
" WHERE NotCod='%ld'"
" AND PublisherCod='%ld'" // I have share this note
" AND AuthorCod<>'%ld'", // I am not the author
SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryDELETE (Query,"can not remove a social publishing");
/***** Check if this was the unique publishing of this note.
If so, remove the note *****/
Soc_CheckAndDeleteASocialNoteFromDB (SocNot);
}
/*****************************************************************************/ /*****************************************************************************/
/**************** Request the removal of a social publishing *****************/ /**************** Request the removal of a social publishing *****************/
/*****************************************************************************/ /*****************************************************************************/
@ -1209,8 +1235,7 @@ static void Soc_RequestRemovalSocialPublishing (void)
Soc_GetDataOfSocialNoteByCod (&SocNot); Soc_GetDataOfSocialNoteByCod (&SocNot);
ICanRemove = (Gbl.Usrs.Me.Logged && ICanRemove = (Gbl.Usrs.Me.Logged &&
SocPub.PublisherCod == Gbl.Usrs.Me.UsrDat.UsrCod && SocPub.PublisherCod == Gbl.Usrs.Me.UsrDat.UsrCod);
SocNot.NoteType == Soc_NOTE_SOCIAL_POST);
if (ICanRemove) if (ICanRemove)
{ {
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
@ -1280,7 +1305,7 @@ void Soc_RemoveSocialPubUsr (void)
static void Soc_RemoveSocialPublishing (void) static void Soc_RemoveSocialPublishing (void)
{ {
extern const char *Txt_Comment_removed; extern const char *Txt_SOCIAL_PUBLISHING_Removed;
struct SocialPublishing SocPub; struct SocialPublishing SocPub;
struct SocialNote SocNot; struct SocialNote SocNot;
bool ICanRemove; bool ICanRemove;
@ -1296,15 +1321,14 @@ static void Soc_RemoveSocialPublishing (void)
Soc_GetDataOfSocialNoteByCod (&SocNot); Soc_GetDataOfSocialNoteByCod (&SocNot);
ICanRemove = (Gbl.Usrs.Me.Logged && ICanRemove = (Gbl.Usrs.Me.Logged &&
SocPub.PublisherCod == Gbl.Usrs.Me.UsrDat.UsrCod && SocPub.PublisherCod == Gbl.Usrs.Me.UsrDat.UsrCod);
SocNot.NoteType == Soc_NOTE_SOCIAL_POST);
if (ICanRemove) if (ICanRemove)
{ {
/***** Delete social publishing from database *****/ /***** Delete social publishing from database *****/
Soc_DeleteASocialPublishingFromDB (&SocPub,&SocNot); Soc_RemoveASocialPublishingFromDB (&SocPub,&SocNot);
/***** Message of success *****/ /***** Message of success *****/
Lay_ShowAlert (Lay_SUCCESS,Txt_Comment_removed); Lay_ShowAlert (Lay_SUCCESS,Txt_SOCIAL_PUBLISHING_Removed);
} }
} }
@ -1312,22 +1336,40 @@ static void Soc_RemoveSocialPublishing (void)
/**************** Delete a social publishing from database *******************/ /**************** Delete a social publishing from database *******************/
/*****************************************************************************/ /*****************************************************************************/
static void Soc_DeleteASocialPublishingFromDB (const struct SocialPublishing *SocPub, static void Soc_RemoveASocialPublishingFromDB (const struct SocialPublishing *SocPub,
const struct SocialNote *SocNot) const struct SocialNote *SocNot)
{
char Query[128];
/***** Remove social publishing *****/
sprintf (Query,"DELETE FROM social_timeline"
" WHERE PubCod='%ld'"
" AND NotCod='%ld'" // Extra check: this is the note
" AND PublisherCod='%ld'" // Extra check: I have published this note
" AND AuthorCod='%ld'", // Extra check: I am the author
SocPub->PubCod,
SocNot->NotCod,
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryDELETE (Query,"can not remove a social publishing");
/***** Check if this was the unique publishing of this note.
If so, remove the note *****/
Soc_CheckAndDeleteASocialNoteFromDB (SocNot);
}
/*****************************************************************************/
/**** Check if deletion is possible and delete a social note from database ***/
/*****************************************************************************/
static void Soc_CheckAndDeleteASocialNoteFromDB (const struct SocialNote *SocNot)
{ {
char Query[128]; char Query[128];
unsigned long NumPubs; unsigned long NumPubs;
/***** Remove social publishing *****/ /***** Count number of times this note is published *****/
sprintf (Query,"DELETE FROM social_timeline WHERE PubCod='%ld'",
SocPub->PubCod);
DB_QueryDELETE (Query,"can not remove a social publishing");
/***** Count number of times this note
is published in timeline after removal *****/
NumPubs = Soc_GetNumPubsOfANote (SocNot->NotCod); NumPubs = Soc_GetNumPubsOfANote (SocNot->NotCod);
if (NumPubs == 0) // There are no publishings of this note
if (NumPubs == 0) // This was the last publishing of this note
{ {
/***** Remove social note *****/ /***** Remove social note *****/
sprintf (Query,"DELETE FROM social_notes WHERE NotCod='%ld'", sprintf (Query,"DELETE FROM social_notes WHERE NotCod='%ld'",
@ -1386,7 +1428,7 @@ static void Soc_GetDataOfSocialPublishingByCod (struct SocialPublishing *SocPub)
" FROM social_timeline" " FROM social_timeline"
" WHERE PubCod='%ld'", " WHERE PubCod='%ld'",
SocPub->PubCod); SocPub->PubCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get data of social note")) if (DB_QuerySELECT (Query,&mysql_res,"can not get data of social publishing"))
{ {
/***** Get social note *****/ /***** Get social note *****/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -1441,19 +1483,19 @@ static void Soc_GetDataOfSocialNoteByCod (struct SocialNote *SocNot)
static void Soc_GetDataOfSocialNoteFromRow (MYSQL_ROW row,struct SocialNote *SocNot) static void Soc_GetDataOfSocialNoteFromRow (MYSQL_ROW row,struct SocialNote *SocNot)
{ {
/* Get social code (row[0]) */ /* Get social code (row[0]) */
SocNot->NotCod = Str_ConvertStrCodToLongCod (row[0]); SocNot->NotCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get note type (row[1]) */ /* Get note type (row[1]) */
SocNot->NoteType = Soc_GetSocialNoteFromDB ((const char *) row[1]); SocNot->NoteType = Soc_GetSocialNoteFromDB ((const char *) row[1]);
/* Get (from) user code (row[2]) */ /* Get (from) user code (row[2]) */
SocNot->UsrCod = Str_ConvertStrCodToLongCod (row[2]); SocNot->UsrCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get hierarchy code (row[3]) */ /* Get hierarchy code (row[3]) */
SocNot->HieCod = Str_ConvertStrCodToLongCod (row[3]); SocNot->HieCod = Str_ConvertStrCodToLongCod (row[3]);
/* Get file/post... code (row[4]) */ /* Get file/post... code (row[4]) */
SocNot->Cod = Str_ConvertStrCodToLongCod (row[4]); SocNot->Cod = Str_ConvertStrCodToLongCod (row[4]);
/* Get time of the note (row[5]) */ /* Get time of the note (row[5]) */
SocNot->DateTimeUTC = Dat_GetUNIXTimeFromStr (row[5]); SocNot->DateTimeUTC = Dat_GetUNIXTimeFromStr (row[5]);

View File

@ -4603,27 +4603,6 @@ const char *Txt_columns =
"colunas"; "colunas";
#endif #endif
const char *Txt_Comment_removed =
#if L==1
"Comentari eliminat.";
#elif L==2
"Kommentar entfernt.";
#elif L==3
"Comment removed.";
#elif L==4
"Comentario eliminado";
#elif L==5
"Commentaire supprim&eacute;.";
#elif L==6
"Comentario eliminado."; // Okoteve traducción
#elif L==7
"Commento rimosso.";
#elif L==8
"Komentarz usuniete.";
#elif L==9
"Coment&aacute;rio removido.";
#endif
const char *Txt_Comments = const char *Txt_Comments =
#if L==1 #if L==1
"Comentaris"; "Comentaris";
@ -34658,27 +34637,6 @@ const char *Txt_Share =
"Compartilhar"; "Compartilhar";
#endif #endif
const char *Txt_Shared =
#if L==1
"Compartit";
#elif L==2
"Geteilt";
#elif L==3
"Shared";
#elif L==4
"Compartido";
#elif L==5
"Partag&eacute;";
#elif L==6
"Compartido"; // Okoteve traducción
#elif L==7
"Condiviso";
#elif L==8
"Dzielone";
#elif L==9
"Compartilhado";
#endif
const char *Txt_Shared_files_area = const char *Txt_Shared_files_area =
#if L==1 #if L==1
"Zona d'arxius compartits"; "Zona d'arxius compartits";
@ -35573,6 +35531,69 @@ const char *Txt_SOCIAL_NOTE[Soc_NUM_SOCIAL_NOTES] =
#endif #endif
}; };
const char *Txt_SOCIAL_PUBLISHING_Removed =
#if L==1
"Eliminat";
#elif L==2
"Entfernt";
#elif L==3
"Removed";
#elif L==4
"Rliminado";
#elif L==5
"Supprim&eacute;";
#elif L==6
"Eliminado"; // Okoteve traducción
#elif L==7
"Rimosso";
#elif L==8
"Usuniete";
#elif L==9
"Removido";
#endif
const char *Txt_SOCIAL_PUBLISHING_Shared =
#if L==1
"Compartit";
#elif L==2
"Geteilt";
#elif L==3
"Shared";
#elif L==4
"Compartido";
#elif L==5
"Partag&eacute;";
#elif L==6
"Compartido"; // Okoteve traducción
#elif L==7
"Condiviso";
#elif L==8
"Dzielone";
#elif L==9
"Compartilhado";
#endif
const char *Txt_SOCIAL_PUBLISHING_Unshared = // No longer shared
#if L==1
"No compartit";
#elif L==2
"Kein geteilt";
#elif L==3
"Unshared";
#elif L==4
"No compartido";
#elif L==5
"Non partag&eacute;";
#elif L==6
"No compartido"; // Okoteve traducción
#elif L==7
"Non condiviso";
#elif L==8
"Niedzielon&aogon;";
#elif L==9
"N&atilde;o compartilhado";
#endif
const char *Txt_Sort_degrees_by = const char *Txt_Sort_degrees_by =
#if L==1 #if L==1
"Ordenar titulacions per"; "Ordenar titulacions per";
@ -46807,27 +46828,6 @@ const char *Txt_Unread_BR_msgs =
"N&atilde;o<br />lidas"; "N&atilde;o<br />lidas";
#endif #endif
const char *Txt_Unshared = // No longer shared
#if L==1
"No compartit";
#elif L==2
"Kein geteilt";
#elif L==3
"Unshared";
#elif L==4
"No compartido";
#elif L==5
"Non partag&eacute;";
#elif L==6
"No compartido"; // Okoteve traducción
#elif L==7
"Non condiviso";
#elif L==8
"Niedzielon&aogon;";
#elif L==9
"N&atilde;o compartilhado";
#endif
const char *Txt_Update = const char *Txt_Update =
#if L==1 #if L==1
"Actualitzar"; "Actualitzar";