-
Notifications
You must be signed in to change notification settings - Fork 2
/
commerce_marketplace.module
160 lines (145 loc) · 4.95 KB
/
commerce_marketplace.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php
/**
* @file
* Implements general reporting functions for commerce_marketplace.
* @todo Implement commerce_marketplace_paypal
* @todo Fork commerce_ups and make it work with commerce_marketplace
* @todo Implement hook_node_access for products in commerce_store_access module.
* Allow store members with sufficient permissions to edit products created by other members.
* @todo Fork commerce_funds and make it work with commerce_marketplace? (commerce_marketplace_funds)
* @todo Test the module.
* @todo Write Documentation and comment the code.
*
* Add Per-Store confirmation links to each marketplace order, allow buyers to
* confirm receiving the product(s) before their payment is released to the seller.
*/
/**
* Implements hook_permission().
*/
function commerce_marketplace_permission() {
return array(
'view own stores' => array(
'title' => 'View own stores',
),
);
}
/**
* Implements hook_menu().
*/
function commerce_marketplace_menu() {
$items['commerce_store/store/%commerce_store/sales'] = array(
'title' => 'Sales',
'page callback' => 'commerce_marketplace_sales',
'page arguments' => array(2),
'access callback' => 'commerce_store_access_user_access',
'access arguments' => array('view store orders', 2),
'type' => MENU_LOCAL_TASK,
'weight' => 5,
);
$items['commerce_store/store/%commerce_store/sales/%commerce_order'] = array(
'title callback' => 'commerce_marketplace_order_title',
'title arguments' => array(4),
'page callback' => 'commerce_marketplace_view_order',
'page arguments' => array(4),
'access callback' => 'commerce_marketplace_order_access',
'access arguments' => array(2, 4, 'view store orders'),
);
$items['commerce_store/store/%commerce_store/sales/%commerce_order/edit'] = array(
'title callback' => 'commerce_marketplace_order_title',
'title arguments' => array(4),
'page callback' => 'drupal_get_form',
'page arguments' => array('commerce_order_order_form', 4),
'access callback' => 'commerce_marketplace_order_access',
'access arguments' => array(2, 4, 'edit store orders'),
'file' => '/includes/commerce_order.forms.inc',
'file path' => drupal_get_path('module', 'commerce_order'),
);
$items['commerce_store/store/%commerce_store/products'] = array(
'title callback' => 'commerce_marketplace_store_products_page_title',
'title arguments' => array(2),
'page callback' => 'commerce_marketplace_store_products',
'page arguments' => array(2),
'access callback' => 'commerce_store_access_user_access',
'access arguments' => array('view store page', 2),
'type' => MENU_LOCAL_TASK,
'weight' => 4,
);
$items['user/%user/stores'] = array(
'title' => 'Stores',
'page callback' => 'commerce_marketplace_user_stores',
'page arguments' => array(1),
'access callback' => 'commerce_marketplace_user_stores_access',
'access arguments' => array(1),
'type' => MENU_LOCAL_TASK,
);
return $items;
}
/**
* Title callback for order view page.
*/
function commerce_marketplace_order_title($order) {
return t('Order @id', array('@id' => $order->order_id));
}
/**
* Title callback for store products page.
*/
function commerce_marketplace_store_products_page_title($store) {
return t("@store's products", array('@store' => $store->title));
}
/**
* Access callback for viewing the store orders.
*/
function commerce_marketplace_order_access($store, $order, $permission) {
$cmp_store = field_get_items('commerce_order', $order, 'cmp_o_store');
if (!$cmp_store) {
return FALSE;
}
return $cmp_store[0]['target_id'] == $store->id && commerce_store_access_user_access($permission, $store);
}
/**
* Access callback for viewing list of own stores.
*/
function commerce_marketplace_user_stores_access($account) {
global $user;
return user_access('view own stores', $account) && $account-> uid === $user->uid;
}
/**
* Page callback for showing own stores list.
*/
function commerce_marketplace_user_stores($user) {
return commerce_embed_view('my_stores', 'default', array($user->uid));
}
/**
* Page callback for showing store products list.
*/
function commerce_marketplace_store_products($store) {
return commerce_embed_view('store_products', 'default', array($store->id));
}
/**
* Page callback for showing store's orders.
*/
function commerce_marketplace_sales($store) {
return commerce_embed_view('store_sales', 'default', array($store->id));
}
/**
* Page callback for viewing one of the store orders.
*/
function commerce_marketplace_view_order($order) {
return commerce_embed_view('store_order_view', 'default', array($order->order_id));
}
/**
* Implements hook_views_api().
*/
function commerce_marketplace_views_api() {
return array(
'api' => 3,
);
}
/**
* Implements hook_views_query_alter().
*/
function commerce_marketplace_views_query_alter(&$view, &$query) {
if ($view->name == 'my_stores' && $view->current_display == 'default') {
$query->where[0]['type'] = 'OR';
}
}