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 |