MOBILE-2414 sitehome: Support site news forum
parent
981e1a6aac
commit
d2faf24229
|
@ -18,6 +18,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
||||||
import { CoreCourseProvider } from '@core/course/providers/course';
|
import { CoreCourseProvider } from '@core/course/providers/course';
|
||||||
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
import { CoreCourseHelperProvider } from '@core/course/providers/helper';
|
||||||
import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate';
|
import { CoreCourseModulePrefetchDelegate } from '@core/course/providers/module-prefetch-delegate';
|
||||||
|
import { CoreSiteHomeProvider } from '../../providers/sitehome';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component that displays site home index.
|
* Component that displays site home index.
|
||||||
|
@ -38,7 +39,7 @@ export class CoreSiteHomeIndexComponent implements OnInit {
|
||||||
|
|
||||||
constructor(private domUtils: CoreDomUtilsProvider, private sitesProvider: CoreSitesProvider,
|
constructor(private domUtils: CoreDomUtilsProvider, private sitesProvider: CoreSitesProvider,
|
||||||
private courseProvider: CoreCourseProvider, private courseHelper: CoreCourseHelperProvider,
|
private courseProvider: CoreCourseProvider, private courseHelper: CoreCourseHelperProvider,
|
||||||
private prefetchDelegate: CoreCourseModulePrefetchDelegate) {
|
private prefetchDelegate: CoreCourseModulePrefetchDelegate, private siteHomeProvider: CoreSiteHomeProvider) {
|
||||||
this.siteHomeId = sitesProvider.getCurrentSite().getSiteHomeId();
|
this.siteHomeId = sitesProvider.getCurrentSite().getSiteHomeId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,6 +88,7 @@ export class CoreSiteHomeIndexComponent implements OnInit {
|
||||||
* @return {Promise<any>} Promise resolved when done.
|
* @return {Promise<any>} Promise resolved when done.
|
||||||
*/
|
*/
|
||||||
protected loadContent(): Promise<any> {
|
protected loadContent(): Promise<any> {
|
||||||
|
let hasNewsItem = false;
|
||||||
this.hasContent = false;
|
this.hasContent = false;
|
||||||
|
|
||||||
const config = this.sitesProvider.getCurrentSite().getStoredConfig() || { numsections: 1 };
|
const config = this.sitesProvider.getCurrentSite().getStoredConfig() || { numsections: 1 };
|
||||||
|
@ -114,6 +116,10 @@ export class CoreSiteHomeIndexComponent implements OnInit {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (item == 'news') {
|
||||||
|
hasNewsItem = true;
|
||||||
|
}
|
||||||
|
|
||||||
this.hasContent = true;
|
this.hasContent = true;
|
||||||
this.items.push(item);
|
this.items.push(item);
|
||||||
});
|
});
|
||||||
|
@ -137,6 +143,23 @@ export class CoreSiteHomeIndexComponent implements OnInit {
|
||||||
|
|
||||||
// Add log in Moodle.
|
// Add log in Moodle.
|
||||||
this.courseProvider.logView(this.siteHomeId);
|
this.courseProvider.logView(this.siteHomeId);
|
||||||
|
|
||||||
|
if (hasNewsItem && this.block && this.block.modules) {
|
||||||
|
// Remove forum activity (news one only) to prevent duplicates.
|
||||||
|
this.siteHomeProvider.getNewsForum(this.siteHomeId).then((forum) => {
|
||||||
|
// Search the module that belongs to site news.
|
||||||
|
for (let i = 0; i < this.block.modules.length; i++) {
|
||||||
|
const module = this.block.modules[i];
|
||||||
|
|
||||||
|
if (module.modname == 'forum' && module.instance == forum.id) {
|
||||||
|
this.block.modules.splice(i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
// Ignore errors.
|
||||||
|
});
|
||||||
|
}
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
this.domUtils.showErrorModalDefault(error, 'core.course.couldnotloadsectioncontent', true);
|
this.domUtils.showErrorModalDefault(error, 'core.course.couldnotloadsectioncontent', true);
|
||||||
});
|
});
|
||||||
|
|
|
@ -14,6 +14,9 @@
|
||||||
|
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
|
import { CoreCourseProvider } from '@core/course/providers/course';
|
||||||
|
import { CoreCourseModuleDelegate } from '@core/course/providers/module-delegate';
|
||||||
|
import { CoreSiteHomeProvider } from '../../providers/sitehome';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component that displays site home news.
|
* Component that displays site home news.
|
||||||
|
@ -27,7 +30,8 @@ export class CoreSiteHomeNewsComponent implements OnInit {
|
||||||
show: boolean;
|
show: boolean;
|
||||||
siteHomeId: number;
|
siteHomeId: number;
|
||||||
|
|
||||||
constructor(private sitesProvider: CoreSitesProvider) {
|
constructor(private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider,
|
||||||
|
private moduleDelegate: CoreCourseModuleDelegate, private siteHomeProvider: CoreSiteHomeProvider) {
|
||||||
this.siteHomeId = sitesProvider.getCurrentSite().getSiteHomeId();
|
this.siteHomeId = sitesProvider.getCurrentSite().getSiteHomeId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,11 +40,23 @@ export class CoreSiteHomeNewsComponent implements OnInit {
|
||||||
*/
|
*/
|
||||||
ngOnInit(): void {
|
ngOnInit(): void {
|
||||||
// Get number of news items to show.
|
// Get number of news items to show.
|
||||||
const newsItems = this.sitesProvider.getCurrentSite().getStoredConfig('newsitems') || 0;
|
const currentSite = this.sitesProvider.getCurrentSite(),
|
||||||
|
newsItems = currentSite.getStoredConfig('newsitems') || 0;
|
||||||
if (!newsItems) {
|
if (!newsItems) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo: Implement it once forum is supported.
|
const siteHomeId = currentSite.getSiteHomeId();
|
||||||
|
|
||||||
|
// Get the news forum.
|
||||||
|
this.siteHomeProvider.getNewsForum(siteHomeId).then((forum) => {
|
||||||
|
return this.courseProvider.getModuleBasicInfo(forum.cmid).then((module) => {
|
||||||
|
this.show = true;
|
||||||
|
this.module = module;
|
||||||
|
module.handlerData = this.moduleDelegate.getModuleDataFor(module.modname, module, siteHomeId, module.section);
|
||||||
|
});
|
||||||
|
}).catch(() => {
|
||||||
|
// Ignore errors.
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ import { CoreLoggerProvider } from '@providers/logger';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreSite } from '@classes/site';
|
import { CoreSite } from '@classes/site';
|
||||||
import { CoreCourseProvider } from '@core/course/providers/course';
|
import { CoreCourseProvider } from '@core/course/providers/course';
|
||||||
|
import { AddonModForumProvider } from '@addon/mod/forum/providers/forum';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service that provides some features regarding site home.
|
* Service that provides some features regarding site home.
|
||||||
|
@ -25,10 +26,29 @@ import { CoreCourseProvider } from '@core/course/providers/course';
|
||||||
export class CoreSiteHomeProvider {
|
export class CoreSiteHomeProvider {
|
||||||
protected logger;
|
protected logger;
|
||||||
|
|
||||||
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider) {
|
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider,
|
||||||
|
private forumProvider: AddonModForumProvider) {
|
||||||
this.logger = logger.getInstance('CoreSiteHomeProvider');
|
this.logger = logger.getInstance('CoreSiteHomeProvider');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the news forum for the Site Home.
|
||||||
|
*
|
||||||
|
* @param {number} siteHomeId Site Home ID.
|
||||||
|
* @return {Promise<any>} Promise resolved with the forum if found, rejected otherwise.
|
||||||
|
*/
|
||||||
|
getNewsForum(siteHomeId: number): Promise<any> {
|
||||||
|
return this.forumProvider.getCourseForums(siteHomeId).then((forums) => {
|
||||||
|
for (let i = 0; i < forums.length; i++) {
|
||||||
|
if (forums[i].type == 'news') {
|
||||||
|
return forums[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.reject(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether or not the frontpage is available for the current site.
|
* Returns whether or not the frontpage is available for the current site.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue