Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[com_associations] - use cache for getContentLanguages() #18544

Merged
merged 17 commits into from Nov 18, 2017
Merged

[com_associations] - use cache for getContentLanguages() #18544

merged 17 commits into from Nov 18, 2017

Conversation

alikon
Copy link
Contributor

@alikon alikon commented Nov 9, 2017

Pull Request for Issue #15494.

Summary of Changes

use cache instead of query everytime the available languages

Testing Instructions

see #15494

Expected result

reduce the number of duplicate query

Actual result

unnecessary duplicate query for get languages

Additional Comments

reduced this one only
#15494 (comment)

@csthomas
Copy link
Contributor

csthomas commented Nov 9, 2017

I would suggest this for getContentLanguages().

public static function getContentLanguages()
 {
	if (empty(static::$languages))
	{
		static::load();
	}

	return static::$languages;
}

@alikon
Copy link
Contributor Author

alikon commented Nov 9, 2017

thanks @csthomas 👍 more clean now


return $result;
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove whitespace.

}
return static::$languages;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please fix whitespace.

@infograf768
Copy link
Member

Queries number has reduced a lot: 186 instead of 235.
as you said, some more could be done. Maybe for another PR?

screen shot 2017-11-10 at 08 23 24

I have seen some cs.

@@ -37,6 +37,14 @@ class AssociationsHelper extends JHelperContent
public static $supportedExtensionsList = array();

/**
* List languages of languages
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

languages of languages ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed

{
$db = \JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName(array('sef', 'lang_code', 'image', 'title', 'published')))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

689 and below, replace spaces for indent by tab

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

replaced

static::$languages = $loader();
}

return true;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indent: delete spaces

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

idented

@alikon
Copy link
Contributor Author

alikon commented Nov 10, 2017

yes matter for another PR.....
i'll fix the cs glitch....

@alikon
Copy link
Contributor Author

alikon commented Nov 10, 2017

hope cs fixed now

@andrepereiradasilva
Copy link
Contributor

hi guys, just stoped by to say: why not reuse the already available method in the library

Joomla\CMS\Language\LanguageHelper::getContentLanguages($checkPublished = true, $checkInstalled = true, $pivot = 'lang_code', $orderField = null, $orderDirection = null)

See https://github.com/joomla/joomla-cms/blob/staging/libraries/src/Language/LanguageHelper.php#L336

@alikon
Copy link
Contributor Author

alikon commented Nov 10, 2017

wellcome back @andrepereiradasilva , we are missing you ,

i'll investigate further your suggestion, i hope in the week-end....

@alikon
Copy link
Contributor Author

alikon commented Nov 11, 2017

applyed the tips from @andrepereiradasilva
please re-test

@infograf768
Copy link
Member

I have tested this item 🔴 unsuccessfully on 6f6c1d3


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@infograf768
Copy link
Member

infograf768 commented Nov 11, 2017

Changed my test to unsuccessful.

I get an error
Call to undefined method AssociationsHelper::getContentLanguages()
when trying to load the side to side page

@alikon
Copy link
Contributor Author

alikon commented Nov 11, 2017 via email

@alikon
Copy link
Contributor Author

alikon commented Nov 11, 2017

re-re-test please

return $db->loadObjectList('lang_code');
}
return LanguageHelper::getContentLanguages();
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

delete unwanted spaces line 449

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

otherwise, pr is fine

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

ops
@infograf768
Copy link
Member

I have tested this item ✅ successfully on e935a9d

Perfect this time. 😄


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@alikon
Copy link
Contributor Author

alikon commented Nov 11, 2017

perfection is my current challenge, unfortunately i already know that i cant win 😄

@ghost
Copy link

ghost commented Nov 12, 2017

@alikon can you please give Test Instructions?


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@joomdonation
Copy link
Contributor

Just want to point out that there is difference between the data returned by old code and new code. With the original code, all content languages (including unpublished) will be returned, with new code, only published content languages will be returned

Also, if we decide to use new code, I think it is better to call the new method directly instead of still calling AssociationsHelper::getContentLanguages (because this method is now basically, an alias of LanguageHelper::getContentLanguages() )

@infograf768
Copy link
Member

@joomdonation

You are totally correct. I take off RTC.
We should be able to prepare a new Content Language but not put it online until Published.

With this patch, it is now impossible to do anything for such a content language in com_associations.


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@infograf768 infograf768 removed the RTC This Pull Request is Ready To Commit label Nov 12, 2017
@infograf768
Copy link
Member

In fact I guess the solution is easy
return LanguageHelper::getContentLanguages(false, true); is enough.

@alikon
Copy link
Contributor Author

alikon commented Nov 13, 2017

applyed the tips from @joomdonation

@infograf768
Copy link
Member

I have tested this item ✅ successfully on 69d811d

Works fine now even if the Content Language is unpublished.

Only drawback is that it also proposes those which are in the Trash.
That case is not taken care of in LanguageHelper::getContentLanguages()


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@andrepereiradasilva
Copy link
Contributor

andrepereiradasilva commented Nov 13, 2017

@infograf768 reggarding the trashed language, true. the language helper method could be improved (while preserving B/C).

Something like this. Not tested. Replaced $checkPublished (boolean) argument for $publishedStates (array) and using a B/C layer for that parameter.

/**
 * Get a list of content languages.
 *
 * @param   array    $publishedStates  Array with the content language published states. Null or empty array for all.
 * @param   boolean  $checkInstalled   Check if the content language is installed.
 * @param   string   $pivot            The pivot of the returning array.
 * @param   string   $orderField       Field to order the results.
 * @param   string   $orderDirection   Direction to order the results.
 *
 * @return  array  Array of the content languages.
 *
 * @since   3.7.0
 */
public static function getContentLanguages($publishedStates = array(1), $checkInstalled = true, $pivot = 'lang_code', $orderField = null, $orderDirection = null)
{
	// B/C layer. Before __DEPLOY_VERSION__.
	if ($publishedStates === true)
	{
		$publishedStates = array(1);
	}
	elseif ($publishedStates === false)
	{
		$publishedStates = null;
	}

	// [code removed for brevity...]

	// Check if the language is published, if needed.
	if ($publishedStates !== null && $publishedStates !== array())
	{
		foreach ($languages as $key => $language)
		{
			if (in_array((int) $language->published, $publishedStates, true) === false)
			{
				unset($languages[$key]);
			}
		}
	}

	// [code removed for brevity...]
}

then, for published/unpublished, you could call it like this

LanguageHelper::getContentLanguages(array(0, 1), true);

BTW @alikon unless things changed recently i don't think it's B/C to completly remove a public method in 3.x, you should proxy it to languagehelper method and them put a deprecated 4.0 message.

@alikon
Copy link
Contributor Author

alikon commented Nov 14, 2017

managed the trashed lanugages

added deprecation
@infograf768
Copy link
Member

Works here

@joomdonation
Copy link
Contributor

@alikon If I am not mistaken, the changes you made to \Joomla\CMS\Language\LanguageHelper::getContentLanguages() will cause B/C issue. Before the change, if someone calls \Joomla\CMS\Language\LanguageHelper::getContentLanguages() , the result will include trashed content languages. After your changes, it won't include trashed content languages anymore.

I think the propose change from @andrepereiradasilva is better. It extends the method to allow us to get content languages we want based on passed publish states. I made a PR to your branch alikon#38, please review it and if you agree, merge it so that we can have this issue sorted.

Improve getContentLanguages
@alikon
Copy link
Contributor Author

alikon commented Nov 15, 2017

thanks folks for teamworking, hope now issues are solved in a B/C way

@infograf768
Copy link
Member

infograf768 commented Nov 15, 2017

I have tested this item ✅ successfully on e3d1b46

TBH, folks, I see absolutely no reason why anyone would list Trashed Content Languages.
In this case, but also everywhere else in J where we use the method.


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@joomdonation
Copy link
Contributor

I have tested this item ✅ successfully on f438af0


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@ghost
Copy link

ghost commented Nov 15, 2017

@infograf768 can you please retest?

@infograf768
Copy link
Member

I have tested this item ✅ successfully on f438af0


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@infograf768
Copy link
Member

RTC. Thanks to all.


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18544.

@joomla-cms-bot joomla-cms-bot added the RTC This Pull Request is Ready To Commit label Nov 15, 2017
@infograf768 infograf768 added this to the Joomla 3.8.3 milestone Nov 15, 2017
@mbabker mbabker merged commit 8d0347f into joomla:staging Nov 18, 2017
@joomla-cms-bot joomla-cms-bot removed the RTC This Pull Request is Ready To Commit label Nov 18, 2017
@alikon alikon deleted the patch-85 branch November 18, 2017 17:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants