Visa Oshwal closes early for midterm break as probe into pupil’s death intensifies
Visa Oshwal closes early for midterm break as probe into pupil’s death intensifies
Read this story aloud
Listen to the clean text version of this article
Ready
4 min listen
Audio reading is not supported on this browser.
Ilyaas Abdikarim Ali Mohamud who went missing on Tuesday at around 2 pm was found dead in the school’s swimming pool on Wednesday
Visa Oshwal Primary School in Parklands, Nairobi, has closed early for the midterm break amid a probe into the mysterious death of an 11-year-old pupil.
In a statement on Thursday, the school announced the mid-term break will start on February 22 and run until March 4, “to allow staff, teachers and learners an ample opportunity to mourn and heal”.
Ilyaas Abdikarim Ali Mohamud who went missing on Tuesday at around 2 pm was found dead in the school’s swimming pool on Wednesday. He was buried on Thursday at Lang’ata Cemetery.
Following this, the school said it opted for an early midterm break to ensure that the learners could mourn Ilyaas even as the family demanded justice.
“Throughout this period, we encourage you to engage your child/children in discussions about their feelings related to this loss. We understand that grief affects everyone differently, so please do not hesitate to reach out if you need guidance on how best to help your child cope with these emotions,” the school said in a memo addressed to parents.
In an interview withThe Eastleigh Voice, his uncle, Ali Adan, who has called for a probe into the death said he had received conflicting information from the school regarding Ilyaas’ whereabouts.
Latest Stories
- Report records 83 harassment incidents against Christians in Israel over three months
- Clean mobility gains ground in trucks and buses, but fossil fuels still dominate at 94 per cent – report
- Weekly new Ebola cases reach highest level since outbreak began: WHO
- Over 1,000 Sudanese return home from Egypt under ongoing repatriation programme
“The class teacher claimed that the boy had gone to the toilet at around 3 pm and did not come back. The swimming pool guard, on the other hand, said Ilyaas’s class didn’t have a swimming session on the fateful day. The school gave me conflicting reports,” he said.
Ali said he found other pupils swimming but no one informed him of Ilyaas’s whereabouts. “I went back to the school again and nobody told me of his whereabouts.”
Ali, who had come to pick up the deceased at 4 pm, said he stayed at the school until midnight before they headed to the police station where they were told to wait until 24 hours before they could file a report.
“I went to the school in the morning but I couldn’t find him. I later went to the police station before contacting the DCI officers who went to the school. I was later informed of my nephew’s death at 1 pm on Wednesday,” he said.
Omar Hussein, the Secretary-General of Eastleigh Business District Association (EBDA) and one of the people who spearheaded the search for Ilyaas accused the school of negligence and failing to inform the family of his missing.
“The child disappeared during a class hour at 2:45 pm, why did the class teacher not start the search immediately? Why was a grade 2 pupil missing for hours with no concern whatsoever from the school?” he posed.
Omar also questioned why there was no guard at the swimming pool when the pupil was apparently swimming contrary to the normal schedule.
“There was no swimming program for the pupils on that day but the school claimed to have found his body after 20 hours,” he added.
The family together with their lawyer Danstan Omari are on a course to seek justice for Ilyaas’s death.
Other Topics To Read
Top Stories Today
- Weekly new Ebola cases reach highest level since outbreak began: WHO
- Report records 83 harassment incidents against Christians in Israel over three months
- Clean mobility gains ground in trucks and buses, but fossil fuels still dominate at 94 per cent – report
- Over 1,000 Sudanese return home from Egypt under ongoing repatriation programme
- Somalia intelligence agency kills Al-Shabaab mortar unit leader in Basra operation
- Court declares Ruaraka School land public, rules Sh1.5 billion payout illegal
`;
}
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
Rwanda to use Kenya’s fuel storage under new import dealBusiness
|The New Times
|1 day ago
Junior Starlets edge closer to FIFA U-17 Women’s World Cup after beating South AfricaFootball
|Erick Kariuki
|2 hours ago
Pope Leo XIV shines spotlight on Mediterranean migration crisisWorld
|Mary Wambui
|4 hours ago
Report records 83 harassment incidents against Christians in Israel over three monthsMiddle-East
|Bashir Mbuthia
|28 minutes ago
Over 1,000 Sudanese return home from Egypt under ongoing repatriation programmeSouth Sudan
|Bashir Mbuthia
|1 hour ago
UN agencies warn South Sudan funding shortfall pushes millions toward acute hungerRegional
|XINHUA
|13 hours ago
Somalia intelligence agency kills Al-Shabaab mortar unit leader in Basra operationSomalia
|Bashir Mbuthia
|2 hours ago
Families of Ethiopians on Saudi death row gripped by fear as executions loomRegional
|Addis Standard
|8 hours ago
Colombia beats Ghana to complete World Cup round of 16 lineupSports
|XINHUA
|13 hours ago
Diplomatic row erupts as South Africa, Ghana spar over migrant’s deathWorld
|DW News
|1 day ago
