Created
March 10, 2021 02:28
-
-
Save atsu666/24a4c45c273b72ebce763d2779cb393a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| use Acms\Services\Facades\RichEditor; | |
| class ACMS_GET_Admin_Config extends ACMS_GET_Admin | |
| { | |
| function & getConfig($rid, $mid, $setid = null) | |
| { | |
| $post_config =& $this->Post->getChild('config'); | |
| $config = Config::loadDefaultField(); | |
| if ($setid) { | |
| $config->overload(Config::loadConfigSet($setid)); | |
| } else { | |
| $config->overload(Config::loadBlogConfig(BID)); | |
| } | |
| $_config = null; | |
| if ( !!$rid && !$mid ) { | |
| $_config = Config::loadRuleConfig($rid, $setid); | |
| } else if ( !!$mid ) { | |
| $_config = Config::loadModuleConfig($mid, $rid); | |
| } | |
| if ( !!$_config ) { | |
| $config->overload($_config); | |
| foreach ( array( | |
| 'links_label', 'links_value', | |
| 'navigation_label', 'navigation_uri', 'navigation_attr', 'navigation_a_attr', 'navigation_parent', 'navigation_target', 'navigation_publish', | |
| ) as $fd ) { | |
| $config->setField($fd, $_config->getArray($fd)); | |
| } | |
| } | |
| if ( !$post_config->isNull() && ADMIN !== 'config_unit' ) { | |
| $config->overload($post_config); | |
| $post_config->overload($config); | |
| return $post_config; | |
| } | |
| return $config; | |
| } | |
| function get() | |
| { | |
| if ( !IS_LICENSED ) { return ''; } | |
| if ( !($rid = intval($this->Get->get('rid'))) ) { $rid = null; } | |
| if ( !($mid = intval($this->Get->get('mid'))) ) { $mid = null; } | |
| if ( !($setid = intval($this->Get->get('setid'))) ) { $setid = null; } | |
| if ($mid) { | |
| $setid = null; | |
| } | |
| $Tpl = new Template($this->tpl, new ACMS_Corrector()); | |
| $vars = array(); | |
| $Config =& $this->getConfig($rid, $mid, $setid); | |
| if ( !$this->Post->isValidAll() ) { | |
| $Tpl->add('msg#error'); | |
| } | |
| //---------------- | |
| // file extension | |
| $Config->setField('file_extension_document@list' | |
| , join(', ', $Config->getArray('file_extension_document')) | |
| ); | |
| $Config->setField('file_extension_document'); | |
| $Config->setField('file_extension_archive@list' | |
| , join(', ', $Config->getArray('file_extension_archive')) | |
| ); | |
| $Config->setField('file_extension_archive'); | |
| $Config->setField('file_extension_movie@list' | |
| , join(', ', $Config->getArray('file_extension_movie')) | |
| ); | |
| $Config->setField('file_extension_movie'); | |
| $Config->setField('file_extension_audio@list' | |
| , join(', ', $Config->getArray('file_extension_audio')) | |
| ); | |
| $Config->setField('file_extension_audio'); | |
| $admin = ADMIN; | |
| if ( $mid ) { | |
| $module = loadModule($mid); | |
| $admin = 'config_'.strtolower(preg_replace('@(?<=[a-zA-Z0-9])([A-Z])@', '-$1', $module->get('name'))); | |
| } | |
| $vars['shortcutUrl'] = acmsLink(array( | |
| 'bid' => BID, | |
| 'admin' => 'shortcut_edit', | |
| 'query' => array( | |
| 'action' => 'Config', | |
| 'admin' => $admin, | |
| 'edit' => 'add', | |
| 'step' => 'reapply', | |
| 'rid' => $rid, | |
| 'mid' => $mid, | |
| ) | |
| )); | |
| $vars += $this->buildColumn($Config, $Tpl); | |
| //----------------- | |
| // image unit size | |
| // Configを変質させてしまうので、Admin_Entry_Editとは同居できない | |
| // buildColumnメソッド内で、column_image_sizeを利用しているので、 | |
| // この処理より後に、buildColumnメソッドは実行できない。 | |
| if ( $sizes = $Config->getArray('column_image_size') ) { | |
| foreach ( $sizes as $i => $size ) { | |
| $sizes[$i] = preg_replace('/([^\d]*)/', '', $size); | |
| } | |
| $Config->set('column_image_size', $sizes); | |
| } | |
| if ( $large_size = $Config->get('image_size_large') ) { | |
| $Config->set('image_size_large', preg_replace('/([^\d]*)/', '', $large_size)); | |
| } | |
| if ( $tiny_size = $Config->get('image_size_tiny') ) { | |
| $Config->set('image_size_tiny', preg_replace('/([^\d]*)/', '', $tiny_size)); | |
| } | |
| $vars += $this->buildNavigation($Config, $Tpl); | |
| $vars += $this->buildField($Config, $Tpl, array(), 'config'); | |
| if ( RBID !== BID ) { | |
| $r_config = Config::loadBlogConfigSet(RBID); | |
| $log_access_save_period = $r_config->get('log_access_save_period'); | |
| if ( !empty($log_access_save_period) ) { | |
| $vars['log_access_save_period'] = $log_access_save_period; | |
| } | |
| } | |
| $vars['notice_mess'] = $this->Post->get('notice_mess'); | |
| // 一覧ページ | |
| if ( !$rid = idval($this->Get->get('rid')) ) $rid = null; | |
| if ( !$mid = idval($this->Get->get('mid')) ) $mid = null; | |
| if ( !$setid = idval($this->Get->get('setid')) ) $setid = null; | |
| $vars['indexUrl'] = $this->getIndexUrl($rid, $mid, $setid); | |
| $this->extendTemplate($vars, $Tpl); | |
| $Tpl->add(null, $vars); | |
| return $Tpl->get(); | |
| } | |
| function extendTemplate(&$vars, &$Tpl) | |
| { | |
| } | |
| function getIndexUrl($rid, $mid, $setid) | |
| { | |
| $url = ''; | |
| if ( sessionWithAdministration() ) { | |
| if ($mid) { | |
| $url = acmsLink(array( | |
| 'bid' => BID, | |
| 'admin' => 'module_index', | |
| )); | |
| } else if ($rid || $setid) { | |
| $url = acmsLink(array( | |
| 'bid' => BID, | |
| 'admin' => 'config_index', | |
| 'query' => array( | |
| 'rid' => $rid, | |
| 'setid' => $setid, | |
| ), | |
| )); | |
| } else if ( 'shop' == substr(ADMIN, 0, 4) ) { | |
| $url = acmsLink(array( | |
| 'bid' => BID, | |
| 'admin' => 'shop_menu', | |
| )); | |
| } else { | |
| $url = acmsLink(array( | |
| 'bid' => BID, | |
| 'admin' => 'config_index', | |
| )); | |
| } | |
| } else { | |
| $url = acmsLink(array( | |
| 'bid' => BID, | |
| 'admin' => 'top', | |
| )); | |
| } | |
| return $url; | |
| } | |
| function bulidImageSize() | |
| { | |
| } | |
| function buildColumn(& $Config, & $Tpl, $rootBlock=array()) | |
| { | |
| if ( !is_array($rootBlock) ) $rootBlock = array($rootBlock); | |
| array_unshift($rootBlock, 'Config_Column'); | |
| // typeで参照できるラベルの連想配列 | |
| $aryTypeLabel = array(); | |
| foreach ( $Config->getArray('column_add_type') as $i => $type ) { | |
| $aryTypeLabel[$type] = $Config->get('column_add_type_label', '', $i); | |
| } | |
| $labels = $Config->getArray('column_add_type_label'); | |
| $column = array('insert' => '新規エントリー作成'); | |
| foreach ( $Config->getArray('column_add_type') as $mode ) { | |
| $label = array_shift($labels); | |
| if ( preg_match('@^(text|table|rich-editor|image|file|osmap|map|yolp|video|youtube|eximage|break|quote|media|module|custom)[^_]+(.*)@', $mode) ) continue; | |
| $column['add_'.$mode] = $label; | |
| } | |
| foreach ( $column as $mode => $modeLabel ) { | |
| $pfx = 'column_def_'.$mode.'_'; | |
| $aryType = $Config->getArray($pfx.'type'); | |
| $aryAlign = $Config->getArray($pfx.'align', true); | |
| $aryGroup = $Config->getArray($pfx.'group', true); | |
| $aryClass = $Config->getArray($pfx.'class', true); | |
| $arySize = $Config->getArray($pfx.'size', true); | |
| $aryEdit = $Config->getArray($pfx.'edit', true); | |
| $aryAttr = $Config->getArray($pfx.'attr', true); | |
| $aryAAttr = $Config->getArray($pfx.'a_attr', true); | |
| $aryFd1 = $Config->getArray($pfx.'field_1', true); | |
| $aryFd2 = $Config->getArray($pfx.'field_2', true); | |
| $aryFd3 = $Config->getArray($pfx.'field_3', true); | |
| $aryFd4 = $Config->getArray($pfx.'field_4', true); | |
| $aryFd5 = $Config->getArray($pfx.'field_5', true); | |
| foreach ( $aryType as $i => $type ) { | |
| $Field = new Field(); | |
| $Field->setField('pfx', $pfx); | |
| $Field->setField('align', ite($aryAlign, $i)); | |
| $Field->setField('group', ite($aryGroup, $i)); | |
| $Field->setField('class', ite($aryClass, $i)); | |
| $Field->setField('size', ite($arySize, $i)); | |
| $Field->setField('edit', ite($aryEdit, $i)); | |
| $Field->setField('attr', ite($aryAttr, $i)); | |
| $Field->setField('a_attr', ite($aryAAttr, $i)); | |
| $Field->setField('field_1', ite($aryFd1, $i)); | |
| $Field->setField('field_2', ite($aryFd2, $i)); | |
| $Field->setField('field_3', ite($aryFd3, $i)); | |
| $Field->setField('field_4', ite($aryFd4, $i)); | |
| $Field->setField('field_5', ite($aryFd5, $i)); | |
| // 特定指定子を含むユニットタイプ | |
| $actualType = $type; | |
| // 特定指定子を除外した、一般名のユニット種別 | |
| $type = detectUnitTypeSpecifier($type); | |
| if ( 'text' == $type ) { | |
| foreach ( $Config->getArray('column_text_tag') as $j => $tag ) { | |
| $_vars = array( | |
| 'value' => $tag, | |
| 'label' => $Config->get('column_text_tag_label', '', $j), | |
| ); | |
| if ( $Field->get('field_2') == $tag ) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('textTag:loop', $type), $rootBlock), $_vars); | |
| } | |
| } else if ( 'table' == $type ) { | |
| } else if ( 'image' == $type ) { | |
| foreach ( $Config->getArray('column_image_size') as $j => $size ) { | |
| $_vars = array( | |
| 'value' => $size, | |
| 'label' => $Config->get('column_image_size_label', '', $j), | |
| ); | |
| if ( $Field->get('size') == $size ) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('size:loop', $type), $rootBlock), $_vars); | |
| } | |
| } else if ( 'osmap' == $type || 'map' == $type ) { | |
| foreach ( $Config->getArray('column_map_size') as $j => $size ) { | |
| $_vars = array( | |
| 'value' => $size, | |
| 'label' => $Config->get('column_map_size_label', '', $j), | |
| ); | |
| if ( $Field->get('size') == $size ) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('size:loop', $type), $rootBlock), $_vars); | |
| } | |
| } else if ( 'yolp' == $type ) { | |
| foreach ( $Config->getArray('column_map_size') as $j => $size ) { | |
| $_vars = array( | |
| 'value' => $size, | |
| 'label' => $Config->get('column_map_size_label', '', $j), | |
| ); | |
| if ( $Field->get('size') == $size ) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('size:loop', $type), $rootBlock), $_vars); | |
| } | |
| foreach ( $Config->getArray('column_map_layer_type') as $j => $layer ) { | |
| $_vars = array( | |
| 'value' => $layer, | |
| 'label' => $Config->get('column_map_layer_type_label', '', $j), | |
| ); | |
| if ( $Field->get('field_5') == $layer ) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('layer:loop', $type), $rootBlock), $_vars); | |
| } | |
| } else if ( 'youtube' == $type ) { | |
| foreach ( $Config->getArray('column_youtube_size') as $j => $size ) { | |
| $_vars = array( | |
| 'value' => $size, | |
| 'label' => $Config->get('column_youtube_size_label', '', $j), | |
| ); | |
| if ( $Field->get('size') == $size ) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('size:loop', $type), $rootBlock), $_vars); | |
| } | |
| } else if ( 'video' == $type ) { | |
| foreach ( $Config->getArray('column_video_size') as $j => $size ) { | |
| $_vars = array( | |
| 'value' => $size, | |
| 'label' => $Config->get('column_video_size_label', '', $j), | |
| ); | |
| if ( $Field->get('size') == $size ) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('size:loop', $type), $rootBlock), $_vars); | |
| } | |
| } else if ( 'eximage' == $type ) { | |
| foreach ( $Config->getArray('column_eximage_size') as $j => $size ) { | |
| $_vars = array( | |
| 'value' => $size, | |
| 'label' => $Config->get('column_eximage_size_label', '', $j), | |
| ); | |
| if ( $Field->get('size') == $size ) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('size:loop', $type), $rootBlock), $_vars); | |
| } | |
| } else if ( 'quote' == $type ) { | |
| } else if ( 'rich-editor' == $type ) { | |
| $Tpl->add(array_merge(array('edit', $type), $rootBlock), array( | |
| 'html' => RichEditor::render($Field->get('field_1')) | |
| )); | |
| } else if ( 'media' == $type ) { | |
| foreach ($Config->getArray('column_media_size') as $j => $size) { | |
| $_vars = array( | |
| 'value' => $size, | |
| 'label' => $Config->get('column_media_size_label', '', $j), | |
| ); | |
| if ($Field->get('size') == $size) { | |
| $_vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('size:loop', $type), $rootBlock), $_vars); | |
| } | |
| } | |
| //------- | |
| // group | |
| if ( 1 | |
| && 'on' === $Config->get('unit_group') | |
| && !preg_match('/^(break|module|custom)$/', $type) | |
| ) { | |
| $classes = $Config->getArray('unit_group_class'); | |
| $labels = $Config->getArray('unit_group_label'); | |
| if ( count($classes) === count($labels) ) { | |
| foreach ( $labels as $k => $label ) { | |
| $Tpl->add(array_merge(array('group:loop', 'group:veil', $type), $rootBlock), array( | |
| 'group.value' => $classes[$k], | |
| 'group.label' => $label, | |
| 'group.selected' => ($classes[$k] === $Field->get('group')) ? $Config->get('attr_selected') : '', | |
| )); | |
| } | |
| $Tpl->add(array_merge(array('group:veil', $type), $rootBlock), array( | |
| 'group.pfx' => $Field->get('pfx'), | |
| )); | |
| } | |
| } | |
| // selected用のgroupをunset ( しないと,以後のbuildFieldでgroup:loopが暴発する ) | |
| $Field->delete('group'); | |
| $Field->setField('size'); | |
| $vars = $this->buildField($Field, $Tpl, array_merge(array($type), $rootBlock)); | |
| if( isset( $aryTypeLabel[$actualType] ) ){ | |
| $vars += array( | |
| 'actualType' => $actualType, | |
| 'actualLabel' => $aryTypeLabel[$actualType], | |
| ); | |
| } | |
| $Tpl->add(array_merge(array($type, 'loop', 'mode:loop'), $rootBlock), $vars); | |
| $Tpl->add(array_merge(array('loop', 'mode:loop'), $rootBlock)); | |
| } | |
| foreach ( $Config->getArray('column_add_type') as $i => $type ) { | |
| if ( !preg_match('/^(text|table|image|file|osmap|map|yolp|video|youtube|eximage|break|quote|media|module|custom)($|_)/', $type) ) { | |
| continue; | |
| } | |
| $Tpl->add(array_merge(array('add_type:loop', 'mode:loop'), $rootBlock), array( | |
| 'type' => $type, | |
| 'label' => $Config->get('column_add_type_label', '未定義', $i), | |
| 'modePrefix.type' => $pfx | |
| )); | |
| } | |
| $Tpl->add(array_merge(array('mode:loop'), $rootBlock), array( | |
| 'mode' => $modeLabel, | |
| 'modePrefix' => $pfx, | |
| )); | |
| } | |
| $Tpl->add($rootBlock); | |
| return array(); | |
| } | |
| function buildNavigation(& $Config, & $Tpl, $rootBlock=array()) | |
| { | |
| if ( !is_array($rootBlock) ) $rootBlock = array($rootBlock); | |
| array_unshift($rootBlock, 'Config_Navigation'); | |
| $addNum = 0; | |
| $Count = array(0=>$addNum); | |
| $Parent = array(0=>array()); | |
| foreach ( $Config->getArray('navigation_label') as $i => $label ) { | |
| $id = $i + 1; | |
| $pid = intval($Config->get('navigation_parent', 0, $i)); | |
| $Parent[$pid][$id] = array( | |
| 'id' => $id, | |
| 'pid' => $pid, | |
| 'label' => $label, | |
| 'uri' => $Config->get('navigation_uri', null, $i), | |
| 'target' => $Config->get('navigation_target', null, $i), | |
| 'publish' => $Config->get('navigation_publish', null, $i), | |
| 'attr' => $Config->get('navigation_attr', null, $i), | |
| 'a_attr' => $Config->get('navigation_a_attr', null, $i), | |
| 'marks' => array(), | |
| ); | |
| $Count[$pid] = (isset($Count[$pid]) ? $Count[$pid] : 0) + 1; | |
| } | |
| $all = array(); | |
| $pidStack = array(0); | |
| $aryMark = array(''); | |
| while ( count($pidStack) ) { | |
| $pid = array_pop($pidStack); | |
| $mark = array_pop($aryMark); | |
| while ( $row = array_shift($Parent[$pid]) ) { | |
| $id = $row['id']; | |
| $row['marks'] = array_merge(array(count($Parent[$pid]) ? 1 : 0), $aryMark); | |
| $all[] = $row; | |
| if ( isset($Parent[$id]) ) { | |
| if ( count($Parent[$pid]) ) { | |
| $aryMark[] = 3; | |
| } else { | |
| $aryMark[] = 2; | |
| } | |
| $aryMark[] = $mark; | |
| $pidStack[] = $pid; | |
| $pidStack[] = $id; | |
| break; | |
| } | |
| } | |
| } | |
| //--------------- | |
| // parent select | |
| $PSelect = array(); | |
| foreach ( $all as $row ) { | |
| $label = $row['label']; | |
| //-------- | |
| // indent | |
| $mark = ''; | |
| $marks = array_reverse($row['marks']); | |
| $cnt = count($row['marks']); | |
| for ( $i=1; $i<$cnt; $i++ ) { | |
| if ( !isset($marks[$i]) ) continue; | |
| $mark .= $Config->get('indent_marks', '', $marks[$i]); | |
| } | |
| $PSelect[$row['id']] = $mark.htmlspecialchars($label); | |
| } | |
| $seq = 0; | |
| $Sort = array(); | |
| $length = count($all) - 1; | |
| foreach ( $all as $row ) { | |
| $id = $row['id']; | |
| $pid = $row['pid']; | |
| $marks = $row['marks']; | |
| $Sort[$pid] = (isset($Sort[$pid]) ? $Sort[$pid] : 0) + 1; | |
| //-------- | |
| // indent | |
| $level = 0; | |
| $marks = array_reverse($marks); | |
| foreach ( $marks as $i => $mark ) { | |
| if ( empty($i) ) continue; | |
| if ( 0 == $mark ) { | |
| $block = 'child#last'; | |
| } else if ( 1 == $mark ) { | |
| $block = 'child'; | |
| } else if ( 2 == $mark ) { | |
| $block = 'descendant#last'; | |
| } else if ( 3 == $mark ) { | |
| $block = 'descendant'; | |
| } else { | |
| continue; | |
| } | |
| $Tpl->add(array_merge(array($block, 'navigation:loop'), $rootBlock)); | |
| $level++; | |
| } | |
| //------ | |
| // sort | |
| for ( $i=1; $i<=$Count[$pid]; $i++ ) { | |
| $vars = array( | |
| 'label' => $i, | |
| 'value' => $i, | |
| ); | |
| if ( $i == $Sort[$pid] ) { | |
| $vars['selected'] = $Config->get('attr_selected'); | |
| } | |
| $Tpl->add(array_merge(array('sort:loop', 'navigation:loop'), $rootBlock), $vars); | |
| } | |
| //--------------- | |
| // parent select | |
| foreach ( $PSelect as $_id => $_label ) { | |
| $vars = array( | |
| 'value' => $_id, | |
| 'label' => $_label, | |
| ); | |
| if ( $pid == $_id ) $vars['selected'] = $Config->get('attr_selected'); | |
| $Tpl->add(array_merge(array('parent:loop', 'navigation:loop'), $rootBlock), $vars); | |
| } | |
| $vars = array( | |
| 'seq' => $seq, | |
| 'level' => $level, | |
| 'pseq' => $pid, | |
| 'label' => mb_substr(json_encode($row['label']),1, mb_strlen(json_encode($row['label'])) - 2), | |
| 'uri' => mb_substr(json_encode($row['uri']),1, mb_strlen(json_encode($row['uri'])) - 2), | |
| 'attr' => mb_substr(json_encode($row['attr']),1, mb_strlen(json_encode($row['attr'])) - 2), | |
| 'a_attr' => mb_substr(json_encode($row['a_attr']),1, mb_strlen(json_encode($row['a_attr'])) - 2), | |
| 'navigation_target:checked#'.$row['target'] => $Config->get('attr_checked'), | |
| 'navigation_publish:checked#'.$row['publish'] => $Config->get('attr_checked'), | |
| ); | |
| if ($length !== $seq) { | |
| $Tpl->add('glue'); | |
| } | |
| $Tpl->add(array_merge(array('navigation:loop'), $rootBlock), $vars); | |
| $seq++; | |
| } | |
| $Tpl->add($rootBlock); | |
| return array(); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment