לדלג לתוכן

משתמש:שרדינגר/stat.js

מתוך ויקיפדיה, האנציקלופדיה החופשית

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
// טעינת מודולים פנימיים של ויקיפדיה ל-jQuery UI
mw.loader.load('jquery.ui');

// פונקציה שמחזירה את התאריך של היום בפורמט 'YYYY-MM-DD'
function getCurrentDate() {
    const today = new Date();
    const year = today.getFullYear();
    const month = String(today.getMonth() + 1).padStart(2, '0');
    const day = String(today.getDate()).padStart(2, '0');
    return `${year}-${month}-${day}`;
}

// פונקציה לחיפוש משתמשים שכתבו ערכים חדשים בתאריך מסוים
function fetchNewArticleAuthors(date) {
    const startDate = `${date}T00:00:00Z`;
    const endDate = `${date}T23:59:59Z`;

    const apiUrl = `https://he.wikipedia.org/w/api.php?action=query&list=recentchanges&rcstart=${startDate}&rcend=${endDate}&rctype=new&rcshow=!redirect&rcnamespace=0&rcprop=title|userid|user|timestamp&rclimit=500&format=json&origin=*`;

    console.log(`מבצע שאילתה ל-API עם URL: ${apiUrl}`);

    $.getJSON(apiUrl, function(data) {
        console.log('נתונים שהתקבלו מה-API:', data);

        if (!data || !data.query || !data.query.recentchanges) {
            console.error('שגיאה: הנתונים שהתקבלו מה-API לא תקינים.');
            $('#new-authors').html('<p>שגיאה: לא ניתן לקבל נתונים מה-API.</p>');
            return;
        }

        const recentChanges = data.query.recentchanges;

        if (recentChanges.length === 0) {
            $('#new-authors').html('<p>לא נמצאו ערכים חדשים בתאריך זה.</p>');
            return;
        }

        console.log(`נמצאו ${recentChanges.length} ערכים חדשים.`);

        // מערך לשמירת המשימות של בדיקת המשתמשים
        const userCheckTasks = [];

        recentChanges.forEach(function(change) {
            userCheckTasks.push(checkUserEditCount(change.user, change.title));
        });

        // ביצוע כל הבדיקות במקביל
        Promise.all(userCheckTasks).then(function(results) {
            const filteredResults = results.filter(result => result !== null);
            console.log(`נמצאו ${filteredResults.length} משתמשים חדשים.`);
            displayResults(filteredResults);
        });
    }).fail(function(jqXHR, textStatus, errorThrown) {
        console.error('שגיאה בביצוע הבקשה ל-API:', textStatus, errorThrown);
        $('#new-authors').html('<p>אירעה שגיאה בזמן ביצוע הבקשה ל-API.</p>');
    });
}

// פונקציה לבדיקת מספר העריכות של משתמש
function checkUserEditCount(username, articleTitle) {
    return new Promise((resolve, reject) => {
        const userApiUrl = `https://he.wikipedia.org/w/api.php?action=query&list=users&ususers=${encodeURIComponent(username)}&usprop=editcount|registration&format=json&origin=*`;

        $.getJSON(userApiUrl, function(userData) {
            console.log(`נתוני משתמש עבור ${username}:`, userData);
            if (userData.query && userData.query.users && userData.query.users[0]) {
                const user = userData.query.users[0];
                if (user.editcount <= 5) { // נשאיר את הקריטריון על 5 עריכות או פחות
                    resolve({ username, articleTitle, editCount: user.editcount });
                } else {
                    resolve(null);
                }
            } else {
                console.log(`לא נמצאו נתונים עבור המשתמש ${username}`);
                resolve(null);
            }
        }).fail(function(jqXHR, textStatus, errorThrown) {
            console.error(`שגיאה בבדיקת המשתמש ${username}:`, textStatus, errorThrown);
            resolve(null);
        });
    });
}

// פונקציה להצגת התוצאות
function displayResults(results) {
    $('#new-authors').empty();
    if (results.length === 0) {
        $('#new-authors').append('<p>לא נמצאו משתמשים חדשים שכתבו ערכים חדשים ביום זה.</p>');
        return;
    }

    results.forEach(function(result) {
        const articleLink = `https://he.wikipedia.org/wiki/${encodeURIComponent(result.articleTitle)}`;
        const messageButton = $('<button>').text('שלח הודעת ברכה').click(function() {
            sendCongratulatoryMessage(result.username, result.articleTitle);
        });

        $('#new-authors').append(
            $('<div>').html(`משתמש: ${result.username} (${result.editCount} עריכות) <br> ערך: <a href="${articleLink}" target="_blank">${result.articleTitle}</a>`).append(messageButton)
        );
    });
}

// פונקציה לשליחת הודעה אוטומטית למשתמש
function sendCongratulatoryMessage(username, articleTitle) {
    const message = `== ברכות ==\n\nברכות, ${username}, על היוזמה שלך לכתיבת ערכך הראשון '''[[${articleTitle}]]'''.\nאני מאחל לך (ולוויקיפדיה) שתמשיך לכתוב עוד ערכים טובים רבים!`;

    $.post(mw.util.wikiScript('api'), {
        action: 'edit',
        title: `שיחת_משתמש:${username}`,
        section: 'new',
        summary: 'ברכה על הערך הראשון',
        text: message,
        token: mw.user.tokens.get('csrfToken')
    }).done(function() {
        alert('הודעה נשלחה בהצלחה ל-' + username);
    }).fail(function() {
        alert('שליחת ההודעה נכשלה.');
    });
}

// הוספת בורר תאריך וכפתור להפעלת החיפוש
$(document).ready(function() {
    var container = $('#content').length ? $('#content') : $('body');
    container.append('<div id="author-search-container" style="margin-top: 20px; padding: 10px; background-color: #f9f9f9; border: 1px solid #ddd;">');
    $('#author-search-container').append('<h3>חיפוש כותבים חדשים לפי תאריך</h3>');
    $('#author-search-container').append('<input type="text" id="date-picker" placeholder="בחר תאריך" style="margin-right: 10px;" />');
    $('#author-search-container').append('<button id="fetch-authors-button">הצג כותבים חדשים</button>');
    $('#author-search-container').append('<div id="new-authors" style="margin-top: 20px;"></div>');

    $('#date-picker').datepicker({
        dateFormat: 'yy-mm-dd',
        defaultDate: getCurrentDate()
    });

    $('#fetch-authors-button').click(function() {
        const selectedDate = $('#date-picker').val() || getCurrentDate();
        fetchNewArticleAuthors(selectedDate);
    });
});