public function getCategoryParents($categories, $categoryID) { $return = ''; if (isset($categories[$categoryID])) { $return .= $categoryID . ','; $return .= Model_Categories::getCategoryParents($categories, $categories[$categoryID]['sub_of']); } return $return; }
public function editItem($id, $data) { $db = JO_Db::getDefaultAdapter(); $info = self::getItem($id); if (!$info) { return; } if (isset($data['free_file'])) { $db->update('items', array('free_file' => 'false')); self::addUserStatus($id, 'freefile'); } $db->update('items', array('name' => $data['name'], 'description' => $data['description'], 'price' => $data['price'], 'free_file' => isset($data['free_file']) ? 'true' : 'false', 'weekly_from' => $data['weekly_from'] ? JO_Date::getInstance($data['weekly_from'], 'yy-mm-dd', true) : '0000-00-00', 'weekly_to' => $data['weekly_to'] ? JO_Date::getInstance($data['weekly_to'], 'yy-mm-dd', true) : '0000-00-00'), array('id = ?' => (int) $id)); if (isset($data['set_status']) && $data['set_status'] == 'active') { $db->update('items', array('status' => $data['set_status']), array('id = ?' => (int) $id)); $db->update(Model_Users::getPrefixDB() . 'users', array('items' => new JO_Db_Expr('items + 1')), array('user_id = ?' => $info['user_id'])); /////////// send email $request = JO_Request::getInstance(); $translate = JO_Translate::getInstance(); $not_template = Model_Notificationtemplates::get('approval_item'); $mail = new JO_Mail(); if (JO_Registry::get('mail_smtp')) { $mail->setSMTPParams(JO_Registry::forceGet('mail_smtp_host'), JO_Registry::forceGet('mail_smtp_port'), JO_Registry::forceGet('mail_smtp_user'), JO_Registry::forceGet('mail_smtp_password')); } $mail->setFrom('no-reply@' . $request->getDomain()); $href = '<a href="' . WM_Router::create($request->getBaseUrl() . '?module=' . $info['module'] . '&controller=items&item_id=' . $id) . '">' . $info['name'] . '</a>'; if ($not_template) { $title = $not_template['title']; $html = html_entity_decode($not_template['template'], ENT_QUOTES, 'utf-8'); $html = str_replace('{USERNAME}', $info['username'], $html); $html = str_replace('{ITEM}', $info['name'], $html); $html = str_replace('{URL}', $href, $html); } else { $title = "[" . $request->getDomain() . "] " . $data['name']; $html = nl2br($translate->translate('Item') . ' ' . $href . ' ' . $translate->translate('approval')); } $mail->setSubject($title); $mail->setHTML($html); $result = $mail->send(array($info['email']), JO_Registry::get('mail_smtp') ? 'smtp' : 'mail'); unset($mail); ////////////////////// } if (isset($data['weekly_to']) && trim($data['weekly_to']) != '') { self::addUserStatus($id, 'featured'); } $db->delete('items_to_category', array('item_id = ?' => (int) $id)); if (isset($data['category_id'])) { foreach ($data['category_id'] as $category_id) { $categories = Model_Categories::getCategoryParents(Model_Categories::getCategories(array('filter_id_key' => true)), $category_id); $categories = explode(',', $categories); array_pop($categories); $categories = array_reverse($categories); $categories = ',' . implode(',', $categories) . ','; $db->insert('items_to_category', array('item_id' => (int) $id, 'categories' => $categories)); } } $db->delete('items_attributes', array('item_id = ?' => (int) $id)); if (isset($data['attributes']) && is_array($data['attributes'])) { foreach ($data['attributes'] as $cid => $value) { if (is_array($value)) { foreach ($value as $val) { $db->insert('items_attributes', array('item_id' => $id, 'attribute_id' => $val, 'category_id' => (int) $cid)); } } elseif ($value) { $db->insert('items_attributes', array('item_id' => $id, 'attribute_id' => $value, 'category_id' => (int) $cid)); } } } $db->delete('items_tags', array('item_id = ?' => (int) $id)); if (isset($data['tags']) && $data['tags']) { $tags = explode(',', $data['tags']); foreach ($tags as $tag) { $tag = trim($tag); if ($tag) { $tag_id = Model_Tags::getTagByTitleAndInsert($tag); if ($tag_id) { $db->insert('items_tags', array('item_id' => $id, 'tag_id' => (int) $tag_id, 'type' => '')); } } } } }
public function indexAction() { $request = $this->getRequest(); JO_Session::set('redirect', $request->getBaseUrl() . $request->getUri()); $category_id = $request->getParam('category_id'); if (!$category_id) { return $this->forward('error', 'error404'); } $page = (int) $request->getRequest('page', 1); if ($page < 1) { $page = 1; } $limit = JO_Registry::get('front_limit'); $order = $request->getRequest('order'); if (is_null($order)) { $order = 'desc'; } $sort = $request->getRequest('sort'); if (is_null($sort)) { $sort = 'datetime'; } if ($sort == 'username') { $prefix = 'users.'; } else { $prefix = 'items.'; } if (is_numeric($category_id)) { $this->view->category = Model_Categories::get($category_id); $this->getLayout()->meta_title = $this->view->category['name']; $this->getLayout()->meta_description = $this->view->category['name']; if ($this->view->category['sub_of'] == 0) { $categories = Model_Categories::getMain(); } else { $categories = Model_Categories::getCategories($this->view->category['sub_of']); $crumbs_categories = Model_Categories::get_all(); if ($crumbs_categories) { $parents = Model_Categories::getCategoryParents($crumbs_categories, $category_id); $parents = explode(',', $parents); $parents = array_reverse($parents); $cnt = count($parents) - 1; $crumbs = array(); for ($i = 1; $i < $cnt; $i++) { $crumbs[$i] = array('name' => $crumbs_categories[$parents[$i]]['name'], 'href' => WM_Router::create($request->getBaseUrl() . '?controller=categories&category_id=' . $parents[$i] . '&name=' . WM_Router::clearName($crumbs_categories[$parents[$i]]['name']))); } } } /* SORT */ $link = $request->getBaseUrl() . '?&controller=categories&category_id=' . $category_id; $total_records = Model_Items::CountItems($category_id); $start = $page * $limit - $limit; if ($start > $total_records) { $page = max(ceil($total_records / $limit), 1); $start = $page * $limit - $limit; } elseif ($start < 0) { $start = 0; } $items = Model_Items::getAll($category_id, $start, $limit, ($sort == 'price' ? 'rprice' : $prefix . $sort) . ' ' . $order); } else { if (in_array($category_id, array('recent', 'featured', 'popular'))) { switch ($category_id) { case 'featured': $where = 'items.weekly_to >= \'' . date('Y-m-d') . '\''; $this->view->category['name'] = $this->view->translate('Featured Items'); $total_records = Model_Items::countWeekly(); break; default: $this->view->category['name'] = $this->view->translate('Recent Items'); $total_records = Model_Items::countItems(); } $this->getLayout()->meta_title = $this->view->category['name']; $this->getLayout()->meta_description = $this->view->category['name']; /* SORT */ $link = $request->getBaseUrl() . '?controller=categories&action=' . $category_id; $start = $page * $limit - $limit; if ($start > $total_records) { $last_page = max(ceil($total_records / $limit), 1); $start = $last_page * $limit - $limit; } elseif ($start < 0) { $start = 0; } $items = Model_Items::getAll($category_id, $start, $limit, ($sort == 'price' ? 'rprice' : $prefix . $sort) . ' ' . $order, !empty($where) ? $where : ''); $categories = Model_Categories::getMain(); } } $this->view->sort_by = array(array('name' => $this->view->translate('date'), 'href' => WM_Router::create($link . '&sort=datetime'), 'is_selected' => $sort == 'datetime' ? true : false), array('name' => $this->view->translate('title'), 'href' => WM_Router::create($link . '&sort=name'), 'is_selected' => $sort == 'name' ? true : false), array('name' => $this->view->translate('rating'), 'href' => WM_Router::create($link . '&sort=rating'), 'is_selected' => $sort == 'rating' ? true : false), array('name' => $this->view->translate('sales'), 'href' => WM_Router::create($link . '&sort=sales'), 'is_selected' => $sort == 'sales' ? true : false), array('name' => $this->view->translate('price'), 'href' => WM_Router::create($link . '&sort=price'), 'is_selected' => $sort == 'price' ? true : false), array('name' => $this->view->translate('author name'), 'href' => WM_Router::create($link . '&sort=username'), 'is_selected' => $sort == 'username' ? true : false)); /* ORDER */ $link .= '&sort=' . $sort; $this->view->orders = array(array('name' => '»', 'href' => WM_Router::create($link . '&order=desc'), 'is_selected' => $order == 'desc' ? true : false), array('name' => '«', 'href' => WM_Router::create($link . '&order=asc'), 'is_selected' => $order == 'asc' ? true : false)); /* CRUMBS */ $this->view->crumbs = array(); $this->view->crumbs[] = array('name' => $this->view->translate('Home'), 'href' => $request->getBaseUrl()); if (isset($crumbs)) { $this->view->crumbs += $crumbs; } /* CATEGORIES */ if ($categories) { $this->view->all_categories_name = $this->translate('All Categories'); $this->view->categories = array(); foreach ($categories as $k => $v) { $this->view->categories[$k] = array('name' => $v['name'], 'href' => WM_Router::create($request->getBaseUrl() . '?controller=categories&category_id=' . $v['id'] . '&name=' . WM_Router::clearName($v['name']))); } } /* PAGENATION */ $link .= '&order=' . $order; $pagination = new Model_Pagination(); $pagination->setLimit($limit); $pagination->setPage($page); $pagination->setText(array('text_prev' => $this->view->translate('Prev'), 'text_next' => $this->view->translate('Next'))); $pagination->setTotal($total_records); $pagination->setUrl(WM_Router::create($link . '&page={page}')); $this->view->pagination = $pagination->render(); if (!empty($this->view->pagination)) { $this->view->pagination = str_replace('{of}', $this->view->translate('OF'), $this->view->pagination); } /* ITEMS */ if ($items) { $this->view->items = array(); foreach ($items as $n => $item) { if (!empty($item['demo_url'])) { $item['demo_url'] = WM_Router::create($request->getBaseUrl() . '?module=' . $item['module'] . '&controller=items&action=preview&item_id=' . $item['id'] . '&name=' . WM_Router::clearName($item['name'])); } $this->view->items[] = Helper_Items::returnViewIndex($item, 'category'); } } $this->view->children = array(); $this->view->children['header_part'] = 'layout/header_part'; $this->view->children['footer_part'] = 'layout/footer_part'; }
public function editItem($id, $data) { set_time_limit(0); $db = JO_Db::getDefaultAdapter(); $info = self::getItem($id); if (!$info) { return; } if (isset($data['free_file'])) { $db->update('items', array('free_file' => 'false')); self::addUserStatus($id, 'freefile'); } $db->update('items', array('name' => $data['name'], 'description' => $data['description'], 'price' => $data['price'][$data['default_price']], 'free_file' => isset($data['free_file']) ? 'true' : 'false', 'item_tags_string' => isset($data['tags']) ? $data['tags'] : '', 'weekly_from' => $data['weekly_from'] ? JO_Date::getInstance($data['weekly_from'], 'yy-mm-dd', true) : '0000-00-00', 'weekly_to' => $data['weekly_to'] ? JO_Date::getInstance($data['weekly_to'], 'yy-mm-dd', true) : '0000-00-00'), array('id = ?' => (int) $id)); if (isset($data['set_status']) && $data['set_status'] == 'active') { $db->update('items', array('status' => $data['set_status']), array('id = ?' => (int) $id)); /////////// send email $request = JO_Request::getInstance(); $translate = JO_Translate::getInstance(); $not_template = Model_Notificationtemplates::get('approval_item'); $mail = new JO_Mail(); if (JO_Registry::get('mail_smtp')) { $mail->setSMTPParams(JO_Registry::forceGet('mail_smtp_host'), JO_Registry::forceGet('mail_smtp_port'), JO_Registry::forceGet('mail_smtp_user'), JO_Registry::forceGet('mail_smtp_password')); } $mail->setFrom('no-reply@' . $request->getDomain()); $href = '<a href="' . WM_Router::create($request->getBaseUrl() . '?controller=items&item_id=' . $id) . '">' . $info['name'] . '</a>'; if ($not_template) { $title = $not_template['title']; $html = html_entity_decode($not_template['template'], ENT_QUOTES, 'utf-8'); $html = str_replace('{USERNAME}', $info['username'], $html); $html = str_replace('{ITEM}', $info['name'], $html); $html = str_replace('{URL}', $href, $html); } else { $title = "[" . $request->getDomain() . "] " . $data['name']; $html = nl2br($translate->translate('Item') . ' ' . $href . ' ' . $translate->translate('approval')); } $mail->setSubject($title); $mail->setHTML($html); $result = $mail->send(array($info['email']), JO_Registry::get('mail_smtp') ? 'smtp' : 'mail'); unset($mail); ////////////////////// } if (isset($data['weekly_to']) && trim($data['weekly_to']) != '') { self::addUserStatus($id, 'featured'); } $db->delete('items_to_category', array('item_id = ?' => (int) $id)); if (isset($data['category_id'])) { foreach ($data['category_id'] as $category_id) { $categories = Model_Categories::getCategoryParents(Model_Categories::getCategories(array('filter_id_key' => true)), $category_id); $categories = explode(',', $categories); array_pop($categories); $categories = array_reverse($categories); $categories = ',' . implode(',', $categories) . ','; $db->insert('items_to_category', array('item_id' => (int) $id, 'categories' => $categories)); } } $db->delete('items_attributes', array('item_id = ?' => (int) $id)); if (isset($data['attributes']) && is_array($data['attributes'])) { foreach ($data['attributes'] as $cid => $value) { if (is_array($value)) { foreach ($value as $val) { $db->insert('items_attributes', array('item_id' => $id, 'attribute_id' => $val, 'category_id' => (int) $cid)); } } elseif ($value) { $db->insert('items_attributes', array('item_id' => $id, 'attribute_id' => $value, 'category_id' => (int) $cid)); } } } $db->delete('items_tags', array('item_id = ?' => (int) $id)); if (isset($data['tags']) && $data['tags']) { $tags = explode(',', $data['tags']); foreach ($tags as $tag) { $tag = trim($tag); if ($tag) { $tag_id = Model_Tags::getTagByTitleAndInsert($tag); if ($tag_id) { $db->insert('items_tags', array('item_id' => $id, 'tag_id' => (int) $tag_id, 'type' => '')); } } } } $sizes = Model_Sizes::getAll(); $tmp_sizes = array(); foreach ($sizes as $size1) { $tmp_sizes[$size1['id']] = $size1; } $info_file = getimagesize(BASE_PATH . '/uploads/' . $info['main_file']); $steps = 0; if ($info_file[0] < $info_file[1]) { $type = 'p'; $steps = $info_file[0]; $source_aspect_ratio = round($info_file[1] / $info_file[0], 5); } elseif ($info_file[0] > $info_file[1]) { $type = 'l'; $steps = $info_file[1]; $source_aspect_ratio = round($info_file[0] / $info_file[1], 5); } else { $type = 'k'; $steps = $info_file[0]; $source_aspect_ratio = 1; } $temp_sizes = array(); $temp_sizes2 = array(); $deleted = array(); foreach ($data['price'] as $size_id => $price) { if (trim($price) && (double) $price && isset($tmp_sizes[$size_id])) { $sizeMP = $tmp_sizes[$size_id]['size'] * 1000000; $sizeMPFrom = $sizeMP - $sizeMP / 100; for ($i = $steps; $i >= 1; $i--) { if ($type == 'p') { $width = $info_file[0] - $i; $height = round($width * $source_aspect_ratio); } elseif ($type == 'l') { $height = $info_file[1] - $i; $width = round($height * $source_aspect_ratio); } else { $width = $info_file[0] - $i; $height = $info_file[1] - $i; } if ($width < 1 || $height < 1) { continue; } if ($width * $height >= $sizeMPFrom && $width * $height <= $sizeMP) { $temp_sizes[$size_id] = array('width' => $width, 'height' => $height, 'price' => $price, 'size_id' => $size_id, 'size' => $tmp_sizes[$size_id]['size']); $temp_sizes2[$size_id] = true; continue; } } } else { $deleted[] = $size_id; } } $query_files = $db->select()->from('items_prices')->where('item_id = ?', (int) $id); $list_files = $db->fetchAll($query_files); if ($list_files) { foreach ($list_files as $fils) { if (in_array($fils['size_id'], $deleted)) { if (!self::fileIsOrdered($id, $fils['size_id'])) { unlink(BASE_PATH . '/uploads/' . $fils['main_file']); $db->delete('items_prices', array('id = ?' => (int) $fils['id'])); } else { $db->delete('items_prices', array('id = ?' => (int) $fils['id'])); } } elseif (!in_array($fils['size_id'], $temp_sizes2)) { if (!self::fileIsOrdered($id, $fils['size_id'])) { unlink(BASE_PATH . '/uploads/' . $fils['main_file']); $db->delete('items_prices', array('id = ?' => (int) $fils['id'])); } else { $db->delete('items_prices', array('id = ?' => (int) $fils['id'])); } } else { if (file_exists(BASE_PATH . '/uploads/' . $fils['main_file'])) { $db->update('items_prices', array('price' => (double) $temp_sizes[$fils['size_id']]['price']), array('id = ?' => (int) $fils['id'])); unset($temp_sizes[$fils['size_id']]); } else { $db->delete('items_prices', array('id = ?' => (int) $fils['id'])); } } } } $main_file = BASE_PATH . '/uploads/' . $info['main_file']; $main_path = dirname($info['main_file']); foreach ($temp_sizes as $key => $value) { $name_new = md5(time() . '_' . mt_rand()) . '.' . round($key, 2) . strtolower(strrchr(basename($info['main_file']), '.')); $ext = strtolower(strrchr($info['main_file'], '.')); $image_p = imagecreatetruecolor($value['width'], $value['height']); $image = null; if ($ext == '.jpg' || $ext == '.jpeg') { $image = imagecreatefromjpeg(BASE_PATH . '/uploads/' . $info['main_file']); } else { continue; } imageantialias($image_p, true); if ($image) { imagecopyresampled($image_p, $image, 0, 0, 0, 0, $value['width'], $value['height'], $info_file[0], $info_file[1]); } if (!file_exists(dirname($main_file) . '/downloads/')) { mkdir(dirname($main_file) . '/downloads/', 0777, true); } imagejpeg($image_p, dirname($main_file) . '/downloads/' . $name_new, 100); if (file_exists(dirname($main_file) . '/downloads/' . $name_new)) { $db->insert('items_prices', array('item_id' => (int) $id, 'size_id' => (int) $value['size_id'], 'price' => (double) $value['price'], 'main_file' => $main_path . '/downloads/' . $name_new, 'size' => $key, 'width' => $value['width'], 'height' => $value['height'])); } } }