InactiveSubscriber.php
2.67 KB
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
<?php
namespace ACA\WC\Column\UserSubscription;
use AC;
use ACA\WC\Export;
use ACA\WC\Search;
use ACP\Export\Exportable;
use ACP\Export\Model\StrippedValue;
use ACP\Search\Searchable;
use DateTime;
use WC_Subscription;
class InactiveSubscriber extends AC\Column
implements Searchable, Exportable {
public function __construct() {
$this->set_type( 'column-user_subscription_inactive' )
->set_label( 'Inactive subscriber' )
->set_group( 'woocommerce' );
}
public function get_value( $id ) {
$values = [];
foreach ( $this->get_raw_value( $id ) as $subscription ) {
$status = $subscription->get_status();
$values[] = sprintf(
'<div class="subscription subscription-%s" %s>%s <small>%s</small></div>'
, esc_attr( $status )
, ac_helper()->html->get_tooltip_attr( $this->get_order_tooltip( $subscription ) )
, ac_helper()->html->link( get_edit_post_link( $subscription->get_id() ), wcs_get_subscription_status_name( $subscription->get_status() ) )
, esc_attr( $this->get_subscription_description( $subscription ) )
);
}
return implode( $values ) ?: $this->get_empty_char();
}
private function format_date( DateTime $date ): string {
return ac_format_date( wc_date_format(), $date->getTimestamp() );
}
private function get_subscription_description( WC_Subscription $subscription ): ?string {
$date = $this->get_inactive_subscription_date( $subscription );
return $date
? sprintf( __( 'since %s', 'codepress-admin-columns' ), $this->format_date( $date ) )
: null;
}
private function get_inactive_subscription_date( WC_Subscription $subscription ): ?DateTime {
switch ( $subscription->get_status() ) {
case 'active':
case 'switched':
case 'pending-cancel':
return null;
case 'on-hold' :
case 'refunded' :
case 'cancelled' :
case 'expired':
$date = DateTime::createFromFormat(
'Y-m-d H:i:s',
(string) $subscription->get_date( 'date_created' )
);
return $date ?: null;
default :
return null;
}
}
private function get_order_tooltip( WC_Subscription $subscription ): string {
$date = $this->get_inactive_subscription_date( $subscription );
$status = wcs_get_subscription_status_name( $subscription->get_status() );
return $date
? sprintf( __( '%s since %s', 'codepress-admin-columns' ), $status, $date->format( 'Y-m-d H:i:s' ) )
: $status;
}
public function get_raw_value( $user_id ) {
if ( wcs_user_has_subscription( $user_id, '', 'active' ) ) {
return [];
}
return wcs_get_users_subscriptions( $user_id );
}
public function search() {
return new Search\UserSubscription\InactiveSubscriber();
}
public function export() {
return new StrippedValue( $this );
}
}