4
4
5
5
use SilverStripe \Control \Controller ;
6
6
use SilverStripe \Core \Extension ;
7
+ use SilverStripe \Security \Member ;
7
8
use SilverStripe \Security \Security ;
8
9
9
10
/**
@@ -24,17 +25,29 @@ class ShareDraftContentControllerExtension extends Extension
24
25
public function MakeShareDraftLink ()
25
26
{
26
27
if ($ member = Security::getCurrentUser ()) {
27
- if ($ this ->owner ->hasMethod ('CurrentPage ' ) && $ this -> owner -> CurrentPage ()-> canView ( $ member )) {
28
- return $ this ->owner -> CurrentPage ()-> ShareTokenLink ( );
29
- }
30
- if ( $ this -> owner -> hasMethod ( ' canView ' ) && $ this -> owner -> canView ( $ member )) {
31
- return $ this ->owner ->ShareTokenLink ( );
28
+ if ($ this ->owner ->hasMethod ('currentRecord ' )) {
29
+ $ link = $ this ->getShareTokenLink ( $ this -> owner -> currentRecord (), $ member );
30
+ } elseif ( $ this -> owner -> hasMethod ( ' CurrentPage ' )) {
31
+ // Could be a non-LeftAndMain controller, since the extension is applied directly to Controller
32
+ $ link = $ this ->getShareTokenLink ( $ this -> owner ->CurrentPage (), $ member );
32
33
}
34
+ $ link ??= $ this ->getShareTokenLink ($ this ->owner , $ member );
35
+ }
36
+ if ($ link ) {
37
+ return $ link ;
33
38
}
34
39
35
40
return Security::permissionFailure ();
36
41
}
37
42
43
+ private function getShareTokenLink (object $ record , Member $ member ): ?string
44
+ {
45
+ if ($ record ->hasMethod ('canView ' ) && $ record ->canView ($ member )) {
46
+ return $ record ->ShareTokenLink ();
47
+ }
48
+ return null ;
49
+ }
50
+
38
51
/**
39
52
* @return string
40
53
*/
0 commit comments