Php “Drupal”;“您无权访问此页面”;

Php “Drupal”;“您无权访问此页面”;,php,drupal,drupal-7,Php,Drupal,Drupal 7,我已经从MIA开发人员那里接管了网站的管理工作,并花了一天的时间试图找到这个答案 升级到V7.56后,作为管理员,我无法访问的页面列表中只有一个特定页面。(不幸的是,这可能是我们管理面板中最需要的报告) 以下是我所知道的: Drupal版本7.56 PHP7.0.20 运行状态报告时没有错误 计时-无错误 以下是我所做的: 添加了$cookie_domain='.example.com';到settings.php 已清除浏览器缓存和cookie 确保管理员可以访问所有内容 已清除站点缓存

我已经从MIA开发人员那里接管了网站的管理工作,并花了一天的时间试图找到这个答案

升级到V7.56后,作为管理员,我无法访问的页面列表中只有一个特定页面。(不幸的是,这可能是我们管理面板中最需要的报告)

以下是我所知道的:

  • Drupal版本7.56
  • PHP7.0.20
  • 运行状态报告时没有错误
  • 计时-无错误
以下是我所做的:

  • 添加了$cookie_domain='.example.com';到settings.php
  • 已清除浏览器缓存和cookie
  • 确保管理员可以访问所有内容
  • 已清除站点缓存
  • 确保页面上的代码与我进行更新之前的代码完全相同
  • 我不知道该怎么办,也不知道该去哪里。非常感谢您的帮助

    更新:以超级管理员身份登录时,收到HTTP 500错误。经过更多的研究,我更新了php.ini以包含内存限制=64M; 现在我可以以超级管理员的身份查看该页面,但其他管理员仍然无法使用该页面

    功能自定义报告菜单(){
    $items['administration/uncoming classes']=数组(
    “标题”=>“即将到来的课程”,
    '页面回调'=>'自定义\u报告\u即将到来的\u类\u页面',
    “访问回调”=>“用户访问”,
    “访问参数”=>array('admin wdcc reports'),
    '文件'=>'包括/custom_reports.uncoming classes.inc',
    “键入”=>菜单\u回调,
    );
    $items['administration/class details']=数组(
    “标题”=>“类别详细信息”,
    “页面回调”=>“自定义报告\u类\u详细信息\u页面”,
    “访问回调”=>“用户访问”,
    “访问参数”=>array('admin wdcc reports'),
    '文件'=>'包括/custom_reports.class details.inc',
    “键入”=>菜单\u回调,
    );
    退回$items;
    }
    函数自定义\报告\即将到来的\类\页面(){
    drupal_添加_css(base_path().path_to_theme()。/assets/css/expurst accounts.css',数组('type'=>'external');
    全球$用户;
    $uid=$user->uid;
    $output='';
    $coming_classes=自定义_报告_获取_coming_classes();
    $attendee_count=自定义_报告_获取_attendee_count();
    //即将到来的课程
    $output.='即将到来的课程';
    $output.=自定义报告\格式\即将到来的\课程($output课程,$ATTENDER \计数);
    返回$output;
    }
    函数自定义报告权限(){
    返回数组(
    “管理员wdcc报告”=>数组(
    'title'=>t('Admin WDCC Reports'),
    'description'=>t('为WDCC执行管理任务'),
    //'cache'=>DRUPAL\u NO\u缓存,
    ),
    );
    }
    函数自定义报告获取即将到来的类(){
    $today=日期('Y-m-d');
    $x=0;
    $classes='';
    //从新的db表中获取类
    $today=日期('Y-m-d H:i:s');
    $result=db_query(“从节点n、字段数据字段日期fdfdfd中选择n.nid,其中n.status=:status和n.type=:type和n.nid=fdfdfdfd.entity\u id和fdfdfdfd.field\u date\u value>=:today ORDER BY fdfdfdfd.field\u date\u value ASC”,数组(':status'=>1',:type'=>“public\u class\u date',':today'=>);
    如果($result->rowCount()>0){
    foreach($结果为$行){
    $nid=$row->nid;
    $node=节点加载($nid);
    $product_id=$nid;
    $product\U title=$node->title;
    $product_type='public_class_date';
    $product_date=$node->字段_date[$node->语言][0]['value'];
    $product\U datestamp=STROTIME($product\U date);
    //$product\U datestamp=STROTIME($product\U date);
    //设置变量
    $classes[$x]['product\u id']=$product\u id;
    $classes[$x]['product\u title']=$product\u title;
    $classes[$x]['product\U type']=$product\U type;
    $classes[$x]['product\u date']=$product\u date;
    $classes[$x]['product_邮戳]=$product_邮戳;
    $x++;
    }
    }
    返回$classes;
    }
    函数自定义报告获取与会者计数(){
    $attendes=array();
    $old_attendes=array();
    $new_attendes=array();
    $result=db_query(“从wdcc_old_attendee中选择itemID、AttendeId、AttendeName”);
    如果($result->rowCount()>0){
    foreach($结果为$行){
    $item_id=$row->itemID;
    $attendee_id='B'。$row->attendee id;
    $attendee_name=$row->attendename;
    $old_attendes[$item_id][$attendee_id]['old_attendee_id']=$attendee_id;
    如果(strpos($attendee_name,,&')>0 | strpos($attendee_name,,')>0){//
    $old_attendes[$item_id][$attendee_id]['total_attendes']=2;
    }否则{
    $old_attendes[$item_id][$attendee_id]['total_attendes']=1;
    }
    }
    }
    if(是_数组($old_与会者)){
    $connect_class_id=自定义_帐户_connect_class_id();
    foreach($old_attenders as$old_item_id=>$attender_list){
    if(isset($connect\u class\u id[$old\u item\u id])){
    $product_id=$connect_class_id[$old_item_id];
    foreach($attendee\u列表为$attendee\u id=>$attendee){
    $old_attendee_id=$attendee['old_attendee_id'];
    $attendes[$product_id][$old_attendes_id]['total_attendes']=$attendee['total_attendes'];
    }
    }
    }
    }
    $result=db_query(“从交易id>0的wdcc_与会者中选择id、产品id”);
    如果($result->rowCount()>0){
    foreach($结果为$行){
    $attendee_id=$row->id;
    $product\U id=$row->product\U id;
    $attendes[$product_id][$attendee_id]['total_attendes']=1;
    }
    }
    $cancelled_attendes=array();
    $result=db_查询(“从wdcc_与会者中选择*);
    如果($result->rowCount()>0){
    foreach($结果为$行){
    $attendee\u id=$row->attendee\u id;
    $old_attende
    
    function custom_reports_menu() {
    
        $items['administration/upcoming-classes'] = array(
        'title' => 'Upcoming Classes',
        'page callback' => 'custom_reports_upcoming_classes_page',
        'access callback' => 'user_access',
        'access arguments' => array('admin wdcc reports'),
            'file' => 'includes/custom_reports.upcoming-classes.inc',
        'type' => MENU_CALLBACK,
        );
    
        $items['administration/class-details'] = array(
        'title' => 'Class Details',
        'page callback' => 'custom_reports_class_details_page',
        'access callback' => 'user_access',
        'access arguments' => array('admin wdcc reports'),
            'file' => 'includes/custom_reports.class-details.inc',
        'type' => MENU_CALLBACK,
        );
        return $items;
    
    }
    
    function custom_reports_upcoming_classes_page() {
    
        drupal_add_css(base_path().path_to_theme().'/assets/css/outburst-accounts.css', array('type' => 'external'));
    
        global $user;
        $uid = $user->uid;
    
        $output = '';
    
        $upcoming_classes = custom_reports_get_upcoming_classes();
        $attendee_count = custom_reports_get_attendee_count();
    
        // upcoming classes
        $output .= '<h2>Upcoming Classes</h2>';
        $output .= custom_reports_format_upcoming_classes($upcoming_classes, $attendee_count);
    
        return $output;
    }
    
    function custom_reports_permission() {
    
      return array(
        'admin wdcc reports' => array(
          'title' => t('Admin WDCC Reports'),
          'description' => t('Perform administration tasks for WDCC.'),
          //'cache' => DRUPAL_NO_CACHE,
        ),
      );
    }
    
    function custom_reports_get_upcoming_classes() {
    
        $today = date('Y-m-d');
    
        $x = 0;
        $classes = '';
    
        // get classes from new db tables
        $today = date('Y-m-d H:i:s');
    
        $result = db_query("SELECT n.nid FROM node n, field_data_field_date fdfd WHERE n.status = :status AND n.type = :type AND n.nid = fdfd.entity_id AND fdfd.field_date_value >= :today ORDER BY fdfd.field_date_value ASC", array(':status' => 1, ':type' => 'public_class_date', ':today' => $today));
        if ($result->rowCount() > 0) {
            foreach ($result as $row) {
    
                $nid = $row->nid;
                $node = node_load($nid);
    
                $product_id = $nid;
                $product_title = $node->title;
                $product_type = 'public_class_date';
                $product_date = $node->field_date[$node->language][0]['value'];
                $product_datestamp = strtotime($product_date);
                //$product_datestamp = strtotime($product_date);
    
                // set vars
                $classes[$x]['product_id'] = $product_id;
                $classes[$x]['product_title'] = $product_title;
                $classes[$x]['product_type'] = $product_type;
                $classes[$x]['product_date'] = $product_date;
                $classes[$x]['product_datestamp'] = $product_datestamp;
    
                $x++;
            }
        }
    
        return $classes;
    }
    
    function custom_reports_get_attendee_count() {
    
        $attendees = array();
        $old_attendees = array();
        $new_attendees = array();
    
        $result = db_query("SELECT itemID, attendeeID, attendeeName FROM wdcc_old_attendee");
        if ($result->rowCount() > 0) {
            foreach ($result as $row) {
                $item_id = $row->itemID;
                $attendee_id = 'B'.$row->attendeeID;
                $attendee_name = $row->attendeeName;
    
                $old_attendees[$item_id][$attendee_id]['old_attendee_id'] = $attendee_id;
    
                if (strpos($attendee_name, '&') > 0 || strpos($attendee_name, ' and') > 0) { // couples
                    $old_attendees[$item_id][$attendee_id]['total_attendees'] = 2;
                } else {
                    $old_attendees[$item_id][$attendee_id]['total_attendees'] = 1;
                }
            }
        }
        if (is_array($old_attendees)) {
            $connect_class_ids = custom_accounts_connect_class_ids();
            foreach ($old_attendees as $old_item_id => $attendee_list) {
                if (isset($connect_class_ids[$old_item_id])) {
                    $product_id = $connect_class_ids[$old_item_id];
                    foreach ($attendee_list as $attendee_id => $attendee) {
                        $old_attendee_id = $attendee['old_attendee_id'];
                        $attendees[$product_id][$old_attendee_id]['total_attendees'] = $attendee['total_attendees'];
                    }
                }
            }
        }
        $result = db_query("SELECT id, product_id FROM wdcc_attendees WHERE transaction_id > 0");
        if ($result->rowCount() > 0) {
            foreach ($result as $row) {
                $attendee_id = $row->id;
                $product_id = $row->product_id;
                $attendees[$product_id][$attendee_id]['total_attendees'] = 1;
            }
        }
        $cancelled_attendees = array();
        $result = db_query("SELECT * FROM wdcc_attendees_cancelled");
        if ($result->rowCount() > 0) {
            foreach ($result as $row) {
                $attendee_id = $row->attendee_id;
                $old_attendee_id = 'B'.$row->old_attendee_id;
    
                if ($attendee_id > 0) {
                    $cancelled_attendees[] = $attendee_id;
                } else {
                    $cancelled_attendees[] = $old_attendee_id;
                }
            }
        }
        foreach ($attendees as $product_id => $product_attendees) {
            foreach ($product_attendees as $attendee_id => $attendee) {
                if (in_array($attendee_id, $cancelled_attendees)) {
                    unset($attendees[$product_id][$attendee_id]);
                }
            }
        }
        $attendee_count = array();
        foreach ($attendees as $product_id => $product_attendees) {
            foreach ($product_attendees as $attendee_id => $attendee) {
                if (!isset($attendee_count[$product_id])) {
                    $attendee_count[$product_id] = $attendee['total_attendees'];
                } else {
                    $attendee_count[$product_id] = $attendee_count[$product_id] + $attendee['total_attendees'];
                }
            }
        }
    
        return $attendee_count;
    }
    
    function custom_reports_format_upcoming_classes($upcoming_classes, $attendee_count) {
    
        $output = '';
    
        if (is_array($upcoming_classes)) {
            $output .= '<div class="table-responsive table-container">';
            $output .= '<table class="table">';
            $output .= '<tr><td>Class</td><td>Guests</td><td>Actions</td></tr>';
            foreach ($upcoming_classes as $class) {
                $nid = $class['product_id'];
                $node_url = url('node/'.$nid, array('absolute' => TRUE));
                $attendees = 0;
                if (isset($attendee_count[$nid])) {
                    $attendees = $attendee_count[$nid];
                }
    
                $output .= '<tr><td><a href="'.$node_url.'">'.$class['product_title'].'</a><br />'.date('m/d/Y - g:i A', $class['product_datestamp']).'</td><td>'.$attendees.'</td><td><a href="/administration/class-details/'.$class['product_id'].'">View roster</a></td></tr>';
            }
            $output .= '</table>';
            $output .= '</div>';
        } else {
            $output .= '<p>No upcoming classes found.</p>';
        }
    
        return $output;
    }