Hallo Miriam,
ganz so Einfach ist es nicht, die Empfänger ID zu bekommen, denn 
$address_list ist ein verschachteltes Array, da wird für jeden Eintrag (Benutzer) ein Array angelegt, welches weiteres Arrays enthält, siehe hier:
ucp_pm_compose.php
Code: Alles auswählen
    // Build address list for display
    // array('u' => array($author_id => 'to'));
    if (sizeof($address_list))
    {
        // Get Usernames and Group Names
        $result = array();
        if (!empty($address_list['u']))
        {
            $sql = 'SELECT user_id as id, username as name, user_colour as colour
                FROM ' . USERS_TABLE . '
                WHERE ' . $db->sql_in_set('user_id', array_map('intval', array_keys($address_list['u']))) . '
                ORDER BY username_clean ASC';
            $result['u'] = $db->sql_query($sql);
        }
        if (!empty($address_list['g']))
        {
            $sql = 'SELECT g.group_id AS id, g.group_name AS name, g.group_colour AS colour, g.group_type
                FROM ' . GROUPS_TABLE . ' g';
            if (!$auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel'))
            {
                $sql .= ' LEFT JOIN ' . USER_GROUP_TABLE . ' ug
                    ON (
                        g.group_id = ug.group_id
                        AND ug.user_id = ' . $user->data['user_id'] . '
                        AND ug.user_pending = 0
                    )
                    WHERE (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ')';
            }
            $sql .= ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? ' WHERE ' : ' AND ';
            $sql .= 'g.group_receive_pm = 1
                AND ' . $db->sql_in_set('g.group_id', array_map('intval', array_keys($address_list['g']))) . '
                ORDER BY g.group_name ASC';
            $result['g'] = $db->sql_query($sql);
        }
        $u = $g = array();
        $_types = array('u', 'g');
        foreach ($_types as $type)
        {
            if (isset($result[$type]) && $result[$type])
            {
                while ($row = $db->sql_fetchrow($result[$type]))
                {
                    if ($type == 'g')
                    {
                        $row['name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['name']] : $row['name'];
                    }
                    ${$type}[$row['id']] = array('name' => $row['name'], 'colour' => $row['colour']);
                }
                $db->sql_freeresult($result[$type]);
            }
        }
        // Now Build the address list
        $plain_address_field = '';
        foreach ($address_list as $type => $adr_ary)
        {
            foreach ($adr_ary as $id => $field)
            {
                if (!isset(${$type}[$id]))
                {
                    unset($address_list[$type][$id]);
                    continue;
                }
                $field = ($field == 'to') ? 'to' : 'bcc';
                $type = ($type == 'u') ? 'u' : 'g';
                $id = (int) $id;
                $tpl_ary = array(
                    'IS_GROUP'    => ($type == 'g') ? true : false,
                    'IS_USER'    => ($type == 'u') ? true : false,
                    'UG_ID'        => $id,
                    'NAME'        => ${$type}[$id]['name'],
                    'COLOUR'    => (${$type}[$id]['colour']) ? '#' . ${$type}[$id]['colour'] : '',
                    'TYPE'        => $type,
                );
                if ($type == 'u')
                {
                    $tpl_ary = array_merge($tpl_ary, array(
                        'U_VIEW'        => get_username_string('profile', $id, ${$type}[$id]['name'], ${$type}[$id]['colour']),
                        'NAME_FULL'        => get_username_string('full', $id, ${$type}[$id]['name'], ${$type}[$id]['colour']),
                    ));
                }
                else
                {
                    $tpl_ary = array_merge($tpl_ary, array(
                        'U_VIEW'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&g=' . $id),
                    ));
                }
                $template->assign_block_vars($field . '_recipient', $tpl_ary);
            }
        }
    }
 
Den Code habe ich in meine functions_pm_limit_hour.php genommen, das geht auch schon teilweise.
Stimmt die Überlegung hatte ich auch schon, was passiert mit den Empfängern, die das Limit noch nicht überschritten haben. Deine Möglichkeit ist mir auch schon in den Sinn gekommen, aber in Anbetracht des verschachtelten Arrays scheint es mir schon etwas Aufwendig zu sein. Da stellt sich auch die Frage, die betreffenden Empfänger raus nehmen und trotzdem dann versenden, oder nicht versenden und die betreffenden Empfänger nur anzeigen und dem User überlassen ob er diese dann raus nimmt.
Ich habe da noch eine andere Idee, vielleicht könnte es gehen, gleich an der Stelle zu prüfen wo der Benutzer ins Array geschrieben werden soll, ist vermutlich die Funktion 
handle_message_list_actions. Ich muss mir auch noch die 
$to_user_id anschauen, könnte auch interessant sein. Vermutlich muss ich irgendwo hier angreifen:
Code: Alles auswählen
    {
        $message_attachment = 0;
        $message_text = $message_subject = '';
        if ($to_user_id && $to_user_id != ANONYMOUS && $action == 'post')
        {
            $address_list['u'][$to_user_id] = 'to';
        }
        else if ($to_group_id && $action == 'post')
        {
            $address_list['g'][$to_group_id] = 'to';
        }
        $check_value = 0;
    }
 
aber wenn auf eine Mail geantwortet wird, dann steht die Empfänger ID vermutlich schon in 
$address_list drinnen, habe ich aber noch nicht geprüft. Wenn dem so ist, dann kommt vermutlich doch wieder die erste Lösung in Betracht, also nicht ganz einfach.
Den in meinem letzten Post genannten Code (
// Begin : PM Limit Per Hour) habe ich zur Zeit mal bei 
if ($submit) im Fehlerteil drinnen, damit die Meldung noch vor dem versenden kommt.
Insgesamt erweist sich die vermeintlich einfache Lösung doch als sehr anspruchsvoll in der Umsetzung.
Gruß Helmut
 
			
			
									
						
							Ich bin nicht ganz dicht.... na und.