PluginProbe ʕ •ᴥ•ʔ
FAPI Member / 2.2.24
FAPI Member v2.2.24
2.2.33 2.2.32 trunk 1.9.47 2.1.18 2.2.24 2.2.25 2.2.26 2.2.28 2.2.29 2.2.30 2.2.31
fapi-member / src / Utils / ShortcodeSubstitutor.php
fapi-member / src / Utils Last commit date
AlertProvider.php 11 months ago ApiClient.php 11 months ago DateTimeHelper.php 11 months ago DateTimes.php 11 months ago DateTimesImmutable.php 11 months ago Debugger.php 11 months ago DisplayHelper.php 11 months ago EmailHelper.php 11 months ago PostTypeHelper.php 11 months ago Random.php 11 months ago SecurityValidator.php 11 months ago ShortcodeSubstitutor.php 11 months ago TemplateProvider.php 11 months ago functions.php 11 months ago
ShortcodeSubstitutor.php
235 lines
1 <?php
2
3 namespace FapiMember\Utils;
4
5 use FapiMember\Container\Container;
6 use FapiMember\Model\Enums\Keys\MetaKey;
7 use FapiMember\Model\Enums\Keys\SettingsKey;
8 use FapiMember\Model\User;
9 use FapiMember\Repository\LevelRepository;
10 use FapiMember\Repository\MembershipRepository;
11 use FapiMember\Repository\SettingsRepository;
12 use FapiMember\Repository\UserRepository;
13
14 class ShortcodeSubstitutor
15 {
16 private SettingsRepository $settingsRepository;
17 private MembershipRepository $membershipRepository;
18 private LevelRepository $levelRepository;
19 private UserRepository $userRepository;
20
21 public function __construct()
22 {
23 $this->settingsRepository = Container::get(SettingsRepository::class);
24 $this->membershipRepository = Container::get(MembershipRepository::class);
25 $this->levelRepository = Container::get(LevelRepository::class);
26 $this->userRepository = Container::get(UserRepository::class);
27 }
28
29 public function shortcodeLoginForm(): string
30 {
31 return '
32 <div class="fapiShortcodeLoginForm">
33 <form method="post" action="' . wp_login_url() . '">
34 <div class="f-m-row">
35 <label for="log">' . __('Přihlašovací jméno', 'fapi-member') . '</label>
36 <input type="text" name="log" id="user_login" value="" size="20">
37 </div>
38 <div class="f-m-row">
39 <label for="pwd">' . __( 'Heslo', 'fapi-member' ) . '</label>
40 <input type="password" name="pwd" id="user_pass" value="" size="20">
41 </div>
42 <div class="f-m-row">
43 <a href="' . wp_lostpassword_url() . '">' . __( 'Zapomněli jste heslo?', 'fapi-member' ) . '</a>
44 </div>
45 <div class="f-m-row controls">
46 <input type="submit" class="primary" value="' . __( 'Přihlásit se', 'fapi-member' ) . '">
47 </div>
48 </form>
49 </div>
50 ';
51 }
52
53 public function shortcodeUser(): string
54 {
55 $u = $this->userRepository->getCurrentUser();
56
57 if ($u instanceof User) {
58 return '
59 <div class="fapiShortcodeUser">
60 <span class="i">
61 <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
62 viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
63 <g>
64 <g>
65 <path d="M437.02,330.98c-27.883-27.882-61.071-48.523-97.281-61.018C378.521,243.251,404,198.548,404,148
66 C404,66.393,337.607,0,256,0S108,66.393,108,148c0,50.548,25.479,95.251,64.262,121.962
67 c-36.21,12.495-69.398,33.136-97.281,61.018C26.629,379.333,0,443.62,0,512h40c0-119.103,96.897-216,216-216s216,96.897,216,216
68 h40C512,443.62,485.371,379.333,437.02,330.98z M256,256c-59.551,0-108-48.448-108-108S196.449,40,256,40
69 c59.551,0,108,48.448,108,108S315.551,256,256,256z"/>
70 </g>
71 </g>
72 </svg>
73 </span>
74 <span class="h">' . __( 'Uživatel', 'fapi-member' ) . '</span>
75 <div>
76 <span class="l">' . $u->getLogin() . '</span><span class="dots">...</span>
77 </div>
78 <div class="f-m-submenu">
79 <a href="' . wp_logout_url( get_permalink() ) . '">' . __( 'Odhlásit se', 'fapi-member' ) . '</a>
80 </div>
81 </div>
82 ';
83 }
84
85 $setLoginPageId = $this->settingsRepository->getSetting(SettingsKey::LOGIN_PAGE);
86
87 if ($setLoginPageId === null) {
88 $url = wp_login_url();
89 } else {
90 $url = get_permalink($setLoginPageId);
91 }
92
93 return '
94 <div class="fapiShortcodeUser notLogged">
95 <span class="i">
96 <svg id="bold" enable-background="new 0 0 24 24" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m18.75 9h-.75v-3c0-3.309-2.691-6-6-6s-6 2.691-6 6v3h-.75c-1.24 0-2.25 1.009-2.25 2.25v10.5c0 1.241 1.01 2.25 2.25 2.25h13.5c1.24 0 2.25-1.009 2.25-2.25v-10.5c0-1.241-1.01-2.25-2.25-2.25zm-10.75-3c0-2.206 1.794-4 4-4s4 1.794 4 4v3h-8zm5 10.722v2.278c0 .552-.447 1-1 1s-1-.448-1-1v-2.278c-.595-.347-1-.985-1-1.722 0-1.103.897-2 2-2s2 .897 2 2c0 .737-.405 1.375-1 1.722z"/></svg>
97 </span>
98 <span class="l"><a href="' . $url . '">' . __( 'Přihlásit se', 'fapi-member' ) . '</a></span>
99 </div>
100 ';
101 }
102
103 public function shortcodeSectionExpirationDate(array $attrs): string
104 {
105 if ( ! isset( $attrs['section'] ) ) {
106 return __( 'neznámá sekce nebo úrověň', 'fapi-member' );
107 }
108
109 $user = wp_get_current_user();
110
111 if ( $user === null ) {
112 return __( 'uživatel není přihlášen', 'fapi-member' );
113 }
114
115 $sectionOrLevelId = (int) $attrs['section'];
116
117 $dateFormat = get_option( 'date_format' );
118
119 if ( $dateFormat === null ) {
120 $dateFormat = 'Y-m-d';
121 }
122
123 $memberships = $this->membershipRepository->getActiveByUserId($user->ID);
124 $currentMemberShip = null;
125
126 foreach ($memberships as $membership) {
127 if ( $membership->getLevelId() === $sectionOrLevelId) {
128 $currentMemberShip = $membership;
129
130 break;
131 }
132 }
133
134 if ( $currentMemberShip === null ) {
135 return __( 'bez přístupu', 'fapi-member' );
136
137 }
138
139 if ( $currentMemberShip->getUntil() === null ) {
140 return __( 'neomezeně', 'fapi-member' );
141 }
142
143 return $currentMemberShip->getUntil()->format($dateFormat);
144 }
145
146 public function shortcodeLevelUnlockDate(array $attrs): string
147 {
148 if (!isset( $attrs['level'] ) ) {
149 return __( 'neznámá úrověň', 'fapi-member' );
150 }
151
152 $user = wp_get_current_user();
153
154 if ( $user === null ) {
155 return __( 'uživatel není přihlášen', 'fapi-member' );
156 }
157
158 $sectionOrLevelId = (int) $attrs['level'];
159
160 $dateFormat = get_option('date_format');
161
162 if ( $dateFormat === null ) {
163 $dateFormat = 'Y-m-d';
164 }
165
166 $memberships = $this->membershipRepository->getActiveByUserId($user->ID);
167 $currentMemberShip = null;
168 $parentMembership = null;
169
170 foreach ($memberships as $membership) {
171 if ($membership->getLevelId() === $sectionOrLevelId) {
172 $currentMemberShip = $membership;
173 break;
174 }
175 }
176
177 if (
178 $currentMemberShip === null &&
179 (bool) get_term_meta($sectionOrLevelId, MetaKey::TIME_UNLOCK, true) === false
180 ) {
181 return __( 'bez přístupu', 'fapi-member' );
182 }
183
184 $level = $this->levelRepository->getLevelById($sectionOrLevelId);
185
186 foreach ($memberships as $membership) {
187 if ($membership->getLevelId() === $level->getParentId()) {
188 $parentMembership = $membership;
189 break;
190 }
191 }
192
193 if (
194 $parentMembership === null
195 ) {
196 return __( 'bez přístupu', 'fapi-member' );
197 }
198
199 if ($currentMemberShip === null && $parentMembership->getRegistered() !== null) {
200 $daysToUnlock = get_term_meta($sectionOrLevelId, MetaKey::DAYS_TO_UNLOCK, true);
201
202 $unlockDate = date(
203 'd.m.Y',
204 strtotime($parentMembership->getRegistered()->format($dateFormat))
205 + (86400 * (int) $daysToUnlock),
206 );
207
208 return __( 'Bude odemčeno', 'fapi-member' ) . " " . $unlockDate;
209 }
210
211 if ($currentMemberShip->getUntil() === null) {
212 return __( 'Neomezeně', 'fapi-member' );
213 }
214
215 return $currentMemberShip->getUntil()->format($dateFormat);
216 }
217
218 public function shortcodeUnlockLevel(array $attrs): string
219 {
220 if (!isset($attrs['level']) || $attrs['level'] === '') {
221 return __('neznámá sekce nebo úrověň', 'fapi-member');
222 }
223
224 $levelId = (int) $attrs['level'];
225 $page = isset($attrs['page'])
226 ? '&page_id=' . (int) $attrs['page']
227 : '';
228
229 return '<a href="?rest_route=/fapi/v2/memberships&action=unlockLevelForLoggedInUser&level_id='
230 . $levelId . '&user_id=' . $this->userRepository->getCurrentUser()->getId() . $page .
231 '" class="button-level-unlock-link">Odemknout úroveň</a>';
232 }
233
234 }
235