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 |