PluginProbe ʕ •ᴥ•ʔ
FAPI Member / 2.2.25
FAPI Member v2.2.25
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 9 months ago ApiClient.php 9 months ago DateTimeHelper.php 9 months ago DateTimes.php 9 months ago DateTimesImmutable.php 9 months ago Debugger.php 9 months ago DisplayHelper.php 9 months ago EmailHelper.php 9 months ago PostTypeHelper.php 9 months ago Random.php 9 months ago SecurityValidator.php 9 months ago ShortcodeSubstitutor.php 9 months ago TemplateProvider.php 9 months ago functions.php 9 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