Uganda seeks CAF approval to use newly-built stadium for AFCON 2027 qualifiers
Listen to article
2 min listen
Audio reading is not supported on this browser.
Ready
Thanks for listening. Continue with a related story, or tap the speaker icon on the next page to listen.
<img src="https://absafricatv.com/wp-content/uploads/2026/07/IMG-20260414-WA0046.jpg” alt=””>
Talanta Stadium cost rises to Sh45.85 billion as fresh audit raises procurement concerns
Erick Kariuki
·
1 week agoRead nextOpens a fresh page.
Peter Ogwang, Uganda’s state minister for sports, told Xinhua that the request was made because Mandela National Stadium in Kampala is still undergoing renovation.
Uganda has formally asked the Confederation of African Football (CAF) to allow the newly-built Hoima City Stadium to host its matches in the 2027 CAF Africa Cup of Nations (AFCON) qualifiers, a government official said on Thursday.
Peter Ogwang, Uganda’s state minister for sports, told Xinhua that the request was made because Mandela National Stadium in Kampala is still undergoing renovation.
“We are begging CAF to allow us to use the Hoima City Stadium. Although we are co-hosts of AFCON 2027, we are in the tournament as hosts who still have to play in the qualifiers,” Ogwang explained.
More To Read
- Talanta Stadium cost rises to Sh45.85 billion as fresh audit raises procurement concerns
- Afraha Stadium set for major transformation as Kenya accelerates 2027 AFCON preparations
- CAF opens bidding for 2028, 2032 and 2036 AFCON tournaments
- President Yoweri Museveni backs single East African visa for 2027 AFCON
- From Pipeline to MLS history: How Lawrence Olum became Kenya’s quiet football pioneer
- How the new Ngong Road flyover is fueling growth at Dagoretti Corner
Uganda has been drawn in Group H alongside Tunisia, Libya and Botswana in the qualifying campaign, which begins in September. The Uganda Cranes will open their campaign away to Tunisia on Sept. 21 before hosting Libya on October 6.
“We are still working hard to make sure that the renovation is complete in time. But we have engaged CAF and written to be allowed to host our qualifier matches at the Hoima City Stadium,” Ogwang added.
The minister said the government is also pushing contractors to complete the reconstruction of Mandela National Stadium, commonly known as Namboole, as well as a terminal in Hoima to facilitate flights to the city.
Latest Stories
- Explainer: Why stress makes you crave comfort food
- African states urged to strengthen support for continental human rights court
- Suspected Somali pirates seize tanker off Yemen’s Hadramawt coast
- Kenya could unlock Sh3.1 trillion economic gains through care infrastructure investment – study
Ogwang said Uganda is fully aware of CAF’s stadium requirements for hosting international matches and has explained the country’s circumstances in its request to the continental football governing body.
Uganda, Kenya and Tanzania will jointly host the 2027 CAF Africa Cup of Nations from June 19 to July 17.
Other Topics To Read
Top Stories Today
- Kenya could unlock Sh3.1 trillion economic gains through care infrastructure investment – study
- Explainer: Why stress makes you crave comfort food
- African states urged to strengthen support for continental human rights court
- Suspected Somali pirates seize tanker off Yemen’s Hadramawt coast
- Lawyers announce nationwide court boycotts on July 22
- Uganda suspends school trips after Kapchorwa bus crash kills 20 pupils
`;
}
return “;
}
function commentActionsMarkup(comment, canComment) {
const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
const likeCount = Number(comment.like_count || 0) > 0
? “
: ”;
const likeButton = canComment && comment.status === ‘approved’
? “
: “;
const replyButton = canComment && comment.status === ‘approved’
? “
: ”;
return `
`;
}
function commentMarkup(comment, canComment, isReply = false) {
const pendingBadge = comment.status && comment.status !== ‘approved’
? “
: ”;
const edited = comment.is_edited
? “
: ”;
const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
? `
`
: “;
return `
`;
}
function replyFormMarkup(commentId) {
return `
`;
}
function setNotice(widget, message, type = ‘info’) {
const notice = widget.querySelector(‘[data-role=”notice”]’);
if (!notice) return;
if (!message) {
notice.hidden = true;
notice.textContent = ”;
notice.classList.remove(‘is-error’);
return;
}
notice.hidden = false;
notice.textContent = message;
notice.classList.toggle(‘is-error’, type === ‘error’);
}
function setCount(widget, total) {
const count = widget.querySelector(‘[data-role=”count”]’);
if (!count) return;
const num = Number(total || 0);
count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
}
function openReplyBox(widget, commentId) {
widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
box.hidden = true;
box.innerHTML = ”;
});
const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (!targetItem) return;
const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
if (!replyBox) return;
replyBox.hidden = false;
replyBox.innerHTML = replyFormMarkup(commentId);
const textarea = replyBox.querySelector(‘textarea’);
if (textarea) textarea.focus();
}
function closeReplyBox(container) {
if (!container) return;
container.hidden = true;
container.innerHTML = ”;
}
async function initCommentsWidget(widget) {
const state = {
articleId: Number(widget.dataset.articleId),
loadUrl: widget.dataset.loadUrl,
storeUrl: widget.dataset.storeUrl,
commentsBaseUrl: widget.dataset.commentsBaseUrl,
canComment: widget.dataset.canComment === ‘1’,
page: 1,
perPage: 10,
sort: ‘newest’,
total: 0,
hasMore: false,
busy: false
};
const list = widget.querySelector(‘[data-role=”list”]’);
const loading = widget.querySelector(‘[data-role=”loading”]’);
const empty = widget.querySelector(‘[data-role=”empty”]’);
const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);
async function loadComments(reset = true) {
if (state.busy) return;
state.busy = true;
setNotice(widget, ”);
loading.hidden = false;
if (reset) {
state.page = 1;
list.innerHTML = ”;
empty.hidden = true;
}
try {
const url = new URL(state.loadUrl, window.location.origin);
url.searchParams.set(‘page’, state.page);
url.searchParams.set(‘per_page’, state.perPage);
url.searchParams.set(‘sort’, state.sort);
const response = await requestJson(url.toString(), {
method: ‘GET’,
headers: {
‘Accept’: ‘application/json’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
});
const items = Array.isArray(response.data) ? response.data : [];
const meta = response.meta || {};
state.total = Number(meta.total || 0);
state.hasMore = !!meta.has_more;
setCount(widget, state.total);
if (reset) {
list.innerHTML = ”;
}
if (!items.length && reset) {
empty.hidden = false;
} else {
empty.hidden = true;
list.insertAdjacentHTML(
‘beforeend’,
items.map(item => commentMarkup(item, state.canComment, false)).join(”)
);
}
loadMoreBtn.hidden = !state.hasMore;
} catch (error) {
if (!list.children.length) {
empty.hidden = false;
empty.textContent = ‘Unable to load comments right now.’;
}
setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
} finally {
loading.hidden = true;
state.busy = false;
}
}
async function submitTopLevelComment(form) {
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘[data-role=”submit-comment”]’);
if (!textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(state.storeUrl, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
textarea.value = ”;
if (response?.data) {
list.insertAdjacentHTML(
‘afterbegin’,
commentMarkup(response.data, state.canComment, false)
);
empty.hidden = true;
if ((response.data.status || ”) === ‘approved’) {
state.total += 1;
setCount(widget, state.total);
}
}
setNotice(widget, response.message || ‘Comment posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post comment’;
}
}
}
async function submitReply(form) {
const commentId = Number(form.dataset.commentId || 0);
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘.ev-comments__reply-submit’);
if (!commentId || !textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
if (response?.data) {
const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (parentItem) {
const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
if (repliesWrap) {
repliesWrap.insertAdjacentHTML(
‘beforeend’,
commentMarkup(response.data, state.canComment, true)
);
}
}
}
closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
setNotice(widget, response.message || ‘Reply posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post reply’;
}
}
}
async function toggleLike(button) {
const commentId = Number(button.dataset.commentId || 0);
if (!commentId) return;
const originalHtml = button.innerHTML;
try {
button.disabled = true;
button.innerHTML = ‘Working…’;
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({})
});
const liked = !!response?.data?.liked;
const likeCount = Number(response?.data?.like_count || 0);
button.classList.toggle(‘is-liked’, liked);
button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
} catch (error) {
button.innerHTML = originalHtml;
setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
} finally {
button.disabled = false;
}
}
if (composerForm) {
composerForm.addEventListener(‘submit’, function (e) {
e.preventDefault();
submitTopLevelComment(composerForm);
});
}
if (sortSelect) {
sortSelect.addEventListener(‘change’, function () {
state.sort = this.value || ‘newest’;
loadComments(true);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener(‘click’, function () {
if (state.busy || !state.hasMore) return;
state.page += 1;
loadComments(false);
});
}
widget.addEventListener(‘click’, function (e) {
const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
if (likeBtn) {
e.preventDefault();
toggleLike(likeBtn);
return;
}
const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
if (replyBtn) {
e.preventDefault();
openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
return;
}
const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
if (cancelReplyBtn) {
e.preventDefault();
closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
}
});
widget.addEventListener(‘submit’, function (e) {
const replyForm = e.target.closest(‘.ev-comments__reply-form’);
if (replyForm) {
e.preventDefault();
submitReply(replyForm);
}
});
loadComments(true);
}
document.addEventListener(‘DOMContentLoaded’, function () {
document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
});
})();
Trending
African states urged to strengthen support for continental human rights courtAfrica
|Bashir Mbuthia
|1 hour ago
Cherargei seeks probe on county revenue systems over leakages despite automationNews
|Rachael Mutabasi
|13 hours ago
Uganda seeks CAF approval to use newly-built stadium for AFCON 2027 qualifiersSports
|XINHUA
|38 minutes ago
Explainer: Why stress makes you crave comfort foodLifestyle
|Margaret Wanjiru
|54 minutes ago
High Court clears construction of 52km road through Aberdare National ParkNews
|Carolyne Kubwa
|7 hours ago
Morocco back Ouahbi until 2030 as Atlas Lions shift focus to home World CupNews
|Erick Kariuki
|9 hours ago
Widow recounts Sh5,200 transfer minutes before Ong’ondo Were was killedNews
|Carolyne Kubwa
|10 hours ago
CECAFA Kagame Cup will prepare Tusker for CAF Confederation Cup challenge, says MetteSports
|Erick Kariuki
|8 hours ago
Lawyers announce nationwide court boycotts on July 22News
|Bashir Mbuthia
|2 hours ago
Suspected Somali pirates seize tanker off Yemen’s Hadramawt coastSomalia
|Bashir Mbuthia
|1 hour ago
