Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#101 Re: "А как сделать..." » Статистика по пользователям » 2011-01-21 19:55:16

Мистика какая-то. Я еще надеялся, что может не работает на денвере. Сейчас загнал на тестовый домен - тоже не работает.Wolverine, вот можете сами убедиться http://games-manual.ru

Логин: yukos
пароль: 123

#102 Re: "А как сделать..." » Статистика по пользователям » 2011-01-21 08:13:10

Вот, заменил первых два кода - не работает. Посмотрите файл, что не так вставил.

<?php

// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');

LoadPluginLang('uprofile', 'main', '', '', ':');
register_plugin_page('uprofile','edit','uprofile_editProfile',0);
register_plugin_page('uprofile','apply','uprofile_applyProfile',0);
register_plugin_page('uprofile','show','uprofile_showProfile',0);



// =============================================================
// External functions of plugin
// =============================================================
function uprofile_list() {
}


function uprofile_showProfile($params) {
    global $mysql, $lang, $tpl, $template, $SYSTEM_FLAGS, $PFILTERS;

    $SYSTEM_FLAGS['info']['title']['group']        = $lang['uprofile:header.view'];
    //LoadPluginLang('uprofile', 'users', '', '', ':');

    // Check if valid user identity is specified
    $urow = '';
    if (isset($params['id']) && (intval($params['id']) > 0)) {
        $urow = $mysql->record("select *, (SELECT SUM(n.views) FROM ".prefix."_news n WHERE u.id = n.author_id) AS cntviews from ".uprefix."_users u where id = ".intval($params['id']));
    } else if (isset($params['name'])) {
        $urow = $mysql->record("select *, (SELECT SUM(n.views) FROM ".prefix."_news n WHERE u.id = n.author_id) AS cntviews from ".uprefix."_users u where name = ".db_squote($params['name']));
    } else if (isset($_REQUEST['id'])) {
        $urow = $mysql->record("select *, (SELECT SUM(n.views) FROM ".prefix."_news n WHERE u.id = n.author_id) AS cntviews from ".uprefix."_users u where id = ".intval($_REQUEST['id']));
    } else if (isset($_REQUEST['name'])) {
        $urow = $mysql->record("select *, (SELECT SUM(n.views) FROM ".prefix."_news n WHERE u.id = n.author_id) AS cntviews from ".uprefix."_users u where name = ".db_squote($_REQUEST['name']));
    }
    if (!is_array($urow)) {
        msg(array("type" => "error", "text" => $lang['uprofile:msge_no_user']));
        return;
    }

    if (is_array($PFILTERS['plugin.uprofile']))
        foreach ($PFILTERS['plugin.uprofile'] as $k => $v) { $v->showProfilePre($urow['id'], $urow); }

    // Determine paths for all template files
    $tpath = locatePluginTemplates(array('users'), 'uprofile', pluginGetVariable('uprofile', 'localsource'));

    // Make page title
    $SYSTEM_FLAGS['info']['title']['group']    = $lang['loc_userinfo'];
    $SYSTEM_FLAGS['info']['title']['item']    = $urow['name'];

    $status = (($urow['status'] >= 1)&&($urow['status'] <= 4))?$lang['uprofile:st_'.$urow['status']]:$lang['uprofile:st_unknown'];

    // Check for new style of photos storing
    if (preg_match('/^'.$urow['id'].'\./', $urow['photo'])) {
        $uphoto = $urow['photo'];
    } else {
        $uphoto = $urow['id'].'.'.$urow['photo'];
    }

    // Check for new style of avatars storing
    if (preg_match('/^'.$urow['id'].'\./', $urow['avatar'])) {
        $uavatar = $urow['avatar'];
    } else {
        $uavatar = $urow['id'].'.'.$urow['avatar'];
    }

    $photo    = photos_url.'/'.(($urow['photo'] != "")?'thumb/'.$uphoto:'nophoto.gif');

    // GRAVATAR.COM integration ** BEGIN **
    if ($urow['avatar'] != '') {
        $avatar    = avatars_url.'/'.$uavatar;
    } else {
        if ($config['avatars_gravatar']) {
            $avatar    = 'http://www.gravatar.com/avatar/'.md5(strtolower($userROW['mail'])).'.jpg?s='.$config['avatar_wh'].'&d='.urlencode(avatars_url."/noavatar.gif");
        } else {
            $avatar = avatars_url."/noavatar.gif";
        }
    }
    // GRAVATAR.COM integration ** END **


    $tpl -> template('users', $tpath['users']);
    $tvars['vars'] = array(
        'user'        =>    $urow['name'],
        'news'        =>    $urow['news'].($urow['cntviews']?' ['.$urow['cntviews'].']':''),
        'com'        =>    $urow['com'],
        'status'    =>    $status,
        'last'        =>    langdate("j Q Y", $urow['last']),
        'reg'        =>    langdate("j Q Y", $urow['reg']),
        'site'        =>    secure_html($urow['site']),
        'icq'        =>    is_numeric($urow['icq']) ? '<a target="_blank" href="http://www.icq.com/people/about_me.php?uin='.$urow['icq'].'">'.$urow['icq'].'</a>' : secure_html($urow['icq']),
        'icqimg'    =>    is_numeric($urow['icq']) ? '<img src="http://status.icq.com/online.gif?icq='.$urow['icq'].'&img=1" />' : '',
        'from'        =>    secure_html($urow['where_from']),
        'info'        =>    secure_html($urow['info']),
        'photo'        =>    $photo,
        'photo_link'=>    ($urow['photo'] != "") ? photos_url.'/'.$uphoto:'',
        'avatar'    =>    $avatar
    );

    if (is_array($PFILTERS['plugin.uprofile']))
        foreach ($PFILTERS['plugin.uprofile'] as $k => $v) { $v->showProfile($urow['id'], $urow, $tvars); }

    $tpl -> vars('users', $tvars);
    $template['vars']['mainblock'] .= $tpl -> show('users');
}

function uprofile_editProfile(){

    // Call editForm routine
    uprofile_editForm();

}

function uprofile_applyProfile() {
    global $template, $userROW, $lang;

    // Check if user is logged in
    if (!is_array($userROW)) {
        msg(array("type" => "error", "text" => $lang['uprofile:msge_notlogged']));
        return;
    }

    // Call Apply changes routine
    uprofile_editApply();

    // Redirect back if we do not have any messages
    if (!$template['vars']['mainblock']) {
        @header("Location: ".generateLink('uprofile', 'edit', array()));
    } else {
        // We have some messages. Don't affect it, print editForm.
        uprofile_editForm();
    }
}



// =============================================================
// Internal functions of plugin
// =============================================================


// Show profile for specified user
function profile_show() {
    global $mysql;
}


// Show EDIT FORM for current user's profile
function uprofile_editForm(){
    global $mysql, $userROW, $lang, $config, $tpl, $template, $SYSTEM_FLAGS, $PFILTERS;

    $SYSTEM_FLAGS['info']['title']['group']        = $lang['uprofile:header.edit'];

    // Check if user is logged in
    if (!is_array($userROW)) {
        msg(array("type" => "error", "text" => $lang['uprofile:msge_notlogged']));
        return;
    }

    //
    // Show profile

    // Save current user's parameters
    $currentUser = $userROW;

    // Manage profile data [if needed]
    if (is_array($PFILTERS['plugin.uprofile']))
        foreach ($PFILTERS['plugin.uprofile'] as $k => $v) { $v->editProfileFormPre($currentUser['id'], $currentUser); }


    // Determine paths for all template files
    $tpath = locatePluginTemplates(array('profile'), 'uprofile', pluginGetVariable('uprofile', 'localsource'));

    // If AVATARs are enabled
    if ($config['use_avatars']) {
        if ($currentUser['avatar'] !== "") {
            // Check for new style of avatar storing
            if (preg_match('/^'.$currentUser['id'].'\./', $currentUser['avatar'])) {
                $avatar = $currentUser['avatar'];
            } else {
                $avatar = $currentUser['id'].'.'.$currentUser['avatar'];
            }

            $imgavatar = '<img src="'.avatars_url.'/'.$avatar.'" style="margin: 5px; border: 0px;" alt="" />';
            $delavatar = '<input type="checkbox" name="delavatar" id="delavatar" class="check" /> <label for="delavatar">'.$lang["uprofile:delete"].'</label>';
        }
        $showrow_avatar = '<input type="file" name="newavatar" size="40" /><br />'.$imgavatar.'<br />'.$delavatar;
    } else {
        $showrow_avatar = $lang['uprofile:avatars_denied'];
    }

    // If PHOTOS are enabled
    if ($config['use_photos']) {
        if ($currentUser['photo'] !== "") {
            // Check for new style of avatar storing
            if (preg_match('/^'.$currentUser['id'].'\./', $currentUser['photo'])) {
                $photo = $currentUser['photo'];
            } else {
                $photo = $currentUser['id'].'.'.$currentUser['photo'];
            }
            $imgphoto = '<a href="'.photos_url.'/'.$photo.'" target="_blank"><img src="'.photos_url.'/thumb/'.$photo.'" style="margin: 5px; border: 0px;" alt="" /></a>';
            $delphoto = '<input type="checkbox" name="delphoto" id="delphoto" class="check" /> <label for="delphoto">'.$lang["uprofile:delete"].'</label>';
        }
        $showrow_photo = '<input type="file" name="newphoto" size="40" /><br />'.$imgphoto.'<br />'.$delphoto;
    } else {
        $showrow_photo = $lang['uprofile:photos_denied'];
    }

    $status = (($currentUser['status'] >= 1)&&($currentUser['status'] <= 4))?$lang['uprofile:st_'.$currentUser['status']]:$lang['uprofile:st_unknown'];

    $tvars['vars'] = array(
        'php_self'    =>    $PHP_SELF,
        'name'        =>    $currentUser['name'],
        'regdate'    =>    LangDate("l, j Q Y - H:i", $currentUser['reg']),
        'last'        =>    (empty($currentUser['last'])) ? $lang['no_last'] : LangDate("l, j Q Y - H:i", $currentUser['last']),
        'status'    =>    $status,
        'news'        =>    $currentUser['news'],
        'comments'    =>    $currentUser['com'],
        'email'        =>    secure_html($currentUser['mail']),
        'ifchecked'    =>    $ifchecked,
        'site'        =>    secure_html($currentUser['site']),
        'icq'        =>    secure_html($currentUser['icq']),
        'from'        =>    secure_html($currentUser['where_from']),
        'about'        =>    secure_html($currentUser['info']),
        'about_sizelimit_text'    => str_replace('{limit}', intval($config['user_aboutsize']), $lang['uprofile:about_sizelimit']),
        'about_sizelimit'    => intval($config['user_aboutsize']),
        'avatar'    =>    $showrow_avatar,
        'photo'        =>    $showrow_photo,
        'form_action'    =>    generateLink('core', 'plugin', array('plugin' => 'uprofile', 'handler' => 'apply')),
    );

    if (is_array($PFILTERS['plugin.uprofile']))
        foreach ($PFILTERS['plugin.uprofile'] as $k => $v) { $v->editProfileForm($currentUser['id'], $currentUser, $tvars); }


    $tpl -> template('profile', $tpath['profile']);
    $tpl -> vars('profile', $tvars);
    $template['vars']['mainblock'] .= $tpl -> show('profile');
}


function uprofile_editApply(){
    global $mysql, $tpl, $lang, $template, $userROW, $auth_db, $config, $PFILTERS;

    // Load required library
    @include_once root.'includes/classes/upload.class.php';

    // Check if user is logged in
    if (!is_array($userROW)) {
        msg(array("type" => "error", "text" => $lang['uprofile:msge_notlogged']));
        return;
    }

    if (!isset($_POST['oldpass']) || (EncodePassword($_POST['oldpass']) != $userROW['pass'])) {
        msg(array("type" => "error", "text" => $lang['uprofile:msge_needoldpass']));
        return;
    }

    // Delete avatar if requested
    if ($_REQUEST['delavatar']) {
        uprofile_manageDelete('avatar', $userROW['id']);
    } else {
        $avatar = $userROW['avatar'];
    }

    // Delete photo if requested
    if ($_REQUEST['delphoto']) {
        uprofile_manageDelete('photo', $userROW['id']);
    } else {
        $photo = $userROW['photo'];
    }

    // UPLOAD AVATAR
    if ($_FILES['newavatar']['name']) {

        // Delete an avatar if user already has it
        uprofile_manageDelete('avatar', $userROW['id']);

        $fmanage = new file_managment();
        $imanage = new image_managment();
        $up = $fmanage->file_upload(array('type' => 'avatar', 'http_var' => 'newavatar', 'replace' => 1, 'manualfile' => $userROW['id'].'.'.strtolower($_FILES['newavatar']['name'])));

        if (is_array($up)) {
            // Now fetch information about size and prepare to write info into DB
            if (is_array($sz = $imanage->get_size($config['avatars_dir'].$up[1]))) {
                $fmanage->get_limits('avatar');

                // Check avatar size limit (!!!)
                $lwh = intval($config['avatar_wh']);
                if ($lwh && (($sz[1] > $lwh)||($sz[2] > $lwh))) {
                    // Fatal: uploaded avatar mismatch size limits !
                    msg(array("type" => "error", "text" => $lang['uprofile:msge_size'], "info" => sprintf($lang['uprofile:msgi_size'], $lwh.'x'.$lwh)));
                    $fmanage->file_delete(array('type' => 'avatar', 'id' => $up[0]));
                } else {
                    $mysql->query("update ".prefix."_".$fmanage->tname." set width=".db_squote($sz[1]).", height=".db_squote($sz[2])." where id = ".db_squote($up[0]));
                    $avatar = $up[1];
                }
            } else {
                // We were unable to fetch image size. Damaged file, delete it!
                msg(array("type" => "error", "text" => $lang['uprofile:msge_damaged']));
                $fmanage->file_delete(array('type' => 'avatar', 'id' => $up[0]));
            }
        }
    }

    // UPLOAD PHOTO
    if ($_FILES['newphoto']['name']) {

        // Delete a photo if user already has it
        uprofile_manageDelete('photo', $userROW['id']);

        $fmanage = new file_managment();
        $imanage = new image_managment();
        $up = $fmanage->file_upload(array('type' => 'photo', 'http_var' => 'newphoto', 'replace' => 1, 'manualfile' => $userROW['id'].'.'.strtolower($_FILES['newphoto']['name'])));
        if (is_array($up)) {
            // Now write info about image into DB
            if (is_array($sz = $imanage->get_size($config['photos_dir'].$subdirectory.'/'.$up[1]))) {
                $fmanage->get_limits('photo');

                // Create preview for photo
                $tsz = intval($config['photos_thumb_size']);
                if (($tsz < 10)||($tsz > 1000)) $tsz = 150;
                $thumb = $imanage->create_thumb($config['photos_dir'].$subdirectory, $up[1], $tsz,$tsz);

                // If we were unable to create thumb - delete photo, it's damaged!
                if (!$thumb) {
                    msg(array("type" => "error", "text" => $lang['uprofile:msge_damaged']));
                    $fmanage->file_delete(array('type' => 'avatar', 'id' => $up[0]));
                } else {
                    $mysql->query("update ".prefix."_".$fmanage->tname." set width=".db_squote($sz[1]).", height=".db_squote($sz[2]).", preview=1 where id = ".db_squote($up[0]));
                    $photo = $up[1];
                }
            } else {
                // We were unable to fetch image size. Damaged file, delete it!
                msg(array("type" => "error", "text" => $lang['uprofile:msge_damaged']));
                $fmanage->file_delete(array('type' => 'avatar', 'id' => $up[0]));
            }
        }
    }

    $sqlFields = array (
        'avatar' => $avatar,
        'photo' => $photo,
        'mail' => $_REQUEST['editmail'],
        'site' => $_REQUEST['editsite'],
        'icq' => is_numeric($_REQUEST['editicq'])?$_REQUEST['editicq']:'',
        'where_from' => $_REQUEST['editfrom'],
        'info' => (intval($config['user_aboutsize'])?substr($_REQUEST['editabout'],0,$config['user_aboutsize']):$_REQUEST['editabout'])
    );
    if ($_REQUEST['editpassword'] != '') {
        if (method_exists($auth_db, 'save_profile')) {
            $auth_db->save_profile($userROW['id'], array('password' => $_REQUEST['editpassword']));
        }
        $sqlFields['pass'] = EncodePassword($_REQUEST['editpassword']);
    }

    // Call external plugins for request processing
    if (is_array($PFILTERS['plugin.uprofile']))
        foreach ($PFILTERS['plugin.uprofile'] as $k => $v) { $v->editProfile($useROW['id'], $userROW, $sqlFields); }

    // Prepare SQL line
    $sqlF = array();
    foreach ($sqlFields as $f => $v)
        array_push($sqlF, $f . " = " . db_squote($v));

    $sqlUpdate = "update ".uprefix."_users set ".join(", ",$sqlF)." where id = ".db_squote($userROW['id']);
    $mysql->query($sqlUpdate);

    // Call external plugins for request processing
    if (is_array($PFILTERS['plugin.uprofile']))
        foreach ($PFILTERS['plugin.uprofile'] as $k => $v) { $v->editProfileNotify($useROW['id'], $userROW, $sqlFields); }


    return true;
}



function uprofile_manageDelete($type, $userID){
    global $mysql, $userROW;

    // Load required library
    @include_once root.'includes/classes/upload.class.php';

    $localUpdate = 0;
    $userID = intval($userID);

    if ($userID != $userROW['id']) {
        if (!is_array($uRow = $mysql->record("select * from ".uprefix."_users where id = ".$userID)))
         return;
    } else {
        $uRow = $userROW;
        $localUpdate = 1;
    }

    // Search for avatar record in mySQL table
    if (is_array($imageRow = $mysql->record("select * from ".prefix."_images where owner_id = ".$userID." and category = ".($type=='avatar'?1:2)))) {
        // Info was found in SQL table
        $fmanager = new file_managment();
        $fmanager->file_delete(array('type' => $type, 'id' => $imageRow['id']));
        //unlink(avatars_dir.$imageRow['name']);
    } else if ($uRow[$type]) {
        // Try to delete all avatars of this user
        @unlink($avatar_dir.$uRow['id'].'.*');
    }
    $mysql->query("update ".uprefix."_users set ".($type=='photo'?'photo':'avatar')." = '' where id = ".$userID);
    if ($localUpdate) $userROW[$type] = '';
}

#103 Re: "А как сделать..." » Статистика по пользователям » 2011-01-20 20:20:36

Тогда давайте я попробую уточнить.

Вот замена двух первых кодов достаточно, потому что далее вы пишите "или".

Или вот это тоже надо проделать? Если да, то напишите подробнее, а то не пойму эти коды в этом же файле? И что значить добавить? После вставить?
Код:

'status'    =>    $status,

добавить
Код:

'cntviews'    =>    $urow['cntviews'],

#104 Re: "А как сделать..." » Статистика по пользователям » 2011-01-20 19:42:36

Wolverine, несколько раз пробовал, тщательно менял коды, просмотры не появляются. Что еще может быть?

#105 Re: "А как сделать..." » Статистика по пользователям » 2011-01-20 11:56:18

Wolverine, Вы мне здорово помогли с отображением количества просмотров в разделе "управления пользователями".

Подскажите пожалуйста еще, какой код и куда засунуть, чтобы количество просмотров всех новостей пользователя отображалось у него в разделе "Мой профиль" так же в скобках рядом с количеством его новостей.

Заранее благодарен.

#106 Re: "А как сделать..." » Как сделать, чтобы пользователи могди добавлять новости? » 2011-01-14 13:36:37

Wolverine, спасибо что новичка не оставляете без ответа! Я Вам еще один вопрос в личку писал - что скажете?

#107 Re: "А как сделать..." » Как сделать, чтобы пользователи могди добавлять новости? » 2011-01-14 12:59:20

А категории добавлять при статусе журналиста все-таки нельзя?
И еще как установить предмодерацию новостей журналистов?

#108 Re: "А как сделать..." » Как сделать, чтобы пользователи могди добавлять новости? » 2011-01-14 12:36:40

Как сделать, чтобы пользователь регистрировался по умолчанию со статусом журналист и мог добавлять категории?

#109 Re: Вопросы функционирования системы в целом » И снова о ЧПУ... » 2011-01-14 08:09:21

Извиняюсь, первый вариант сейчас тоже работает, а вчера категории не отображались (может что-то я не так сделал).

#110 Re: Вопросы функционирования системы в целом » И снова о ЧПУ... » 2011-01-14 08:00:21

если нет делай так: /{id}{altname}[/page{page}].html
Local, спасибо!!! В таком варианте работает!

А при таком /{altname}[/page{page}].html не открываются категории, а было бы лучше без всяких id, чтобы отображалось только имя страницы.

#111 Re: Вопросы функционирования системы в целом » И снова о ЧПУ... » 2011-01-13 19:11:45

2. Не всё так плохо. Сейчас двиг просто игнорирует категорию и даже при изменении ссылки новость будет доступна по старой...

Vitaly, Вы хотите сказать, что и для поисковых систем вес страницы не потеряется с изменением адреса?


Кроме того, можно вместо /{category}/{altname}[/page{page}].html сделать, к примеру, так: /news/{altname}[/page{page}].html или даже /news/{id}[/page{page}].html (если не заработает - пиши, значит бага и её мы исправим).
На DLE в этом плане просто есть выбор, а у нас можно сделать почти всё, что придёт в голову

Это хорошо, что много возможностей! Но я пока слабо во всем этом разбираюсь и если есть возможность сделать вот такой вид урла полной новости: site.ru/новость.html, то напишите пожалуйста конкретнее где и как?

#112 Re: Вопросы функционирования системы в целом » И снова о ЧПУ... » 2011-01-13 17:34:44

Нужно два пунка:
1. Чтоб страницы с заданными категориями отображались как site.ru/категория.html
2. Чтоб полная новость отображалась как site.ru/новость.html   ,а не site.ru/категория/новость/html



Судя по дате этот вопрос поднимался полгода назад. В настоящее время есть решение?

Вопрос действительно важный. Ведь, если со временем для новости надо будет сменить категорию, то все приобретенные ссылки теряют свою актуальность и страница падает в выдаче. На DLE в этом плане есть выбор.

#114 Re: "А как сделать..." » Статистика по пользователям » 2011-01-11 22:33:55

Да мне нужно в одной таблице по каждому пользователю: Ник, количество его новостей и суммарное количество просмотров новостей этого пользователя.

#115 Re: "А как сделать..." » Статистика по пользователям » 2011-01-11 16:51:48

Спасибо, что не оставили мой вопрос без ответа.
Изменил код - статистика просмотров отражается.
Теперь относительно экспорта  Excel: эти данные я бы мог в ручную перегнать копированием и вставкой сначала в блокнот, а потом в Excel, но наверно из-за того, что просмотры отражаются в скобках, данные о количестве новостей и просмотров в  Excel попадают в один столбец.
Соответственно в этом случае я не могу применить формулу для дальнейшего расчета. Конечно можно перебить данные просмотров вручную, но хотелось бы проще.

Про плагины и библиотеки еще не разобрался. Поизучаю, тогда если будут вопросы напишу. А пока еще раз большое спасибо!

#116 "А как сделать..." » Статистика по пользователям » 2011-01-11 13:09:53

Yukos
Ответов: 36

Доброго времени суток всем поклонникам NG CMS!

Долго искал бесплатную замену DLE и вот вышел NG CMS. Очень все понравилось и дальше планирую работать только с этим движком.

На данный момент у меня вопрос как сделать? Для работы моего нового проекта, надо как минимум чтобы в разделе управления пользователями была статистика не только о количестве новостей добавленных каждым пользователем, но и общее количестве просмотров этих новостей.
А еще лучше, чтобы такие данные можно было вывести на отдельную страницу сайта онлайн, а также экспортировать в Excel. Как возможно такое реализовать?

Помогите пожалуйста с этим вопросом!

Подвал раздела

Работает на FluxBB