Пример #1
0
function mod_user_stats($module_id, $cfg)
{
    $inDB = cmsDatabase::getInstance();
    cmsCore::loadLanguage('components/users');
    global $_LANG;
    if (!isset($cfg['show_total'])) {
        $cfg['show_total'] = 1;
    }
    if (!isset($cfg['show_online'])) {
        $cfg['show_online'] = 1;
    }
    if (!isset($cfg['show_gender'])) {
        $cfg['show_gender'] = 1;
    }
    if (!isset($cfg['show_city'])) {
        $cfg['show_city'] = 1;
    }
    $total_usr = cmsUser::getCountAllUsers();
    if ($cfg['show_gender']) {
        $gender_stats = array();
        //male
        $gender_stats['male'] = $inDB->rows_count('cms_users u INNER JOIN cms_user_profiles p ON p.user_id = u.id', "u.is_locked = 0 AND u.is_deleted = 0 AND p.gender = 'm'");
        //female
        $gender_stats['female'] = $inDB->rows_count('cms_users u INNER JOIN cms_user_profiles p ON p.user_id = u.id', "u.is_locked = 0 AND u.is_deleted = 0 AND p.gender = 'f'");
        //unknown
        $gender_stats['unknown'] = $total_usr - $gender_stats['male'] - $gender_stats['female'];
    }
    if ($cfg['show_city']) {
        $sql = "SELECT IF (p.city != '', p.city, '{$_LANG['NOT_DECIDE']}') city, COUNT( p.user_id ) count\n                FROM cms_users u\n                LEFT JOIN cms_user_profiles p ON p.user_id = u.id\n                WHERE u.is_locked =0 AND u.is_deleted =0\n                GROUP BY p.city";
        $rs = $inDB->query($sql);
        $city_stats = array();
        if ($inDB->num_rows($rs)) {
            while ($row = $inDB->fetch_assoc($rs)) {
                if ($row['city'] != $_LANG['NOT_DECIDE']) {
                    $row['href'] = '/users/city/' . urlencode($row['city']);
                } else {
                    $row['href'] = '';
                }
                $row['city'] = icms_ucfirst(mb_strtolower($row['city']));
                $city_stats[] = $row;
            }
        }
    }
    if ($cfg['show_online']) {
        $people = cmsUser::getOnlineCount();
    }
    if ($cfg['show_bday']) {
        $bday = cmsUser::getBirthdayUsers();
    }
    cmsPage::initTemplate('modules', 'mod_user_stats')->assign('cfg', $cfg)->assign('total_usr', $total_usr)->assign('gender_stats', $gender_stats)->assign('city_stats', $city_stats)->assign('usr_online', cmsUser::sessionGet('usr_online'))->assign('people', $people)->assign('bday', $bday)->display('mod_user_stats.tpl');
    return true;
}
Пример #2
0
 /**
  * Возвращает массив событий для ленты активности
  * @return array
  */
 public function getActionsLog()
 {
     $inUser = cmsUser::getInstance();
     if (!$this->only_friends) {
         $this->inDB->where('log.is_friends_only = 0');
     }
     if (!$inUser->id) {
         $this->inDB->where('log.is_users_only = 0');
     }
     $pactions = cmsCore::callEvent('GET_BEFORE_ACTIONS', false);
     if ($pactions !== false) {
         return $pactions;
     }
     $sql = "SELECT log.*,\r\n\t\t               log.pubdate as orig_pubdate,\r\n                       a.message,\r\n                       a.name,\r\n                       u.nickname as user_nickname,\r\n                       u.login as user_login\r\n                FROM cms_actions_log log\r\n                LEFT JOIN cms_actions a ON a.id = log.action_id AND a.is_visible = 1\r\n                LEFT JOIN cms_users u ON u.id = log.user_id\r\n                WHERE 1=1 {$this->inDB->where}\r\n                ORDER BY log.id DESC\r\n\t\t\t\t";
     if ($this->inDB->limit) {
         $sql .= "LIMIT {$this->inDB->limit}";
     }
     $result = $this->inDB->query($sql);
     // Сбрасываем условия
     $this->inDB->resetConditions();
     if (!$this->inDB->num_rows($result)) {
         return false;
     }
     $actions = array();
     global $_LANG;
     $last_date = '';
     $today_date = date('j F Y');
     $yesterday_date = date('j F Y', time() - 3600 * 24);
     while ($action = $this->inDB->fetch_assoc($result)) {
         $action['item_date'] = '';
         $item_date = date('j F Y', strtotime($action['orig_pubdate']));
         if ($item_date != $last_date) {
             switch ($item_date) {
                 case $today_date:
                     $date = icms_ucfirst($_LANG['TODAY']);
                     break;
                 case $yesterday_date:
                     $date = icms_ucfirst($_LANG['YESTERDAY']);
                     break;
                 default:
                     $date = cmsCore::dateFormat($item_date, true, false, false);
             }
             $action['item_date'] = $date;
             $last_date = $item_date;
         }
         $action['object_link'] = $action['target_link'] = '';
         if ($action['object']) {
             $action['object_link'] = $action['object_url'] ? '<a href="' . $action['object_url'] . '" class="act_obj_' . $action['name'] . '">' . $action['object'] . '</a>' : $action['object'];
         }
         if ($action['target']) {
             $action['target_link'] = '<a href="' . $action['target_url'] . '" class="act_tgt_' . $action['name'] . '">' . $action['target'] . '</a>';
         }
         if ($action['message']) {
             $target_pos = mb_strpos($action['message'], '|');
             if ($target_pos !== false) {
                 if (!$this->show_targets || !$action['target']) {
                     $action['message'] = mb_substr($action['message'], 0, $target_pos);
                 } else {
                     $action['message'] = str_replace('|', '', $action['message']);
                 }
             }
             $action['message'] = sprintf($action['message'], $action['object_link'], $action['target_link']);
         }
         $action['is_new'] = (bool) (strtotime($action['pubdate']) > strtotime($inUser->logdate));
         $action['user_url'] = cmsUser::getProfileURL($action['user_login']);
         $action['pubdate'] = cmsCore::dateDiffNow($action['pubdate']);
         $actions[] = $action;
     }
     return cmsCore::callEvent('GET_ACTIONS', $actions);
 }
Пример #3
0
function applet_cron()
{
    cmsCore::loadClass('cron');
    global $_LANG;
    global $adminAccess;
    if (!cmsUser::isAdminCan('admin/config', $adminAccess)) {
        cpAccessDenied();
    }
    $GLOBALS['cp_page_title'] = $_LANG['AD_CRON_MISSION'];
    cpAddPathway($_LANG['AD_SITE_SETTING'], 'index.php?view=config');
    cpAddPathway($_LANG['AD_CRON_MISSION'], 'index.php?view=cron');
    $do = cmsCore::request('do', 'str', 'list');
    $id = cmsCore::request('id', 'int', '0');
    if ($do == 'list') {
        $toolmenu = array(array('icon' => 'new.gif', 'title' => $_LANG['AD_CREATE_CRON_MISSION'], 'link' => '?view=cron&do=add'));
        cpToolMenu($toolmenu);
        $items = cmsCron::getJobs(false);
        $tpl_file = 'admin/cron.php';
        $tpl_dir = file_exists(TEMPLATE_DIR . $tpl_file) ? TEMPLATE_DIR : DEFAULT_TEMPLATE_DIR;
        include $tpl_dir . $tpl_file;
    }
    if ($do == 'show') {
        if ($id) {
            cmsCron::jobEnabled($id, true);
        }
        echo '1';
        exit;
    }
    if ($do == 'hide') {
        if ($id) {
            cmsCron::jobEnabled($id, false);
        }
        echo '1';
        exit;
    }
    if ($do == 'delete') {
        if ($id) {
            cmsCron::removeJobById($id);
        }
        cmsCore::redirect('index.php?view=cron');
    }
    if ($do == 'execute') {
        if ($id) {
            $job_result = cmsCron::executeJobById($id);
        }
        if ($job_result) {
            cmsCore::addSessionMessage($_LANG['AD_MISSION_SUCCESS'], 'success');
        } else {
            cmsCore::addSessionMessage($_LANG['AD_MISSION_ERROR'], 'error');
        }
        cmsCore::redirect('index.php?view=cron');
    }
    if ($do == 'submit') {
        if (!cmsUser::checkCsrfToken()) {
            cmsCore::error404();
        }
        $job_name = cmsCore::request('job_name', 'str');
        $comment = cmsCore::request('comment', 'str');
        $job_interval = cmsCore::request('job_interval', 'int');
        $enabled = cmsCore::request('enabled', 'int');
        $component = cmsCore::request('component', 'str');
        $model_method = cmsCore::request('model_method', 'str');
        $custom_file = cmsCore::request('custom_file', 'str');
        $custom_file = mb_stripos($custom_file, 'image/') || mb_stripos($custom_file, 'upload/') || mb_stripos($custom_file, 'cache/') ? '' : $custom_file;
        $custom_file = preg_replace('/\\.+\\//', '', $custom_file);
        $class_name = cmsCore::request('class_name', 'str');
        $class_method = cmsCore::request('class_method', 'str');
        cmsCron::registerJob($job_name, array('interval' => $job_interval, 'component' => $component, 'model_method' => $model_method, 'comment' => $comment, 'custom_file' => $custom_file, 'enabled' => $enabled, 'class_name' => $class_name, 'class_method' => $class_method));
        cmsCore::redirect('index.php?view=cron');
    }
    if ($do == 'update') {
        if (!cmsUser::checkCsrfToken()) {
            cmsCore::error404();
        }
        if (!$id) {
            cmsCore::halt();
        }
        $job_name = cmsCore::request('job_name', 'str');
        $comment = cmsCore::request('comment', 'str');
        $job_interval = cmsCore::request('job_interval', 'int');
        $enabled = cmsCore::request('enabled', 'int');
        $component = cmsCore::request('component', 'str');
        $model_method = cmsCore::request('model_method', 'str');
        $custom_file = cmsCore::request('custom_file', 'str');
        $custom_file = mb_stripos($custom_file, 'image/') || mb_stripos($custom_file, 'upload/') || mb_stripos($custom_file, 'cache/') ? '' : $custom_file;
        $custom_file = preg_replace('/\\.+\\//', '', $custom_file);
        $class_name = cmsCore::request('class_name', 'str');
        $class_method = cmsCore::request('class_method', 'str');
        cmsCron::updateJob($id, array('job_name' => $job_name, 'job_interval' => $job_interval, 'component' => $component, 'model_method' => $model_method, 'comment' => $comment, 'custom_file' => $custom_file, 'is_enabled' => $enabled, 'class_name' => $class_name, 'class_method' => $class_method));
        cmsCore::redirect('index.php?view=cron');
    }
    if ($do == 'edit' || $do == 'add') {
        $toolmenu = array(array('icon' => 'save.gif', 'title' => $_LANG['SAVE'], 'link' => 'javascript:document.addform.submit();'), array('icon' => 'cancel.gif', 'title' => $_LANG['CANCEL'], 'link' => 'javascript:history.go(-1);'));
        cpToolMenu($toolmenu);
        if ($do == 'edit') {
            $mod = cmsCron::getJobById($id);
            echo '<h3>' . $_LANG['AD_EDIT_MISSION'] . '</h3>';
            cpAddPathway($mod['job_name'], 'index.php?view=cron&do=edit&id=' . $mod['id']);
        } else {
            echo '<h3>' . $_LANG['AD_CREATE_CRON_MISSION'] . '</h3>';
            cpAddPathway($_LANG['AD_CREATE_CRON_MISSION'], 'index.php?view=cron&do=add');
        }
        ?>

    <form action="index.php?view=cron" method="post" enctype="multipart/form-data" name="addform" id="addform">
        <input type="hidden" name="csrf_token" value="<?php 
        echo cmsUser::getCsrfToken();
        ?>
" />
        <table width="750" border="0" cellpadding="0" cellspacing="10" class="proptable">
            <tr>
                <td width="300" valign="middle">
                    <strong><?php 
        echo $_LANG['TITLE'];
        ?>
:</strong><br/>
                    <span class="hinttext"><?php 
        echo $_LANG['AD_ONLY_LATIN'];
        ?>
</span>
                </td>
                <td width="" valign="middle">
                    <input name="job_name" type="text" style="width:220px" value="<?php 
        echo @$mod['job_name'];
        ?>
" />
                </td>
            </tr>
            <tr>
                <td width="" valign="middle">
                    <strong><?php 
        echo $_LANG['DESCRIPTION'];
        ?>
: </strong><br/>
                    <span class="hinttext"><?php 
        echo $_LANG['AD_ONLY_200_SIMBOLS'];
        ?>
</span>
                </td>
                <td valign="middle">
                    <input name="comment" type="text" maxlength="200" style="width:400px" value="<?php 
        echo htmlspecialchars($mod['comment']);
        ?>
" />
                </td>
            </tr>
            <tr>
                <td width="" valign="middle">
                    <strong><?php 
        echo $_LANG['AD_MISSION_ON'];
        ?>
 </strong><br/>
                    <span class="hinttext"><?php 
        echo $_LANG['AD_MISSION_OFF'];
        ?>
</span>
                </td>
                <td valign="middle">
                    <label>
                        <input name="enabled" type="radio" value="1" <?php 
        if ($mod['is_enabled']) {
            echo 'checked="checked"';
        }
        ?>
 /> <?php 
        echo $_LANG['YES'];
        ?>
                    </label>
                    <label>
                        <input name="enabled" type="radio" value="0"  <?php 
        if (!$mod['is_enabled']) {
            echo 'checked="checked"';
        }
        ?>
 /> <?php 
        echo $_LANG['NO'];
        ?>
                    </label>
                </td>
            </tr>
            <tr>
                <td width="" valign="middle">
                    <strong><?php 
        echo $_LANG['AD_MISSION_INTERVAL'];
        ?>
:</strong><br/>
                    <span class="hinttext"><?php 
        echo $_LANG['AD_MISSION_PERIOD'];
        ?>
</span>
                </td>
                <td valign="middle">
                    <input name="job_interval" type="text" maxlength="4" style="width:50px" value="<?php 
        echo @$mod['job_interval'];
        ?>
" /> <?php 
        echo $_LANG['HOUR1'] . '.';
        ?>
                </td>
            </tr>
            <tr>
                <td width="" valign="middle">
                    <strong><?php 
        echo $_LANG['AD_PHP_FILE'];
        ?>
 </strong><br/>
                    <span class="hinttext"><?php 
        echo $_LANG['AD_EXAMPLE'];
        ?>
: <strong>includes/myphp/test.php</strong></span><br/>
                </td>
                <td valign="middle">
                    <input name="custom_file" type="text" maxlength="250" style="width:220px" value="<?php 
        echo @$mod['custom_file'];
        ?>
" />
                </td>
            </tr>
            <tr>
                <td width="" valign="middle">
                    <strong><?php 
        echo $_LANG['AD_COMPONENT'];
        ?>
: </strong><br/>
                </td>
                <td valign="middle">
                    <input name="component" type="text" maxlength="250" style="width:220px" value="<?php 
        echo @$mod['component'];
        ?>
" />
                </td>
            </tr>
            <tr>
                <td width="" valign="middle">
                    <strong><?php 
        echo $_LANG['AD_METHOD'];
        ?>
 </strong><br/>
                </td>
                <td valign="middle">
                    <input name="model_method" type="text" maxlength="250" style="width:220px" value="<?php 
        echo @$mod['model_method'];
        ?>
" />
                </td>
            </tr>
            <tr>
                <td width="" valign="middle">
                    <strong><?php 
        echo icms_ucfirst($_LANG['AD_CLASS']);
        ?>
</strong><br/>
                    <span class="hinttext">
                        <span style="color:#666;font-family: mono"><?php 
        echo $_LANG['AD_FILE_CLASS'];
        ?>
</span>, <?php 
        echo $_LANG['AD_EXAMPLE'];
        ?>
 <strong>actions|cmsActions</strong>&nbsp;<?php 
        echo $_LANG['OR'];
        ?>
<br/>
                        <span style="color:#666;font-family: mono"><?php 
        echo $_LANG['AD_CLASS'];
        ?>
</span>, <?php 
        echo $_LANG['AD_EXAMPLE'];
        ?>
 <strong>cmsDatabase</strong>
                    </span>
                </td>
                <td valign="top">
                    <input name="class_name" type="text" maxlength="50" style="width:220px" value="<?php 
        echo @$mod['class_name'];
        ?>
" />
                </td>
            </tr>
            <tr>
                <td width="" valign="middle">
                    <strong><?php 
        echo $_LANG['AD_CLASS_METHOD'];
        ?>
 </strong><br/>
                </td>
                <td valign="middle">
                    <input name="class_method" type="text" maxlength="50" style="width:220px" value="<?php 
        echo @$mod['class_method'];
        ?>
" />
                </td>
            </tr>
        </table>
        <p>
		  <?php 
        if ($do == 'edit') {
            ?>
	          <input name="do" type="hidden" id="do" value="update" />
	          <input name="add_mod" type="submit" id="add_mod" value="<?php 
            echo $_LANG['AD_SAVE_CRON_MISSION'];
            ?>
" />
		  <?php 
        } else {
            ?>
	          <input name="do" type="hidden" id="do" value="submit" />
	          <input name="add_mod" type="submit" id="add_mod" value="<?php 
            echo $_LANG['AD_CREATE_CRON_MISSION'];
            ?>
" />
		  <?php 
        }
        ?>
          <span style="margin-top:15px">
          <input name="back2" type="button" id="back2" value="<?php 
        echo $_LANG['CANCEL'];
        ?>
" onclick="window.history.back();" />
          </span>
        <?php 
        if ($do == 'edit') {
            echo '<input name="id" type="hidden" value="' . $mod['id'] . '" />';
        }
        ?>
        </p>
      </form>
	<?php 
    }
}
Пример #4
0
<div>
<?php foreach ($tags as $tag) { ?>
    <a class="tag" title="<?php echo $this->spellcount($tag['num'], $_LANG['TAG_ITEM1'], $_LANG['TAG_ITEM2'], $_LANG['TAG_ITEM10']); ?>" href="/search/tag/<?php echo urlencode($tag['tag']); ?>" style="<?php if ($cfg['colors']) { echo 'color: '. $this->cycle($cfg['colors']) .';'; ?><?php } if ($tag['fontsize']) { echo 'font-size: '. $tag['fontsize'] .'px;'; } ?>"><?php echo icms_ucfirst($tag['tag']); ?></a>
<?php } ?>
</div>
Пример #5
0
function applet_cron() {
    cmsCore::loadClass('cron');
    
    global $_LANG;
    
    global $adminAccess;
    
    if (!cmsUser::isAdminCan('admin/config', $adminAccess)) { cpAccessDenied(); }

    cmsCore::c('page')->setTitle($_LANG['AD_CRON_MISSION']);
    cpAddPathway($_LANG['AD_SITE_SETTING'], 'index.php?view=config');
    cpAddPathway($_LANG['AD_CRON_MISSION'], 'index.php?view=cron');

    $do = cmsCore::request('do', 'str', 'list');
    $id = cmsCore::request('id', 'int', '0');
    
    if ($do == 'list') {
        $toolmenu = array(
            array( 'icon' => 'new.gif', 'title' => $_LANG['AD_CREATE_CRON_MISSION'], 'link' => '?view=cron&do=add' )
        );

        cpToolMenu($toolmenu);

        $items = cmsCron::getJobs(false);

        $tpl_file   = 'admin/cron.php';
        $tpl_dir    = file_exists(TEMPLATE_DIR . $tpl_file) ? TEMPLATE_DIR : DEFAULT_TEMPLATE_DIR;

        include($tpl_dir . $tpl_file);
    }

    if ($do == 'show') {
        if ($id) { cmsCron::jobEnabled($id, true);  }
        cmsCore::halt('1');
    }
    
    if ($do == 'hide') {
        if ($id) { cmsCron::jobEnabled($id, false);  }
        cmsCore::halt('1');
    }
    
    if ($do == 'delete') {
        if ($id) { cmsCron::removeJobById($id); }
        cmsCore::redirect('index.php?view=cron');
    }
    
    if ($do == 'execute') {
        if ($id) { $job_result = cmsCron::executeJobById($id); }

        if ($job_result) {
            cmsCore::addSessionMessage($_LANG['AD_MISSION_SUCCESS'], 'success');
        } else {
            cmsCore::addSessionMessage($_LANG['AD_MISSION_ERROR'], 'error');
        }

        cmsCore::redirect('index.php?view=cron');
    }
    
    if ($do == 'submit') {
        if (!cmsUser::checkCsrfToken()) { cmsCore::error404(); }

        $job_name     = cmsCore::request('job_name', 'str');
        $comment      = cmsCore::request('comment', 'str');
        $job_interval = cmsCore::request('job_interval', 'int');
        $enabled      = cmsCore::request('enabled', 'int');
        $component    = cmsCore::request('component', 'str');
        $model_method = cmsCore::request('model_method', 'str');
        $custom_file  = cmsCore::request('custom_file', 'str');
        $custom_file  = (mb_stripos($custom_file, 'image') || mb_stripos($custom_file, 'upload') || mb_stripos($custom_file, 'cache')) ? '' : $custom_file;
        $custom_file  = preg_replace('/\.+\//', '', $custom_file);
        $class_name   = cmsCore::request('class_name', 'str');
        $class_method = cmsCore::request('class_method', 'str');

        cmsCron::registerJob(
            $job_name,
            array(
                'interval' => $job_interval,
                'component' => $component,
                'model_method' => $model_method,
                'comment' => $comment,
                'custom_file' => $custom_file,
                'enabled' => $enabled,
                'class_name' => $class_name,
                'class_method' => $class_method
            )
        );

        cmsCore::redirect('index.php?view=cron');
    }
    
    if ($do == 'update') {
        if (!cmsUser::checkCsrfToken()) { cmsCore::error404(); }

        if (!$id) { cmsCore::halt(); }

        $job_name     = cmsCore::request('job_name', 'str');
        $comment      = cmsCore::request('comment', 'str');
        $job_interval = cmsCore::request('job_interval', 'int');
        $enabled      = cmsCore::request('enabled', 'int');
        $component    = cmsCore::request('component', 'str');
        $model_method = cmsCore::request('model_method', 'str');
        $custom_file  = cmsCore::request('custom_file', 'str');
        $custom_file  = (mb_stripos($custom_file, 'image') || mb_stripos($custom_file, 'upload') || mb_stripos($custom_file, 'cache')) ? '' : $custom_file;
        $custom_file  = preg_replace('/\.+\//', '', $custom_file);
        $class_name   = cmsCore::request('class_name', 'str');
        $class_method = cmsCore::request('class_method', 'str');

        cmsCron::updateJob(
            $id,
            array(
                'job_name' => $job_name,
                'job_interval' => $job_interval,
                'component' => $component,
                'model_method' => $model_method,
                'comment' => $comment,
                'custom_file' => $custom_file,
                'is_enabled' => $enabled,
                'class_name' => $class_name,
                'class_method' => $class_method
            )
        );

        cmsCore::redirect('index.php?view=cron');
    }
    
    if ($do == 'edit' || $do == 'add') {
        $toolmenu = array(
            array( 'icon' => 'save.gif', 'title' => $_LANG['SAVE'], 'link' => 'javascript:document.addform.submit();' ),
            array( 'icon' => 'cancel.gif', 'title' => $_LANG['CANCEL'], 'link' => 'javascript:history.go(-1);' )
        );

        cpToolMenu($toolmenu);
        
        if ($do == 'edit') {
            $mod = cmsCron::getJobById($id);
            if (!$mod) { cmsCore::error404(); }
            
            echo '<h3>'. $_LANG['AD_EDIT_MISSION'] .'</h3>';
            cpAddPathway($mod['job_name'], 'index.php?view=cron&do=edit&id='. $mod['id']);
        } else {
            echo '<h3>'. $_LANG['AD_CREATE_CRON_MISSION'] .'</h3>';
            cpAddPathway($_LANG['AD_CREATE_CRON_MISSION'], 'index.php?view=cron&do=add');
            $mod = array();
	}
?>
<form action="index.php?view=cron" method="post" enctype="multipart/form-data" name="addform" id="addform">
    <input type="hidden" name="csrf_token" value="<?php echo cmsUser::getCsrfToken(); ?>" />
    
    <div style="width:650px;">
        <div class="form-group">
            <label><?php echo $_LANG['TITLE']; ?>:</label>
            <input type="text" class="form-control" name="job_name" value="<?php echo cmsCore::getArrVal($mod, 'job_name', ''); ?>" />
            <div class="help-block"><?php echo $_LANG['AD_ONLY_LATIN']; ?></div>
        </div>
        
        <div class="form-group">
            <label><?php echo $_LANG['DESCRIPTION']; ?>:</label>
            <input type="text" class="form-control" name="comment" maxlength="200" value="<?php echo htmlspecialchars(cmsCore::getArrVal($mod, 'comment', '')); ?>" />
            <div class="help-block"><?php echo $_LANG['AD_ONLY_200_SIMBOLS']; ?></div>
        </div>
        
        <div class="form-group">
            <label><?php echo $_LANG['AD_MISSION_ON']; ?>:</label>
            <div class="btn-group" data-toggle="buttons" style="float:right;">
                <label class="btn btn-default <?php if (cmsCore::getArrVal($mod, 'is_enabled')) { echo 'active'; } ?>">
                    <input type="radio" name="enabled" <?php if ($mod['is_enabled']) { echo 'checked="checked"'; } ?> value="1" /> <?php echo $_LANG['YES']; ?>
                </label>
                <label class="btn btn-default <?php if (!cmsCore::getArrVal($mod, 'is_enabled')) { echo 'active'; } ?>">
                    <input type="radio" name="enabled" <?php if (!$mod['is_enabled']) { echo 'checked="checked"'; } ?> value="0" /> <?php echo $_LANG['NO']; ?>
                </label>
            </div>
            <div class="help-block"><?php echo $_LANG['AD_MISSION_OFF']; ?></div>
        </div>
        
        <div class="form-group">
            <label><?php echo $_LANG['AD_MISSION_INTERVAL']; ?> (<?php echo $_LANG['HOUR1']; ?>):</label>
            <input type="number" class="form-control" name="job_interval" min="0" value="<?php echo cmsCore::getArrVal($mod, 'job_interval', ''); ?>" /> 
            <div class="help-block"><?php echo $_LANG['AD_MISSION_PERIOD']; ?></div>
        </div>
        
        <div class="form-group">
            <label><?php echo $_LANG['AD_PHP_FILE']; ?>:</label>
            <input type="text" class="form-control" name="custom_file" maxlength="250" value="<?php echo cmsCore::getArrVal($mod, 'custom_file', ''); ?>" /> 
            <div class="help-block"><?php echo $_LANG['AD_EXAMPLE'] ; ?>: <b>includes/myphp/test.php</b></div>
        </div>
        
        <div class="form-group">
            <label><?php echo $_LANG['AD_COMPONENT']; ?>:</label>
            <input type="text" class="form-control" name="component" maxlength="250" value="<?php echo cmsCore::getArrVal($mod, 'component', ''); ?>" /> 
        </div>
        
        <div class="form-group">
            <label><?php echo $_LANG['AD_METHOD']; ?>:</label>
            <input type="text" class="form-control" name="model_method" maxlength="250" value="<?php echo cmsCore::getArrVal($mod, 'model_method', ''); ?>" /> 
        </div>
        
        <div class="form-group">
            <label><?php echo icms_ucfirst($_LANG['AD_CLASS']); ?></label>
            <input type="text" class="form-control" name="class_name" maxlength="50" value="<?php echo cmsCore::getArrVal($mod, 'class_name', ''); ?>" />
            <div class="help-block">
                <span style="color:#666;font-family: mono"><?php echo $_LANG['AD_FILE_CLASS']; ?></span>, <?php echo $_LANG['AD_EXAMPLE']; ?> <b>actions|cmsActions</b>&nbsp;<?php echo $_LANG['OR']; ?><br/>
                <span style="color:#666;font-family: mono"><?php echo $_LANG['AD_CLASS']; ?></span>, <?php echo $_LANG['AD_EXAMPLE']; ?> <b>cmsDatabase</b>
            </div>
        </div>
        
        <div class="form-group">
            <label><?php echo $_LANG['AD_CLASS_METHOD']; ?>:</label>
            <input type="text" class="form-control" name="class_method" maxlength="50" value="<?php echo cmsCore::getArrVal($mod, 'class_method', ''); ?>" /> 
        </div>
    </div>
    
    <div>
        <?php if ($do == 'edit') { ?>
            <input type="hidden" name="do" value="update" />
            <input type="submit" class="btn btn-primary" name="add_mod" value="<?php echo $_LANG['AD_SAVE_CRON_MISSION']; ?>" />
        <?php } else { ?>
            <input type="hidden" name="do" value="submit" />
            <input type="submit" class="btn btn-primary" name="add_mod" value="<?php echo $_LANG['AD_CREATE_CRON_MISSION'] ; ?>" />
        <?php } ?>
        
        <input type="button" class="btn btn-default" name="back2" value="<?php echo $_LANG['CANCEL']; ?>" onclick="window.history.back();" />
          
        <?php
            if ($do == 'edit') {
                echo '<input type="hidden" name="id" value="'. $mod['id'] .'" />';
            }
        ?>
        </div>
</form>
<?php
   }
}
Пример #6
0
function board() {
    $inCore = cmsCore::getInstance();

    global $_LANG;

    define('IS_BILLING', $inCore->isComponentInstalled('billing'));
    if (IS_BILLING) { cmsCore::loadClass('billing'); }

    $do = $inCore->do;

    $pagetitle = $inCore->getComponentTitle();
    $pagekeys = $pagedesc  = '';
    
    cmsCore::c('page')->setTitle($pagetitle);
    cmsCore::c('page')->addPathway($pagetitle, '/board');

/////////////////////////////// VIEW CATEGORY //////////////////////////////////
if ($do == 'view') {
    //Получаем текущую категорию
    $category = cmsCore::m('board')->getCategory(cmsCore::m('board')->category_id);
    if (!$category || (!$category['published'] && !cmsCore::c('user')->is_admin)) {
        cmsCore::error404();
    }

    if ($category['id'] != cmsCore::m('board')->root_cat['id']) {
        $pagetitle = $category['pagetitle'] ? $category['pagetitle'] : $category['title'];
        $pagekeys  = $category['meta_keys'];
        $pagedesc  = $category['meta_desc'];

        $category_path  = cmsCore::c('db')->getNsCategoryPath('cms_board_cats', $category['NSLeft'], $category['NSRight']);
        if ($category_path) {
            foreach($category_path as $pcat) {
                cmsCore::c('page')->addPathway($pcat['title'], '/board/'. $pcat['id']);
            }
        }
    } else {
        $category['title'] = $pagetitle = $inCore->menuTitle();
        $category['description'] = cmsCore::m('board')->config['root_description'];
        $pagekeys = cmsCore::m('board')->config['meta_keys'];
        $pagedesc = cmsCore::m('board')->config['meta_desc'];
    }

    // rss в адресной строке
    $rss_cat_id = $category['id'] == cmsCore::m('board')->root_cat['id'] ? 'all' : $category['id'];
    cmsCore::c('page')->addHead('<link rel="alternate" type="application/rss+xml" title="'. $_LANG['BOARD'] .'" href="'. HOST .'/rss/board/'. $rss_cat_id .'/feed.rss">');

    //Формируем категории
    $cats = cmsCore::m('board')->getSubCats($category['id']);

    // Формируем список объявлений
    // Устанавливаем категорию
    if ($category['id'] != cmsCore::m('board')->root_cat['id']) {
        cmsCore::m('board')->whereThisAndNestedCats($category['NSLeft'], $category['NSRight']);
    }

    //Город
    if (cmsCore::m('board')->city) {
        cmsCore::m('board')->whereCityIs(cmsCore::m('board')->city);
        $pagetitle .= ' :: '. cmsCore::m('board')->city;
    }

    // Типы объявлений
    if (cmsCore::m('board')->obtype && mb_stristr(icms_ucfirst($category['obtypes']), cmsCore::m('board')->obtype)) {
        cmsCore::m('board')->whereTypeIs(cmsCore::m('board')->obtype);
        $pagetitle .= ' :: '. cmsCore::m('board')->obtype;
    }

    // модератор или админ
    $is_moder = cmsCore::c('user')->is_admin || cmsCore::m('board')->is_moderator_by_group;

    // Общее количество объявлений по заданным выше условиям
    $total = cmsCore::m('board')->getAdvertsCount($is_moder, true);

    //устанавливаем сортировку
    $orderby = cmsCore::m('board')->getOrder('orderby', $category['orderby']);
    $orderto = cmsCore::m('board')->getOrder('orderto', $category['orderto']);
    cmsCore::c('db')->orderBy('is_vip DESC, '. $orderby, $orderto);

    //устанавливаем номер текущей страницы и кол-во объявлений на странице
    cmsCore::c('db')->limitPage(cmsCore::m('board')->page, $category['perpage']);

    // Получаем объявления
    $items = cmsCore::m('board')->getAdverts($is_moder, true, false, true);
    // Если объявлений на странице большей чем 1 нет, 404
    if (!$items && cmsCore::m('board')->page > 1) { cmsCore::error404(); }

    // если не указаны ключевые слова, формируем их из названий рубрик и типов 
    if (!$pagekeys && $cats) { 
        foreach($cats as $c) { 
            $keys[] = $c['title']; 
            foreach (explode("\n", $c['obtypes']) as $obtype) {
                $keys[] = trim($obtype);
            }
        }

        $pagekeys = implode(',', $keys);
    } else if(!$cats) {
        $pagekeys = $category['title'];
    }

    // если не указано описание, формируем из текущих объявлений
    if (!$pagedesc && $items) {
        foreach ($items as $i) {
            $desc[] = $i['title'];
        }

        $pagedesc = implode('. ', $desc);
    } else if(!$items && $category['description']) {
        $pagedesc = crop($category['description']);
    }

    // Проставляем заголовки страницы и описание согласно выборки
    cmsCore::c('page')->setDescription(crop($pagedesc));
    cmsCore::c('page')->setKeywords($pagekeys);
    cmsCore::c('page')->setTitle($pagetitle);

    // Отдаем в шаблон категории
    cmsPage::initTemplate('components', 'com_board_cats')->
        assign('cats', $cats)->
        assign('category', $category)->
        assign('root_id', cmsCore::m('board')->root_cat['id'])->
        assign('is_user', cmsCore::c('user')->id)->
        assign('maxcols', cmsCore::m('board')->config['maxcols'])->
        display();

    $pagebar = cmsPage::getPagebar($total, cmsCore::m('board')->page, $category['perpage'], '/board/%catid%-%page%', array('catid'=>$category['id']));
    $order_form = $category['orderform'] ? cmsCore::m('board')->orderForm($orderby, $orderto, $category) : '';

    // Отдаем в шаблон объявления
    cmsPage::initTemplate('components', 'com_board_items')->
        assign('order_form', $order_form)->
        assign('cfg', cmsCore::m('board')->config)->
        assign('root_id', cmsCore::m('board')->root_cat['id'])->
        assign('items', $items)->
        assign('cat', $category)->
        assign('maxcols', $category['maxcols'])->
        assign('colwidth', round(100/$category['maxcols']))->
        assign('pagebar', $pagebar)->
        display();
}

/////////////////////////////// VIEW USER ADV //////////////////////////////////
if ($do == 'by_user') {
    // логин пользователя
    $login = cmsCore::request('login', 'str', cmsCore::c('user')->login);

    // получаем данные пользователя
    $user = cmsUser::getShortUserData($login);
    if (!$user) { cmsCore::error404(); }

    $myprofile = cmsCore::m('board')->checkAccess($user['id']);

    cmsCore::c('page')->addPathway($user['nickname']);
    cmsCore::c('page')->setTitle($_LANG['BOARD'] .' - '. $user['nickname']);
    cmsCore::c('page')->setDescription($_LANG['BOARD'] .' - '. $user['nickname']);

    // Формируем список объявлений
    cmsCore::m('board')->whereUserIs($user['id']);

    // Общее количество объявлений по заданным выше условиям
    $total = cmsCore::m('board')->getAdvertsCount($myprofile);

    //устанавливаем сортировку
    cmsCore::c('db')->orderBy('pubdate', 'DESC');

    //устанавливаем номер текущей страницы и кол-во объявлений на странице
    cmsCore::c('db')->limitPage(cmsCore::m('board')->page, 15);

    // Получаем объявления
    $items = cmsCore::m('board')->getAdverts($myprofile, true, false, true);
    // Если объявлений на странице большей чем 1 нет, 404
    if(!$items && cmsCore::m('board')->page > 1){ cmsCore::error404(); }

    // Пагинация
    $pagebar = cmsPage::getPagebar($total, cmsCore::m('board')->page, 15, '/board/by_user_'.$login.'/page-%page%');

    // Показываем даты
    $category['showdate'] = 1;

    cmsPage::initTemplate('components', 'com_board_items')->
        assign('cfg', cmsCore::m('board')->config)->
        assign('page_title', $_LANG['BOARD'].' - '.$user['nickname'])->
        assign('root_id', cmsCore::m('board')->root_cat['id'])->
        assign('items', $items)->
        assign('cat', $category)->
        assign('maxcols', 1)->
        assign('colwidth', 100)->
        assign('pagebar', $pagebar)->
        display();
}

/////////////////////////////// VIEW ITEM //////////////////////////////////////
if ($do == 'read') {
    // получаем объявление
    $item = cmsCore::m('board')->getRecord(cmsCore::m('board')->item_id);
    if (!$item) { cmsCore::error404(); }

    // неопубликованные показываем админам, модераторам и автору
    if (!$item['published'] && !$item['moderator']) { cmsCore::error404(); }

    // для неопубликованного показываем инфо: просрочено/на модерации
    if (!$item['published']) {
        $info_text = $item['is_overdue'] ? $_LANG['ADV_IS_EXTEND'] : $_LANG['ADV_IS_MODER'];
        cmsCore::addSessionMessage($info_text, 'info');
    } else {
        // увеличиваем кол-во просмотров
        cmsCore::c('db')->setFlag('cms_board_items', cmsCore::m('board')->item_id, 'hits', $item['hits']+1);
    }

    // формируем заголовок и тело сообщения
    $item['title']   = $item['obtype'].' '.$item['title'];
    $item['content'] = nl2br($item['content']);
    $item['content'] = cmsCore::m('board')->config['auto_link'] ? $inCore->parseSmiles($item['content']) : $item['content'];

    $category_path = cmsCore::c('db')->getNsCategoryPath('cms_board_cats', $item['NSLeft'], $item['NSRight']);
    if ($category_path) {
        foreach ($category_path as $pcat) {
            cmsCore::c('page')->addPathway($pcat['title'], '/board/'.$pcat['id']);
        }
    }
    cmsCore::c('page')->addPathway($item['title']);

    $pagetitle = $item['pagetitle'] ? $item['pagetitle'] : $item['title'];
    $pagekeys  = $item['meta_keys'] ? $item['meta_keys'] : $item['title'];
    $pagedesc  = $item['meta_desc'] ? $item['meta_desc'] : $item['content'];

    cmsCore::c('page')->setTitle($pagetitle);
    cmsCore::c('page')->setDescription(crop($pagedesc));
    cmsCore::c('page')->setKeywords($pagekeys);

    cmsPage::initTemplate('components', 'com_board_item')->
        assign('item', $item)->
        assign('cfg', cmsCore::m('board')->config)->
        assign('user_id', cmsCore::c('user')->id)->
        assign('is_admin', cmsCore::c('user')->is_admin)->
        assign('formsdata', cmsForm::getFieldsValues($item['form_id'], $item['form_array']))->
        assign('is_moder', cmsCore::m('board')->is_moderator_by_group)->
        display();
}

/////////////////////////////// NEW BOARD ITEM /////////////////////////////////
if ($do == 'additem') {
    // Получаем категории, в которые может загружать пользователь
    $catslist = cmsCore::m('board')->getPublicCats(cmsCore::m('board')->category_id);
    if (!$catslist) {
        cmsCore::addSessionMessage($_LANG['YOU_CANT_ADD_ADV_ANY'], 'error');
        $inCore->redirect('/board');
    }

    $cat['is_photos'] = 1;
    $formsdata = array();
    if (cmsCore::m('board')->category_id && cmsCore::m('board')->category_id != cmsCore::m('board')->root_cat['id']) {
        $cat = cmsCore::m('board')->getCategory(cmsCore::m('board')->category_id);
        $formsdata = cmsForm::getFieldsHtml($cat['form_id']);
    }

    cmsCore::c('page')->addPathway($_LANG['ADD_ADV']);

    if ( !cmsCore::inRequest('submit') ) {
        if (IS_BILLING) { cmsBilling::checkBalance('board', 'add_item'); }
        cmsCore::c('page')->setTitle($_LANG['ADD_ADV']);

        $item = cmsUser::sessionGet('item');
        if ($item) { cmsUser::sessionDel('item'); }

        $item['city'] = !empty($item['city']) ? $item['city'] : cmsCore::c('user')->city;

        cmsPage::initTemplate('components', 'com_board_edit')->
            assign('action', "/board/add.html")->
            assign('form_do', 'add')->
            assign('cfg', cmsCore::m('board')->config)->
            assign('cat', $cat)->
            assign('item', $item)->
            assign('pagetitle', $_LANG['ADD_ADV'])->
            assign('formsdata', $formsdata)->
            assign('is_admin', cmsCore::c('user')->is_admin)->
            assign('is_user', cmsCore::c('user')->id)->
            assign('catslist', $catslist)->
            assign('is_billing', IS_BILLING)->assign('balance', cmsCore::c('user')->balance)->
            display();

        cmsUser::sessionClearAll();

        return;
    }

    if ( cmsCore::inRequest('submit') ) {
        // проверяем на заполненость скрытое поле
        $title_fake = cmsCore::request('title_fake', 'str', '');
        // если оно заполнено, считаем что это бот, 404
        if ($title_fake) { cmsCore::error404(); }

        $errors = false;

        // проверяем наличие категории
        if (!$cat['id']) {
            cmsCore::addSessionMessage($_LANG['NEED_CAT_ADV'], 'error');
            $errors = true;
        }

        // Проверяем количество добавленных за сутки
        if (!cmsCore::m('board')->checkLoadedByUser24h($cat)){
            cmsCore::addSessionMessage($_LANG['MAX_VALUE_OF_ADD_ADV'], 'error');
            $errors = true;
        }
        // Можем ли добавлять в эту рубрику
        if (!cmsCore::m('board')->checkAdd($cat)){
            cmsCore::addSessionMessage($_LANG['YOU_CANT_ADD_ADV'], 'error');
            $errors = true;
        }

        // входные данные
        $obtype     = icms_ucfirst(cmsCore::request('obtype', 'str', ''));
        $title      = trim(str_ireplace($obtype, '', cmsCore::request('title', 'str', '')));
        $content    = cmsCore::request('content', 'str', '');
        $city       = cmsCore::request('city', 'str', '');

        if ((cmsCore::m('board')->config['seo_user_access'] && cmsCore::c('user')->id) || cmsCore::c('user')->is_admin) {
            $pagetitle = cmsCore::request('pagetitle', 'str', '');
            $meta_keys = cmsCore::request('meta_keys', 'str', '');
            $meta_desc = cmsCore::request('meta_desc', 'str', '');
        } else {
            $pagetitle = $meta_keys = $meta_desc = '';
        }

        $form_input = cmsForm::getFieldsInputValues($cat['form_id']);
        $formsdata  = cmsCore::c('db')->escape_string(cmsCore::arrayToYaml($form_input['values']));

        $vipdays    = cmsCore::request('vipdays', 'int', 0);

        $published  = cmsCore::m('board')->checkPublished($cat);

        if (cmsCore::m('board')->config['srok']){  $pubdays = (cmsCore::request('pubdays', 'int') <= 50) ? cmsCore::request('pubdays', 'int') : 50; }
        if (!cmsCore::m('board')->config['srok']){ $pubdays = isset(cmsCore::m('board')->config['pubdays']) ? cmsCore::m('board')->config['pubdays'] : 14; }

        // Проверяем значения
        if (!$title) {
            cmsCore::addSessionMessage($_LANG['NEED_TITLE'], 'error');
            $errors = true;
        }
        if (!$content) {
            cmsCore::addSessionMessage($_LANG['NEED_TEXT_ADV'], 'error');
            $errors = true;
        }
        if (!$city) {
            cmsCore::addSessionMessage($_LANG['NEED_CITY'], 'error');
            $errors = true;
        }
        if (!cmsCore::c('user')->id && !cmsCore::checkCaptchaCode()) {
            cmsCore::addSessionMessage($_LANG['ERR_CAPTCHA'], 'error');
            $errors = true;
        }

        // Проверяем значения формы
        foreach ($form_input['errors'] as $field_error) {
            if ($field_error) {
                cmsCore::addSessionMessage($field_error, 'error');
                $errors = true;
            }
        }

        if ($errors) {
            $item['content'] = htmlspecialchars(stripslashes($_REQUEST['content']));
            $item['city']    = stripslashes($city);
            $item['title']   = stripslashes($title);
            $item['obtype']  = $obtype;
            cmsUser::sessionPut('item', $item);
            cmsCore::redirect('/board/'. cmsCore::m('board')->category_id .'/add.html');
        }

        if ($cat['is_photos']) {
            // Загружаем фото
            $file = cmsCore::m('board')->uploadPhoto('', $cat);
        } else {
            $file['filename'] = '';
            cmsCore::addSessionMessage($_LANG['INFO_CAT_NO_PHOTO'], 'info');
        }
        
        
        $add = array(
            'category_id' => cmsCore::m('board')->category_id,
            'user_id'     => cmsCore::c('user')->id,
            'obtype'      => $obtype,
            'title'       => $title,
            'content'     => $content,
            'formsdata'   => $formsdata,
            'city'        => $city,
            'pubdays'     => $pubdays,
            'published'   => $published,
            'pagetitle'   => $pagetitle,
            'meta_keys'   => $meta_keys,
            'meta_desc'   => $meta_desc,
            'file'        => $file['filename']
        );
        $add['id'] = cmsCore::m('board')->addRecord($add);

        if (cmsCore::c('user')->is_admin && $vipdays) {
            cmsCore::m('board')->setVip($add['id'], $vipdays);
        }

        if (IS_BILLING) {
            cmsBilling::process('board', 'add_item');
            if (cmsCore::m('board')->config['vip_enabled'] && $vipdays && cmsCore::m('board')->config['vip_day_cost']) {
                if ($vipdays > cmsCore::m('board')->config['vip_max_days']) {
                    $vipdays = cmsCore::m('board')->config['vip_max_days'];
                }

                $summ = $vipdays * cmsCore::m('board')->config['vip_day_cost'];

                if (cmsCore::c('user')->balance >= $summ) {
                    cmsBilling::pay(cmsCore::c('user')->id, $summ, $_LANG['VIP_ITEM']);
                    cmsCore::m('board')->setVip($add['id'], $vipdays);
                }
            }
        }

        cmsUser::sessionClearAll();

        if ($published) {
            //регистрируем событие
            cmsActions::log('add_board', array(
                'object'      => $obtype .' '. $title,
                'object_url'  => '/board/read'. $add['id'] .'.html',
                'object_id'   => $add['id'],
                'target'      => $cat['title'],
                'target_url'  => '/board/'. $cat['id'],
                'target_id'   => $cat['id'],
                'description' => ''
            ));
            cmsCore::addSessionMessage($_LANG['ADV_IS_ADDED'], 'success');
            cmsCore::callEvent('ADD_BOARD_DONE', $add);
            cmsCore::redirect('/board/read'. $add['id'] .'.html');
        }

        if (!$published) {
            $link = '<a href="/board/read'. $add['id'] .'.html">'. $obtype .' '. $title .'</a>';
            if (cmsCore::c('user')->id) {
                $user = '******'. cmsUser::getProfileURL(cmsCore::c('user')->login) .'">'. cmsCore::c('user')->nickname .'</a>';
            } else {
                $user = $_LANG['BOARD_GUEST'] .', ip: '. cmsCore::c('user')->ip;
            }
            $message = str_replace('%user%', $user, $_LANG['MSG_ADV_SUBMIT']);
            $message = str_replace('%link%', $link, $message);
            cmsUser::sendMessage(USER_UPDATER, 1, $message);

            cmsCore::addSessionMessage($_LANG['ADV_IS_ADDED'] .'<br>'. $_LANG['ADV_PREMODER_TEXT'], 'success');
            cmsCore::redirect('/board/'.cmsCore::m('board')->category_id);
        }
    }
}

/////////////////////////////// EDIT BOARD ITEM ////////////////////////////////
if ($do == 'edititem') {
    $item = cmsCore::m('board')->getRecord(cmsCore::m('board')->item_id);
    $cat  = cmsCore::m('board')->getCategory($item['category_id']);

    if (!$cat || !$item) { cmsCore::error404(); }

    cmsCore::c('page')->setTitle($_LANG['EDIT_ADV']);
    cmsCore::c('page')->addPathway($item['category'], '/board/'. $item['cat_id']);
    cmsCore::c('page')->addPathway($_LANG['EDIT_ADV']);

    if (!$item['moderator']) {
        cmsCore::addSessionMessage($_LANG['YOU_HAVENT_ACCESS'], 'error');
        cmsCore::redirect('/board/read'. $item['id'] .'.html');
    }

    $errors = false;

    if (!cmsCore::inRequest('submit')) {
        cmsPage::initTemplate('components', 'com_board_edit')->
            assign('action', "/board/edit{$item['id']}.html")->
            assign('form_do', 'edit')->
            assign('cfg', cmsCore::m('board')->config)->
            assign('cat', $cat)->
            assign('item', $item)->
            assign('pagetitle', $_LANG['EDIT_ADV'])->
            assign('is_admin', cmsCore::c('user')->is_admin)->
            assign('catslist', cmsCore::m('board')->getPublicCats($item['category_id'], true))->
            assign('formsdata', cmsForm::getFieldsHtml($cat['form_id'], $item['form_array']))->
            assign('is_user', cmsCore::c('user')->id)->
            assign('is_billing', IS_BILLING)->assign('balance', cmsCore::c('user')->balance)->
            display();

        cmsUser::sessionClearAll();
    }

    if (cmsCore::inRequest('submit')) {
        $new_cat_id = cmsCore::request('category_id', 'int', 0);
        if ($new_cat_id) {
            $item['category_id'] = $new_cat_id;
        }

        $form_input = cmsForm::getFieldsInputValues($cat['form_id']);
        $formsdata  = cmsCore::c('db')->escape_string(cmsCore::arrayToYaml($form_input['values']));

        if ($item['is_overdue'] && !$item['published']) {
            if (cmsCore::m('board')->config['srok']) {
                $pubdays = (cmsCore::request('pubdays', 'int') <= 50) ? cmsCore::request('pubdays', 'int') : 50;
            }
            if (!cmsCore::m('board')->config['srok']) {
                $pubdays = isset(cmsCore::m('board')->config['pubdays']) ? cmsCore::m('board')->config['pubdays'] : 14;
            }

            $pubdate = date('Y-m-d H:i:s');
        } else {
            $pubdays = $item['pubdays'];
            $pubdate = $item['fpubdate'];
        }

        $update['obtype']      = icms_ucfirst(cmsCore::request('obtype', 'str'));
        $update['title']       = trim(str_ireplace($update['obtype'], '', cmsCore::request('title', 'str', '')));
        $update['category_id'] = $item['category_id'];
        $update['content']     = cmsCore::request('content', 'str', '');
        $update['formsdata']   = $formsdata;
        $update['city']        = cmsCore::request('city', 'str', '');
        $update['pubdate']     = $pubdate;
        $update['pubdays']     = $pubdays;
        $update['published']   = cmsCore::m('board')->checkPublished($cat, true);
        if ((cmsCore::m('board')->config['seo_user_access'] && cmsCore::c('user')->id) || cmsCore::c('user')->is_admin) {
            $update['pagetitle'] = cmsCore::request('pagetitle', 'str', '');
            $update['meta_keys'] = cmsCore::request('meta_keys', 'str', '');
            $update['meta_desc'] = cmsCore::request('meta_desc', 'str', '');
        }

        if (!$update['title']) {
            cmsCore::addSessionMessage($_LANG['NEED_TITLE'], 'error');
            $errors = true;
        }
        if (!$update['content']) {
            cmsCore::addSessionMessage($_LANG['NEED_TEXT_ADV'], 'error');
            $errors = true;
        }
        if (!$update['city']) {
            cmsCore::addSessionMessage($_LANG['NEED_CITY'], 'error');
            $errors = true;
        }

        // Проверяем значения формы
        foreach ($form_input['errors'] as $field_error) {
            if ($field_error) {
                cmsCore::addSessionMessage($field_error, 'error');
                $errors = true;
            }
        }

        if ($errors) {
            $inCore->redirect('/board/edit'. $item['id'] .'.html');
        }

        if ($cat['is_photos']) {
            // Загружаем фото
            $file = cmsCore::m('board')->uploadPhoto($item['file'], $cat);
        }

        $update['file'] = $file['filename'] ? $file['filename'] : $item['file'];

        // обновляем объявление
        cmsCore::m('board')->updateRecord($item['id'], $update);
        // обновляем запись в ленте активности
        cmsActions::updateLog('add_board', array('object' => $update['obtype'] .' '. $update['title']), $item['id']);
        $vipdays = cmsCore::request('vipdays', 'int', 0);

        if (cmsCore::c('user')->is_admin) {
            if ($vipdays > 0) {
                cmsCore::m('board')->setVip($item['id'], $vipdays);
            }
            if ($vipdays == -1) {
                cmsCore::m('board')->deleteVip($item['id']);
            }
        }

        if (IS_BILLING) {
            if (cmsCore::m('board')->config['vip_enabled'] && cmsCore::m('board')->config['vip_prolong'] && $vipdays && cmsCore::m('board')->config['vip_day_cost']) {
                if ($vipdays > cmsCore::m('board')->config['vip_max_days']) {
                    $vipdays = cmsCore::m('board')->config['vip_max_days'];
                }

                $summ = $vipdays * cmsCore::m('board')->config['vip_day_cost'];

                if (cmsCore::c('user')->balance >= $summ) {
                    cmsBilling::pay(cmsCore::c('user')->id, $summ, $_LANG['VIP_ITEM']);
                    cmsCore::m('board')->setVip($item['id'], $vipdays);
                }
            }
        }

        cmsUser::sessionClearAll();

        if (!$update['published']) {
            $link = '<a href="/board/read'. $item['id'] .'.html">'. $update['obtype'] .' '. $update['title'] .'</a>';
            $user = '******'. cmsUser::getProfileURL(cmsCore::c('user')->login) .'">'. cmsCore::c('user')->nickname .'</a>';

            $message = str_replace(array('%link%','%user%'), array($link,$user), $_LANG['MSG_ADV_EDITED']);
            cmsUser::sendMessage(USER_UPDATER, 1, $message);

            cmsCore::addSessionMessage($_LANG['ADV_EDIT_PREMODER_TEXT'], 'info');
        }

        cmsCore::addSessionMessage($_LANG['ADV_MODIFIED'], 'success');
        cmsCore::redirect('/board/read'. $item['id'] .'.html');
    }
}

///////////////////////// PUBLISH BOARD ITEM ///////////////////////////////////
if ($do == 'publish') {
    $item = cmsCore::m('board')->getRecord(cmsCore::m('board')->item_id);
    if (!$item) { cmsCore::error404(); }

    // если уже опубликовано, 404
    if ($item['published']) { cmsCore::error404(); }

    // публиковать могут админы и модераторы доски
    if (!cmsCore::c('user')->is_admin && !cmsCore::m('board')->is_moderator_by_group) {
        cmsCore::error404();
    }

    // публикуем
    cmsCore::c('db')->setFlag('cms_board_items', cmsCore::m('board')->item_id, 'published', 1);

    cmsCore::callEvent('ADD_BOARD_DONE', $item);

    if ($item['user_id']) {
        //регистрируем событие
        cmsActions::log('add_board', array(
            'object'      => $item['obtype'] .' '. $item['title'],
            'user_id'     => $item['user_id'],
            'object_url'  => '/board/read'. $item['id'] .'.html',
            'object_id'   => $item['id'],
            'target'      => $item['category'],
            'target_url'  => '/board/'. $item['cat_id'],
            'target_id'   => $item['cat_id'],
            'description' => ''
        ));

        $link = '<a href="/board/read'. $item['id'] .'.html">'. $item['obtype'] .' '. $item['title'] .'</a>';
        $message = str_replace('%link%', $link, $_LANG['MSG_ADV_ACCEPTED']);
        cmsUser::sendMessage(USER_UPDATER, $item['user_id'], $message);
    }

    cmsCore::addSessionMessage($_LANG['ADV_IS_ACCEPTED'], 'success');

    cmsCore::redirect('/board/read'. $item['id'] .'.html');
}

/////////////////////////////// DELETE BOARD ITEM //////////////////////////////
if ($do == 'delete') {
    $item = cmsCore::m('board')->getRecord(cmsCore::m('board')->item_id);
    if (!$item) { cmsCore::error404(); }

    if (!$item['moderator']) {
        cmsCore::addSessionMessage($_LANG['YOU_HAVENT_ACCESS'], 'error');
        cmsCore::redirect('/board/'. $item['cat_id']);
    }

    if (!cmsCore::inRequest('godelete')) {
        cmsCore::c('page')->setTitle($_LANG['DELETE_ADV']);
        cmsCore::c('page')->addPathway($item['category'], '/board/'. $item['cat_id']);
        cmsCore::c('page')->addPathway($_LANG['DELETE_ADV']);

        $confirm['title']               = $_LANG['DELETING_ADV'];
        $confirm['text']                = $_LANG['YOU_SURE_DELETE_ADV'] .' "'. $item['title'] .'"?';
        $confirm['action']              = $_SERVER['REQUEST_URI'];
        $confirm['yes_button']['name']  = 'godelete';

        cmsPage::initTemplate('components', 'action_confirm')->
            assign('confirm', $confirm)->
            display();
    }

    if (cmsCore::inRequest('godelete')) {
        cmsCore::m('board')->deleteRecord(cmsCore::m('board')->item_id);
        cmsCore::addSessionMessage($_LANG['ADV_IS_DELETED'], 'success');
        cmsCore::redirect('/board/'. $item['cat_id']);
    }
}
}
Пример #7
0
 /**
  * Возвращает значение поля формы
  * @param array $form_field Массив поля формы
  * @return string html
  */
 public function getFormFieldValue($form_field)
 {
     if (in_array($form_field['kind'], $this->kinds)) {
         $method_name = 'get' . icms_ucfirst($form_field['kind']) . 'Value';
         if (method_exists($this, $method_name)) {
             return call_user_func_array(array($this, $method_name), array($form_field));
         }
         return !empty($form_field['config']['text_is_link']) && $form_field['config']['text_link_prefix'] ? cmsPage::getMetaSearchLink($form_field['config']['text_link_prefix'], $this->getFieldValue($form_field['id'])) : $this->getFieldValue($form_field['id']);
     }
 }
Пример #8
0
 public function getTypesOptions($types = '', $selected = '')
 {
     $html = '';
     if (!$types) {
         $types = explode("\n", $this->config['obtypes']);
     } else {
         $types = explode("\n", $types);
     }
     foreach ($types as $type) {
         $type = icms_ucfirst(htmlspecialchars(trim($type)));
         if (mb_strtolower($selected) == mb_strtolower($type)) {
             $sel = 'selected="selected"';
         } else {
             $sel = '';
         }
         $html .= '<option value="' . $type . '" ' . $sel . '>' . $type . '</option>';
     }
     return $html;
 }
Пример #9
0
        </div>
        
        <div class="form-group">
            <label><?php 
echo $_LANG['AD_METHOD'];
?>
:</label>
            <input type="text" class="form-control" name="model_method" maxlength="250" value="<?php 
echo cmsCore::getArrVal($mod, 'model_method', '');
?>
" /> 
        </div>
        
        <div class="form-group">
            <label><?php 
echo icms_ucfirst($_LANG['AD_CLASS']);
?>
</label>
            <input type="text" class="form-control" name="class_name" maxlength="50" value="<?php 
echo cmsCore::getArrVal($mod, 'class_name', '');
?>
" />
            <div class="help-block">
                <span style="color:#666;font-family: mono"><?php 
echo $_LANG['AD_FILE_CLASS'];
?>
</span>, <?php 
echo $_LANG['AD_EXAMPLE'];
?>
 <b>actions|cmsActions</b>&nbsp;<?php 
echo $_LANG['OR'];
Пример #10
0
function catalog(){

    $inCore = cmsCore::getInstance();
    $inPage = cmsPage::getInstance();
    $inDB   = cmsDatabase::getInstance();
    $inUser = cmsUser::getInstance();

    global $_LANG;

    $model = new cms_model_catalog();

    define('IS_BILLING', $inCore->isComponentInstalled('billing'));
    if (IS_BILLING) { cmsCore::loadClass('billing'); }

    $pagetitle = $inCore->getComponentTitle();

	$inPage->addPathway($pagetitle, '/catalog');
	$inPage->setTitle($pagetitle);

	$inPage->setDescription($model->config['meta_desc'] ? $model->config['meta_desc'] : $pagetitle);
    $inPage->setKeywords($model->config['meta_keys'] ? $model->config['meta_keys'] : $pagetitle);

    $cfg = $inCore->loadComponentConfig('catalog');

    if (cmsCore::inRequest('cat_id')){
        $id = cmsCore::request('cat_id', 'int', 0);
    } else {
        $id = cmsCore::request('id', 'int', 0);
    }

    $do = $inCore->do;

    cmsCore::includeFile('components/catalog/includes/shopcore.php');

    //////////////////////////// RATING SUBMISSION ///////////////////////////////////////////////////////////////////
    if (cmsCore::inRequest('rating')){
        $points     = cmsCore::request('points', 'int', 0);
        $item_id    = cmsCore::request('item_id', 'int', 0);
        $ip         = $inUser->ip;
        if (!alreadyVoted($item_id)){
            $inDB->query("INSERT INTO cms_uc_ratings (item_id, points, ip) VALUES ($item_id, $points, '$ip')") ;
            $inDB->query("DELETE FROM cms_uc_ratings WHERE item_id = $item_id AND ip = '0.0.0.0'") ;
        }
    }

    //////////////////////////// SEARCH BY TAG ///////////////////////////////////////////////////////////////////////
    if ($do == 'tag') {

		$tag = $inCore->strClear(urldecode($inCore->request('tag', 'html', '')));

        $sql = "SELECT tag FROM cms_tags WHERE tag = '$tag' AND target='catalog' LIMIT 1";
        $result = $inDB->query($sql) ;
        if ($inDB->num_rows($result)==1){
            $item = $inDB->fetch_assoc($result);
            $query = $inCore->strClear($item['tag']);
            $findsql = "SELECT *
                        FROM cms_uc_items
                        WHERE category_id = '$id' AND published = 1 AND tags LIKE '%$query%'";
            $do = 'cat';
        } else { echo $_LANG['NO_MATCHING_FOUND']; }

    }
    //////////////////////////// ADVANCED SEARCH ////////////////////////////////////////////////////////////////////
    if ($do == 'search') {

        if (cmsCore::inRequest('gosearch')){

            $fdata = cmsCore::request('fdata', 'array', array());
            $query = cmsCore::strClear(implode('%', $fdata));
            $title = cmsCore::request('title', 'str', '');
            $tags  = cmsCore::request('tags', 'str', '');

            if ($query || $title || $tags){

                $findsql = "SELECT i.* , IFNULL(AVG(r.points),0) AS rating
                            FROM cms_uc_items i
                            LEFT JOIN cms_uc_ratings r ON r.item_id = i.id
                            WHERE i.published = 1 AND i.category_id = '$id' ";

                if($query){
                    $findsql .= " AND i.fieldsdata LIKE '%{$query}%' ";
                }
                if($title){
                    $findsql .= " AND i.title LIKE '%$title%' ";
                }
                if($tags){
                    $findsql .= "AND (i.tags LIKE '%".$tags."%')";
                }

                $findsql .=	" GROUP BY i.id";
                $advsearch = 1;
            }
            $do = 'cat';
        } else {
            //show search form
            $sql = "SELECT * FROM cms_uc_cats WHERE id = '$id'";
            $result = $inDB->query($sql) ;

            if ($inDB->num_rows($result)==1){
                $cat = $inDB->fetch_assoc($result);
                $fstruct = cmsCore::yamlToArray($cat['fieldsstruct']);

                //heading
                $inPage->addPathway($cat['title'], '/catalog/'.$cat['id']);
                $inPage->addPathway($_LANG['SEARCH'], '/catalog/'.$cat['id'].'/search.html');
                $inPage->setTitle($_LANG['SEARCH_IN_CAT']);

                $inPage->addHeadJS('components/catalog/js/search.js');

                $fstruct_ready = array();
                foreach($fstruct as $key=>$value) {
                    if (mb_strstr($value, '/~h~/')) { $ftype = 'html'; $value=str_replace('/~h~/', '', $value); }
                    elseif (mb_strstr($value, '/~l~/')) { $ftype = 'link'; $value=str_replace('/~l~/', '', $value); } else { $ftype='text'; }
                    if (mb_strstr($value, '/~m~/')) {
                        $value = str_replace('/~m~/', '', $value);
                    }
                    $fstruct_ready[stripslashes($key)] = stripslashes($value);
                }

                //searchform
                cmsPage::initTemplate('components', 'com_catalog_search')->
                        assign('id', $id)->
                        assign('cat', $cat)->
                        assign('fstruct', $fstruct_ready)->
                        display('com_catalog_search.tpl');

            } else { cmsCore::error404(); }
        }//search form

    }
    //////////////////////////// SEARCH BY FIRST LETTER OF TITLE ///////////////////////////////////////////////////////
    if ($do == 'findfirst') {

        $id = cmsCore::request('cat_id', 'int');

		$query = mb_substr(cmsCore::strClear(urldecode(cmsCore::request('text', 'html', ''))), 0, 1);

        $findsql = "SELECT i.* , IFNULL(AVG( r.points ),0) AS rating
                    FROM cms_uc_items i
                    LEFT JOIN cms_uc_ratings r ON r.item_id = i.id
                    WHERE i.published = 1 AND i.category_id = $id AND UPPER(LTRIM(i.title)) LIKE UPPER('$query%')
                    GROUP BY i.id";

        $do = 'cat';
        $advsearch = 0;

        $pagemode = 'findfirst';

    }

    //////////////////////////// SEARCH BY FIELD ////////////////////////////////////////////////////////////////////
    if ($do == 'find') {

        $id = cmsCore::request('cat_id', 'int');

        $query = cmsCore::strClear(urldecode(cmsCore::request('text', 'html', '')));

        $findsql = "SELECT i.* , IFNULL(AVG(r.points),0) AS rating
                    FROM cms_uc_items i
                    LEFT JOIN cms_uc_ratings r ON r.item_id = i.id
                    WHERE i.published = 1 AND i.category_id = $id AND i.fieldsdata LIKE '%$query%'
                    GROUP BY i.id";

        $do = 'cat';
        $advsearch = 0;

		$query = stripslashes($query);

        $pagemode = 'find';
    }

    //////////////////////////// LIST OF CATEGORIES ////////////////////////////////////////////////////////////////////
    if ($do == 'view'){ //List of all categories

        $cats_html = subCatsList();
        $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.$_LANG['CATALOG'].'" href="'.HOST.'/rss/catalog/all/feed.rss">');
        cmsPage::initTemplate('components', 'com_catalog_index')->
                assign('cfg', $cfg)->
                assign('title', $pagetitle)->
                assign('cats_html', $cats_html)->
                display('com_catalog_index.tpl');

    }

    //////////////////////////// VIEW CATEGORY ///////////////////////////////////////////////////////////////////////
    if ($do == 'cat'){

        //get category data
        $sql = "SELECT * FROM cms_uc_cats WHERE id = $id";
        $catres = $inDB->query($sql);
        if (!$inDB->num_rows($catres)){ cmsCore::error404(); }

        $cat     = $inDB->fetch_assoc($catres);
        $fstruct = cmsCore::yamlToArray($cat['fieldsstruct']);

        $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.$_LANG['CATALOG'].'" href="'.HOST.'/rss/catalog/'.$cat['id'].'/feed.rss">');

        //heading
        //PATHWAY ENTRY
        $path_list = $model->getCategoryPath($cat['NSLeft'], $cat['NSRight']);
        if ($path_list){
            foreach($path_list as $pcat){
                $inPage->addPathway($pcat['title'], '/catalog/'.$pcat['id']);
            }
        }
        $inPage->setTitle($cat['pagetitle'] ? $cat['pagetitle'] : $cat['title']);

        //subcategories
        $subcats = subCatsList($cat['id'], $cat['NSLeft'], $cat['NSRight']);

        //alphabetic list
        if ($cat['showabc']){ $alphabet = getAlphaList($cat['id']);	} else { $alphabet = ''; }

        //Tool links
        $shopcartlink = shopCartLink();

        //get items SQL
        if (!isset($findsql)){
            $sql = "SELECT i.* , IFNULL(AVG( r.points ), 0) AS rating, i.price as price
                    FROM cms_uc_items i
                    LEFT JOIN cms_uc_ratings r ON r.item_id = i.id
                    WHERE i.published = 1 AND i.category_id = $id
                    GROUP BY i.id";
        } else {
            $sql = $findsql;
            if (!$advsearch){ $inPage->addPathway(icms_ucfirst($query)); } else
            { $inPage->addPathway($_LANG['SEARCH_RESULT']); }
        }

        // сортировка
        if(cmsCore::inRequest('orderby')){
            $orderby = cmsCore::request('orderby', array('hits','rating','pubdate','title','price'), $cat['orderby']);
            cmsUser::sessionPut('uc_orderby', $orderby);
        } elseif(cmsUser::sessionGet('uc_orderby')){
            $orderby = cmsUser::sessionGet('uc_orderby');
        } else {
            $orderby = $cat['orderby'];
        }
        if(cmsCore::inRequest('orderto')){
            $orderto = cmsCore::request('orderto', array('asc','desc'), $cat['orderto']);
            cmsUser::sessionPut('uc_orderto', $orderto);
        } elseif(cmsUser::sessionGet('uc_orderto')){
            $orderto = cmsUser::sessionGet('uc_orderto');
        } else {
            $orderto = $cat['orderto'];
        }

        $sql .=  " ORDER BY ".$orderby." ".$orderto;

        //get total items count
        $result = $inDB->query($sql);
        $itemscount = $inDB->num_rows($result);

        //can user add items here?
        $is_cat_access = $model->checkCategoryAccess($cat['id'], $cat['is_public'], $inUser->group_id);
        $is_can_add = $is_cat_access || $inUser->is_admin;

        $tpl = cmsPage::initTemplate('components', 'com_catalog_view')->
                assign('id', $id)->
                assign('cat', $cat)->
                assign('subcats', $subcats)->
                assign('alphabet', $alphabet)->
                assign('shopcartlink', $shopcartlink)->
                assign('itemscount', $itemscount)->
                assign('is_can_add', $is_can_add)->
                assign('orderform', orderForm($orderby, $orderto, ($cat['view_type']=='shop')));

        //pagination
        if (!@$advsearch) { $perpage = $cat['perpage']; } else { $perpage='100'; }
        $page = $inCore->request('page', 'int', 1);

        //request items using pagination
        $sql .= " LIMIT ".(($page-1)*$perpage).", $perpage";
        $result = $inDB->query($sql) ;

        //search details, if needed
        $search_details = '';
        if (isset($findsql)){
            if ($advsearch){
                $search_details = '<div class="uc_queryform"><strong>'.$_LANG['SEARCH_RESULT'].' - </strong> '.$_LANG['FOUNDED'].': '.$itemscount.' | <a href="/catalog/'.$cat['id'].'">'.$_LANG['CANCEL_SEARCH'].'</a></div>';
            } else {
                $search_details = '<div class="uc_queryform"><strong>'.$_LANG['SEARCH_BY_TAG'].'</strong> "'.htmlspecialchars(icms_ucfirst(stripslashes($query))).'" ('.$_LANG['MATCHES'].': '.$itemscount.') <a href="/catalog/'.$cat['id'].'">'.$_LANG['CANCEL_SEARCH'].'</a></div>';
            }
        }

        $items = array();
        while($item = $inDB->fetch_assoc($result)){
            $item['ratingdata'] = ratingData($item['id']);
            $item['fdata'] = cmsCore::yamlToArray($item['fieldsdata']);
            $item['price'] = number_format(shopDiscountPrice($item['id'], $item['category_id'], $item['price']), 2, '.', ' ');
            $item['rating'] = cms_model_catalog::buildRating($item['ratingdata']['rating']);
            $item['is_new'] = isNew($item['id'], $cat['shownew'], $cat['newint']);
            $item['tagline'] = tagLine($item['tags'], $cat['id']);

            $item['can_edit'] = ($cat['can_edit'] && $is_cat_access && ($inUser->id == $item['user_id'])) || $inUser->is_admin;

            $item['fields'] = array();

            if (sizeof($fstruct)>0){
                $fields_show = 0;
                foreach($fstruct as $key=>$value){
                    if ($fields_show < $cat['fields_show']){

                        if ($item['fdata'][$key]){

                            if (mb_strstr($value, '/~h~/')){ $value = str_replace('/~h~/', '', $value); $is_html = true; } else { $is_html = false; }
                            if (mb_strstr($value, '/~m~/')){
                                $value = str_replace('/~m~/', '', $value);
                                $makelink = true;
                            } else {$makelink = false; }
                            if (!$is_html){
                                if (mb_strstr($value, '/~l~/')){
                                    if (@$item['fdata'][$key]!=''){
                                        $field = '<a class="uc_fieldlink" href="/load/url=-'.base64_encode($item['fdata'][$key]).'" target="_blank">'.str_replace('/~l~/', '', $value).'</a> ('.$inCore->fileDownloadCount($item['fdata'][$key]).')';
                                    }
                                } else {
                                    if ($makelink){
                                        $field = $model->getUCSearchLink($cat['id'], $item['fdata'][$key]);
                                    } else {
                                        $field = $item['fdata'][$key];
                                    }
                                }
                            } else {
                                $field = $item['fdata'][$key];
                            }

                            if (isset($query)) { if (mb_stristr($field, $query)) { $field .= '<span class="uc_findsame"> &larr; <i>'.$_LANG['MATCHE'].'</i></span>';} }
                            $fields_show++;

                            $item['fields'][stripslashes($value)] = stripslashes($field);

                        }

                    } else { break; }
                }
            }

            $items[] = $item;
        }

        if (!@$pagemode){
            $pagebar = cmsPage::getPagebar($itemscount, $page, $perpage, '/catalog/'.$id.'-%page%');
        } else {

            if ($pagemode=='findfirst'){
                $pagebar = cmsPage::getPagebar($itemscount, $page, $perpage, '/catalog/'.$id.'-%page%/find-first/'.urlencode(urlencode($query)));
            }

            if ($pagemode=='find'){
                $pagebar = cmsPage::getPagebar($itemscount, $page, $perpage, '/catalog/'.$id.'-%page%/find/'.urlencode(urlencode($query)));
            }

        }

        // SEO
        if($cat['NSLevel'] > 0){

            // meta description
            if($cat['meta_desc']){
                $meta_desc = $cat['meta_desc'];
            } elseif(mb_strlen(strip_tags($cat['description']))>=250){
                $meta_desc = crop($cat['description']);
            } else {
                $meta_desc = $cat['title'];
            }
            $inPage->setDescription($meta_desc);
            // meta keywords
            if($cat['meta_keys']){
                $meta_keys = $cat['meta_keys'];
            } elseif($items){
                foreach($items as $c){
                    $k[] = $c['title'];
                }
                $meta_keys = implode(', ', $k);
            } else {
                $meta_keys = $cat['title'];
            }
            $inPage->setKeywords($meta_keys);

        }

        $tpl->assign('cfg', $cfg)->
              assign('page', $page)->
              assign('search_details', $search_details)->
              assign('fstruct', $fstruct)->
              assign('items', $items)->
              assign('pagebar', $pagebar)->
              display('com_catalog_view.tpl');

        return true;

    }

    //////////////////////////// VIEW ITEM DETAILS ///////////////////////////////////////////////////////////////////////
    if ($do == 'item'){

        $id  = $inCore->request('id', 'int');
        $sql = "SELECT * FROM cms_uc_items WHERE id = '$id'";
        $itemres = $inDB->query($sql) ;

        if (!$inDB->num_rows($itemres)){ cmsCore::error404(); }

        $item = $inDB->fetch_assoc($itemres);

        if ((!$item['published'] || $item['on_moderate']) && !$inUser->is_admin){
            cmsCore::error404();
        }

        $fdata = cmsCore::yamlToArray($item['fieldsdata']);

        if ($item['meta_keys']) { $inPage->setKeywords($item['meta_keys']); }
        if ($item['meta_desc']) { $inPage->setDescription($item['meta_desc']); }

        $ratingdata = ratingData($id);

        $sql = "SELECT * FROM cms_uc_cats WHERE id = '{$item['category_id']}'";
        $catres = $inDB->query($sql) ;
        $cat = $inDB->fetch_assoc($catres);
        $fstruct = cmsCore::yamlToArray($cat['fieldsstruct']);

        $is_cat_access = $inUser->id ?
                            $model->checkCategoryAccess($cat['id'], $cat['is_public'], $inUser->group_id) : false;
        $item['can_edit'] = ($cat['can_edit'] && $is_cat_access && ($inUser->id == $item['user_id'])) || $inUser->is_admin;

        //PATHWAY ENTRY
        $path_list  = $model->getCategoryPath($cat['NSLeft'], $cat['NSRight']);

        if ($path_list){
            foreach($path_list as $pcat){
                $inPage->addPathway($pcat['title'], '/catalog/'.$pcat['id']);
            }
        }
        $inPage->addPathway($item['title'], '/catalog/item'.$item['id'].'.html');

        $inPage->setTitle($item['title']);


        if ($cat['view_type']=='shop'){

            $shopCartLink=shopCartLink();

        }

        //update hits
        $inDB->query("UPDATE cms_uc_items SET hits = hits + 1 WHERE id = '$id'") ;

        //print item details
        $fields = array();

        if (sizeof($fstruct)>0){
            foreach($fstruct as $key=>$value){
                if (@$fdata[$key]){
                    if (mb_strstr($value, '/~h~/')){
                        $value = str_replace('/~h~/', '', $value);
                        $htmlfield = true;
                    }
                    if (mb_strstr($value, '/~m~/')){
                        $value = str_replace('/~m~/', '', $value);
                        $makelink = true;
                    } else {$makelink = false; }
                    $field = (string)str_replace('<p>', '<p style="margin-top:0px; margin-bottom:5px">', $fdata[$key]);
                    if (mb_strstr($value, '/~l~/')){
                        $field = '<a class="uc_detaillink" href="/load/url=-'.base64_encode($field).'" target="_blank">'.str_replace('/~l~/', '', $value).'</a> ('.$inCore->fileDownloadCount($field).')';

                    } else {

                        if (isset($htmlfield)) {
                            if ($makelink) {
                                 $field = $model->getUCSearchLink($cat['id'], $field);
                            } else {
                                //PROCESS FILTERS, if neccessary
                                if ($cat['filters']){
                                    $filters = $inCore->getFilters();
                                    if ($filters){
                                        foreach($filters as $id=>$_data){
                                            require_once PATH.'/filters/'.$_data['link'].'/filter.php';
                                            $_data['link']($field);
                                        }
                                    }
                                }
                                $field =  stripslashes($field);
                            }
                        } else {
                            if ($makelink) {
                                 $field =  $model->getUCSearchLink($cat['id'], $field);
                            }
                        }

                    }
                    $fields[stripslashes($value)] = stripslashes($field);
                }
            }
        }
        if ($cat['view_type']=='shop'){
            $item['price'] = number_format(shopDiscountPrice($item['id'], $item['category_id'], $item['price']), 2, '.', ' ');
        }

        $user = $inDB->get_fields('cms_users', "id='{$item['user_id']}'", 'login, nickname');
        $getProfileLink = cmsUser::getProfileLink($user['login'], $user['nickname']);

        if ($cat['is_ratings']){
            $ratingForm = ratingForm($ratingdata, $item['id']);
        }

        cmsPage::initTemplate('components', 'com_catalog_item')->
                assign('shopCartLink', (isset($shopCartLink) ? $shopCartLink : ''))->
                assign('getProfileLink', $getProfileLink)->
                assign('tagline', tagLine($item['tags'], $cat['id']))->
                assign('item', $item)->
                assign('cat', $cat)->
                assign('fields', $fields)->
                assign('ratingForm', (isset($ratingForm) ? $ratingForm : ''))->
                display('com_catalog_item.tpl');

        if ($item['is_comments'] && $inCore->isComponentEnable('comments')) {
            cmsCore::includeComments();
            comments('catalog', $item['id'], array(), ($inUser->id == $item['user_id']));
        }

        return true;
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////// S H O P /////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////// ADD TO CART /////////////////////////////////////////////////////////////////////////////
    if ($do == 'addcart'){
        shopAddToCart($id, 1);
		$inCore->redirect('/catalog/viewcart.html');
    }
    ///////////////////////// VIEW CART /////////////////////////////////////////////////////////////////////////////
    if ($do == 'viewcart'){
        shopCart();
    }
    ///////////////////////// DELETE FROM CART /////////////////////////////////////////////////////////////////////////////
    if ($do == 'cartremove'){
        shopRemoveFromCart($id);
		$inCore->redirectBack();
    }
    ///////////////////////// CLEAR CART /////////////////////////////////////////////////////////////////////////////
    if ($do == 'clearcart'){
        shopClearCart();
        $inCore->redirectBack();
    }
    ///////////////////////// CLEAR CART /////////////////////////////////////////////////////////////////////////////
    if ($do == 'savecart'){
        $itemcounts =  $inCore->request('kolvo', 'array_int');
        if (is_array($itemcounts)){
            shopUpdateCart($itemcounts);
        }
        $inCore->redirectBack();
    }
    ///////////////////////// ORDER //////////////////////////////////////////////////////////////////////////////////
    if ($do == 'order'){
        shopOrder($cfg);
    }
    ///////////////////////// ORDER //////////////////////////////////////////////////////////////////////////////////
    if ($do == 'finish'){
        shopFinishOrder($cfg);
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

    if ($do == 'add_item' || $do == 'edit_item'){

        $cat_id  = cmsCore::request('cat_id', 'int');
        $item_id = cmsCore::request('item_id', 'int', 0);

        if ($do == 'add_item'){

            $cat = $inDB->get_fields('cms_uc_cats', "id='$cat_id'", '*');
            if (!$cat){ cmsCore::error404(); }

            $inPage->setTitle($_LANG['ADD_ITEM']);

            if (!($model->checkCategoryAccess($cat['id'], $cat['is_public'], $inUser->group_id) || $inUser->is_admin)){
                cmsCore::error404();
            }

            $item  = array();
            $fdata = array();

            if ($cat['cost']=='') { $cat['cost'] = false; }
            if (IS_BILLING){
                cmsBilling::checkBalance('catalog', 'add_catalog_item', false, $cat['cost']);
            }

            $item['is_comments'] = 1;

        }

        if ($do == 'edit_item'){

            $inPage->setTitle($_LANG['EDIT_ITEM']);

            $item = $inDB->get_fields('cms_uc_items', "id='$item_id'", '*');
            if (!$item) { cmsCore::error404(); }

            $cat = $inDB->get_fields('cms_uc_cats', "id='{$item['category_id']}'", '*');
            if (!$cat){ cmsCore::error404(); }

            $is_cat_access  = $model->checkCategoryAccess($cat['id'], $cat['is_public'], $inUser->group_id);
            $is_can_edit    = ($cat['can_edit'] && $is_cat_access && ($inUser->id == $item['user_id'])) || $inUser->is_admin;
            if (!$is_can_edit) { cmsCore::error404(); }

            $fdata = cmsCore::yamlToArray($item['fieldsdata']);

        }

        $path_list  = $model->getCategoryPath($cat['NSLeft'], $cat['NSRight']);
        if ($path_list){
            foreach($path_list as $pcat){
                $inPage->addPathway($pcat['title'], '/catalog/'.$pcat['id']);
            }
        }
        if($do == 'add_item'){
            $inPage->addPathway($_LANG['ADD_ITEM']);
        } else {
            $inPage->addPathway($_LANG['EDIT_ITEM']);
        }

		$cats = $inCore->getListItems('cms_uc_cats', $cat['id'], 'id', 'ASC', 'parent_id > 0 AND published = 1');

        $fields = array();

        $fstruct = cmsCore::yamlToArray($cat['fieldsstruct']);

        foreach($fstruct as $f_id=>$value){

            if (mb_strstr($value, '/~h~/')) { $ftype = 'html'; $value=str_replace('/~h~/', '', $value); }
            elseif (mb_strstr($value, '/~l~/')) { $ftype = 'link'; $value=str_replace('/~l~/', '', $value); } else { $ftype='text'; }

            if (mb_strstr($value, '/~m~/')) { $makelink = true; $value=str_replace('/~m~/', '', $value); }
            else { $makelink = false; }

            $next['ftype']    = stripslashes($ftype);
            $next['title']    = stripslashes($value);
            $next['makelink'] = stripslashes($makelink);

            if (!empty($fdata[$f_id])){
                $next['value']  = stripslashes($fdata[$f_id]);
            } else {
                $next['value']  = '';
            }

            $fields[$f_id] = $next;

        }

        cmsPage::initTemplate('components', 'com_catalog_add')->
                assign('do', $do)->
                assign('item', $item)->
                assign('fields', $fields)->
                assign('cat', $cat)->
                assign('cats', $cats)->
                assign('cfg', $cfg)->
                assign('is_admin', $inUser->is_admin)->
                assign('cat_id', $cat['id'])->
                display('com_catalog_add.tpl');

        return;

    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

    if ($do == 'submit_item'){

        $opt     = cmsCore::request('opt', 'str', 'add');
        $new_cat_id = cmsCore::request('new_cat_id', 'int', 0);
        $cat_id = $new_cat_id ? $new_cat_id : cmsCore::request('cat_id', 'int', 0);

        $item_id = cmsCore::request('item_id', 'int', 0);

        $cat = $inDB->get_fields('cms_uc_cats', "id='$cat_id'", '*');
        if(!$cat){ cmsCore::error404(); }

        if ($opt == 'add'){

            if(!$inUser->is_admin &&
                    !$model->checkCategoryAccess($cat['id'], $cat['is_public'], $inUser->group_id)){
                cmsCore::error404();
            }

        } else {

            $item = $inDB->get_fields('cms_uc_items', "id='{$item_id}'", '*');
            if(!$item){ cmsCore::error404(); }

            if(!$inUser->is_admin &&
                    !($cat['can_edit'] && ($inUser->id == $item['user_id']) &&
                        $model->checkCategoryAccess($cat['id'], $cat['is_public'], $inUser->group_id))){
                cmsCore::error404();
            }

        }

        $item['title'] = cmsCore::request('title', 'str');
        if (!$item['title']) { cmsCore::addSessionMessage($_LANG['NEED_TITLE'], 'error'); cmsCore::redirectBack(); }

        $item['category_id']    = $cat_id;
        $item['published']      = ($cfg['premod'] && !$inUser->is_admin ? 0 : 1);
        $item['on_moderate']    = ($cfg['premod'] && !$inUser->is_admin ? 1 : 0);

        $item['fdata']          = cmsCore::request('fdata', 'array', array());;
        foreach($item['fdata'] as $key=>$value) {
			$item['fdata'][$key] = cmsCore::badTagClear($value);
		}
        $item['fieldsdata']     = $inDB->escape_string(cmsCore::arrayToYaml($item['fdata']));

        $item['is_comments']    = $inUser->is_admin ? cmsCore::request('is_comments', 'int', 0) : $cfg['is_comments'];
        $item['tags']           = cmsCore::request('tags', 'str', '');
        $item['canmany']        = 1;
        $item['imageurl']       = ($opt == 'add' ? '' : $item['imageurl']);
        $item['price']          = 0;
        $item['canmany']        = 1;

        if($inUser->is_admin){
            $meta_desc = cmsCore::request('meta_desc', 'str', '');
            $meta_keys = cmsCore::request('meta_keys', 'str', '');
            $item['meta_desc']  = $meta_desc ? $meta_desc : $item['title'];
            $item['meta_keys']  = $meta_keys ? $meta_keys : $item['tags'];
        } else {
            $item['meta_desc']  = @$item['meta_desc'] ? $item['meta_desc'] : $item['title'];
            $item['meta_keys']  = @$item['meta_keys'] ? $item['meta_keys'] : $item['tags'];
        }

		if (cmsCore::inRequest('price')) {
			$price          = cmsCore::request('price', 'str', '');
			$price          = str_replace(',', '.', $price);
            $item['price']  = round($price, 2);
            $item['canmany']= cmsCore::request('canmany', 'int', 0);
		}

        if (cmsCore::request('delete_img', 'int', 0)){

            @unlink(PATH."/images/catalog/".$item['imageurl']);
            @unlink(PATH."/images/catalog/small/".$item['imageurl']);
            @unlink(PATH."/images/catalog/medium/".$item['imageurl']);

            $item['imageurl'] = '';

        }
        $file = $model->uploadPhoto($item['imageurl']);
        if($file){
            $item['imageurl'] = $file['filename'];
        }

        if ($opt=='add'){

            $item['pubdate'] = date('Y-m-d H:i');
            $item['user_id'] = $inUser->id;

            $item['id'] = $model->addItem($item);

            if (IS_BILLING){
                if ($cat['cost']=='') { $cat['cost'] = false; }
                cmsBilling::process('catalog', 'add_catalog_item', $cat['cost']);
            }

            if (!$cfg['premod'] || $inUser->is_admin) {

                cmsCore::callEvent('ADD_CATALOG_DONE', $item);

                //регистрируем событие
                cmsActions::log('add_catalog', array(
                    'object' => $item['title'],
                    'object_url' => '/catalog/item'.$item['id'].'.html',
                    'object_id' => $item['id'],
                    'target' => $cat['title'],
                    'target_url' => '/catalog/'.$cat['id'],
                    'target_id' => $cat['id'],
                    'description' => ''
                ));
            }
		}
        if ($opt=='edit'){
			$model->updateItem($item['id'], $item);
			cmsActions::updateLog('add_catalog', array('object' => $item['title']), $item['id']);
		}

        if ($inUser->id != 1 && $cfg['premod'] && $cfg['premod_msg']){

            $link = '<a href="/catalog/item'.$item['id'].'.html">'.$item['title'].'</a>';
            $user = '******'.cmsUser::getProfileURL($inUser->login).'">'.$inUser->nickname.'</a>';

            if ($opt=='add')  { $message = $_LANG['MSG_ITEM_SUBMIT']; }
            if ($opt=='edit') { $message = $_LANG['MSG_ITEM_EDITED']; }
            $message = str_replace('%user%', $user, $message);
            $message = str_replace('%link%', $link, $message);

            cmsUser::sendMessage(USER_UPDATER, 1, $message);

            cmsCore::addSessionMessage($_LANG['ITEM_PREMOD_NOTICE'], 'info');

            cmsCore::redirect('/catalog/'.$item['category_id']);

        }

        cmsCore::redirect('/catalog/item'.$item['id'].'.html');

    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

    if ($do == 'accept_item'){

        $item_id = cmsCore::request('item_id', 'int');

        $item = $inDB->get_fields('cms_uc_items', "id='{$item_id}'", 'title, user_id, category_id');
        if (!$item || !$inUser->is_admin){ cmsCore::error404(); }

        $inDB->query("UPDATE cms_uc_items SET published=1, on_moderate=0 WHERE id='{$item_id}'");

		$cat = $inDB->get_fields('cms_uc_cats', 'id='.$item['category_id'], 'id, title');

        cmsCore::callEvent('ADD_CATALOG_DONE', $item);

		//регистрируем событие
		cmsActions::log('add_catalog', array(
				'object' => $item['title'],
				'user_id' => $item['user_id'],
				'object_url' => '/catalog/item'.$item_id.'.html',
				'object_id' => $item_id,
				'target' => $cat['title'],
				'target_url' => '/catalog/'.$cat['id'],
				'target_id' => $cat['id'],
				'description' => ''
		));

        $item_link  = '<a href="/catalog/item'.$item_id.'.html">'.$item['title'].'</a>';

        $message = str_replace('%link%', $item_link, $_LANG['MSG_ITEM_ACCEPTED']);

        cmsUser::sendMessage(USER_UPDATER, $item['user_id'], $message);

        cmsCore::redirectBack();

    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

    if ($do == 'delete_item'){

        $item_id = cmsCore::request('item_id', 'int');

        $item = $inDB->get_fields('cms_uc_items', "id='{$item_id}'", '*');
        if(!$item){ cmsCore::error404(); }

        if (!($item['user_id']==$inUser->id || $inUser->is_admin)){ cmsCore::error404(); }

        $model->deleteItem($item_id);

        $message = str_replace('%item%', $item['title'], $_LANG['MSG_ITEM_REJECTED']);
        cmsUser::sendMessage(USER_UPDATER, $item['user_id'], $message);

        cmsCore::redirect('/catalog/'.$item['category_id']);

    }

}