feat: /support (#22194)

* added: /support

* refactor code and implemented fail checks

* removed unused imports

* changed filter from from title to name

* refactor code to move context inside main

* removed unused variable

* added: /support

* refactor code and implemented fail checks

* removed unused imports

* changed filter from from title to name

* refactor code to move context inside main

* removed unused variable

* refactor: renamed set to get

Co-authored-by: Shivam Mishra <scmmishra@users.noreply.github.com>
Co-authored-by: Anurag Mishra <32095923+Anurag810@users.noreply.github.com>
diff --git a/erpnext/www/support/index.py b/erpnext/www/support/index.py
new file mode 100644
index 0000000..58ca8f7
--- /dev/null
+++ b/erpnext/www/support/index.py
@@ -0,0 +1,74 @@
+from __future__ import unicode_literals
+import frappe
+
+def get_context(context):
+	context.no_cache = 1
+	context.align_greeting = ''
+	setting = frappe.get_doc("Support Settings")
+
+	context.greeting_title = setting.greeting_title
+	context.greeting_subtitle = setting.greeting_subtitle
+	
+	# Support content
+	favorite_articles = get_favorite_articles_by_page_view()
+	if len(favorite_articles) < 6:
+		name_list = []
+		if favorite_articles:
+			for article in favorite_articles:
+				name_list.append(article.name)
+		for record in (frappe.get_all("Help Article", 
+			fields=["title", "content", "route", "category"], 
+			filters={"name": ['not in', tuple(name_list)], "published": 1}, 
+			order_by="creation desc", limit=(6-len(favorite_articles)))):
+			favorite_articles.append(record)
+		
+	context.favorite_article_list = get_favorite_articles(favorite_articles)
+	context.help_article_list = get_help_article_list()
+	
+def get_favorite_articles_by_page_view():
+	return frappe.db.sql(
+			"""
+			SELECT
+				t1.name as name,
+				t1.title as title,
+				t1.content as content,
+				t1.route as route,
+				t1.category as category,
+				count(t1.route) as count 
+			FROM `tabHelp Article` AS t1 
+				INNER JOIN
+				`tabWeb Page View` AS t2 
+			ON t1.route = t2.path 
+			WHERE t1.published = 1
+			GROUP BY route 
+			ORDER BY count DESC
+			LIMIT 6;
+			""", as_dict=True)
+
+def get_favorite_articles(favorite_articles):
+	favorite_article_list=[]
+	for article in favorite_articles:
+		description = frappe.utils.strip_html(article.content)
+		if len(description) > 175:
+			description = description[:172] + '...'
+		favorite_article_dict = {
+			'title': article.title,
+			'description': description,
+			'route': article.route,
+			'category': article.category,
+		}
+		favorite_article_list.append(favorite_article_dict)
+	return favorite_article_list
+
+def get_help_article_list():
+	help_article_list=[]
+	category_list = frappe.get_all("Help Category", fields="name")
+	for category in category_list:
+		help_articles = frappe.get_all("Help Article", fields="*", filters={"category": category.name, "published": 1}, order_by="modified desc", limit=5)
+		if help_articles:
+			help_aricles_per_caetgory = {
+				'category': category,
+				'articles': help_articles,
+			}
+			help_article_list.append(help_aricles_per_caetgory)
+	return help_article_list
\ No newline at end of file