class= " lineNumbers " do
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877:
878:
879:
880:
881:
882:
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
908:
909:
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936:
937:
938:
939:
940:
941:
942:
943:
944:
945:
946:
947:
948:
949:
950:
951:
952:
953:
954:
955:
956:
957:
958:
959:
960:
961:
962:
963:
964:
965:
966:
967:
968:
969:
970:
971:
972:
973:
974:
975:
976:
977:
978:
979:
980:
981:
982:
983:
984:
985:
986:
987:
988:
989:
990:
991:
992:
993:
994:
995:
996:
997:
998:
999:
1000:
1001:
1002:
1003:
1004:
1005:
1006:
1007:
1008:
1009:
1010:
1011:
1012:
1013:
1014:
1015:
1016:
1017:
1018:
1019:
1020:
1021:
1022:
1023:
1024:
1025:
1026:
1027:
1028:
1029:
1030:
1031:
1032:
1033:
1034:
1035:
1036:
1037:
1038:
1039:
1040:
1041:
1042:
1043:
1044:
1045:
1046:
1047:
1048:
1049:
1050:
1051:
1052:
1053:
1054:
1055:
1056:
1057:
1058:
1059:
1060:
1061:
1062:
1063:
1064:
1065:
1066:
1067:
1068:
1069:
1070:
1071:
1072:
1073:
1074:
1075:
1076:
1077:
1078:
1079:
1080:
1081:
1082:
1083:
1084:
1085:
1086:
1087:
1088:
1089:
1090:
1091:
1092:
1093:
1094:
1095:
1096:
1097:
1098:
1099:
1100:
1101:
1102:
1103:
1104:
1105:
1106:
1107:
1108:
1109:
1110:
1111:
1112:
1113:
1114:
1115:
1116:
1117:
1118:
1119:
1120:
1121:
1122:
1123:
1124:
1125:
1126:
1127:
1128:
1129:
1130:
1131:
1132:
1133:
1134:
1135:
1136:
1137:
1138:
1139:
1140:
1141:
1142:
1143:
1144:
1145:
1146:
1147:
1148:
1149:
1150:
1151:
1152:
1153:
1154:
1155:
1156:
1157:
1158:
1159:
1160:
1161:
1162:
1163:
1164:
1165:
1166:
1167:
1168:
1169:
1170:
1171:
1172:
1173:
1174:
1175:
1176:
1177:
1178:
1179:
1180:
1181:
1182:
1183:
1184:
1185:
1186:
1187:
1188:
1189:
1190:
1191:
1192:
1193:
1194:
1195:
1196:
1197:
1198:
1199:
1200:
1201:
1202:
1203:
1204:
1205:
1206:
1207:
1208:
1209:
1210:
1211:
1212:
1213:
1214:
1215:
1216:
1217:
1218:
1219:
1220:
1221:
1222:
1223:
1224:
1225:
1226:
1227:
1228:
1229:
1230:
1231:
1232:
1233:
1234:
1235:
1236:
1237:
1238:
1239:
1240:
1241:
1242:
1243:
1244:
1245:
1246:
1247:
1248:
1249:
1250:
1251:
1252:
1253:
1254:
1255:
1256:
1257:
1258:
1259:
1260:
1261:
1262:
1263:
1264:
1265:
1266:
1267:
1268:
1269:
1270:
1271:
1272:
1273:
1274:
1275:
1276:
1277:
1278:
1279:
1280:
1281:
1282:
1283:
1284:
1285:
1286:
1287:
1288:
1289:
1290:
1291:
1292:
1293:
1294:
1295:
1296:
1297:
1298:
1299:
1300:
1301:
1302:
1303:
1304:
1305:
1306:
1307:
1308:
1309:
1310:
1311:
1312:
1313:
1314:
1315:
1316:
1317:
1318:
1319:
1320:
1321:
1322:
1323:
1324:
1325:
1326:
1327:
1328:
1329:
1330:
1331:
1332:
1333:
1334:
1335:
1336:
1337:
1338:
1339:
1340:
1341:
1342:
1343:
1344:
1345:
1346:
1347:
1348:
1349:
1350:
1351:
1352:
1353:
1354:
1355:
1356:
1357:
1358:
1359:
1360:
1361:
1362:
1363:
1364:
1365:
1366:
1367:
1368:
1369:
1370:
1371:
1372:
1373:
1374:
1375:
1376:
1377:
1378:
1379:
1380:
1381:
1382:
1383:
1384:
1385:
1386:
1387:
1388:
1389:
1390:
1391:
1392:
1393:
1394:
1395:
1396:
1397:
1398:
1399:
1400:
1401:
1402:
1403:
1404:
1405:
1406:
1407:
1408:
1409:
1410:
1411:
1412:
1413:
1414:
1415:
1416:
1417:
1418:
1419:
1420:
1421:
1422:
1423:
1424:
1425:
1426:
1427:
1428:
1429:
1430:
1431:
1432:
1433:
1434:
1435:
1436:
1437:
1438:
1439:
1440:
1441:
1442:
1443:
1444:
1445:
1446:
1447:
1448:
1449:
1450:
1451:
1452:
1453:
1454:
1455:
1456:
1457:
1458:
1459:
1460:
1461:
1462:
1463:
1464:
1465:
1466:
1467:
1468:
1469:
1470:
1471:
1472:
1473:
1474:
1475:
1476:
1477:
1478:
1479:
1480:
1481:
1482:
1483:
1484:
1485:
1486:
1487:
1488:
1489:
1490:
1491:
1492:
1493:
1494:
1495:
1496:
1497:
1498:
1499:
1500:
1501:
1502:
1503:
1504:
1505:
1506:
1507:
1508:
1509:
1510:
1511:
1512:
1513:
1514:
1515:
1516:
1517:
1518:
1519:
1520:
1521:
1522:
1523:
1524:
1525:
1526:
1527:
1528:
1529:
1530:
1531:
1532:
1533:
1534:
1535:
1536:
1537:
1538:
1539:
1540:
1541:
1542:
1543:
1544:
1545:
1546:
1547:
1548:
1549:
1550:
1551:
1552:
1553:
1554:
1555:
1556:
1557:
1558:
1559:
1560:
1561:
1562:
1563:
1564:
1565:
1566:
1567:
1568:
1569:
1570:
1571:
1572:
1573:
1574:
1575:
1576:
1577:
1578:
1579:
1580:
1581:
1582:
1583:
1584:
1585:
1586:
1587:
1588:
1589:
1590:
1591:
1592:
1593:
1594:
1595:
1596:
1597:
1598:
1599:
1600:
1601:
1602:
1603:
1604:
1605:
1606:
1607:
1608:
1609:
1610:
1611:
1612:
1613:
1614:
1615:
1616:
1617:
1618:
1619:
1620:
1621:
1622:
1623:
1624:
1625:
1626:
1627:
1628:
1629:
1630:
1631:
1632:
1633:
1634:
1635:
1636:
1637:
1638:
1639:
1640:
1641:
1642:
1643:
1644:
1645:
1646:
1647:
1648:
1649:
1650:
1651:
1652:
1653:
1654:
1655:
1656:
1657:
1658:
1659:
1660:
1661:
1662:
1663:
1664:
1665:
1666:
1667:
1668:
1669:
1670:
1671:
1672:
1673:
1674:
1675:
1676:
1677:
1678:
1679:
1680:
1681:
1682:
1683:
1684:
1685:
1686:
1687:
1688:
1689:
1690:
1691:
1692:
1693:
1694:
1695:
1696:
1697:
1698:
1699:
1700:
1701:
1702:
1703:
1704:
1705:
1706:
1707:
1708:
1709:
1710:
1711:
1712:
1713:
1714:
1715:
1716:
1717:
1718:
1719:
1720:
1721:
1722:
1723:
1724:
1725:
1726:
1727:
1728:
1729:
1730:
1731:
1732:
1733:
1734:
1735:
1736:
1737:
1738:
1739:
1740:
1741:
1742:
1743:
1744:
1745:
1746:
1747:
1748:
1749:
1750:
1751:
1752:
1753:
1754:
1755:
1756:
1757:
1758:
1759:
1760:
1761:
1762:
1763:
1764:
1765:
1766:
1767:
1768:
1769:
1770:
1771:
1772:
1773:
1774:
1775:
1776:
1777:
1778:
1779:
1780:
1781:
1782:
1783:
1784:
1785:
1786:
1787:
1788:
1789:
1790:
1791:
1792:
1793:
1794:
1795:
1796:
1797:
1798:
1799:
1800:
1801:
1802:
1803:
1804:
1805:
1806:
1807:
1808:
1809:
1810:
1811:
1812:
1813:
1814:
1815:
1816:
1817:
1818:
1819:
1820:
1821:
1822:
1823:
1824:
1825:
1826:
1827:
1828:
1829:
1830:
1831:
1832:
1833:
1834:
1835:
1836:
1837:
1838:
1839:
1840:
1841:
1842:
1843:
1844:
1845:
1846:
1847:
1848:
1849:
1850:
1851:
1852:
1853:
1854:
1855:
1856:
1857:
1858:
1859:
1860:
1861:
1862:
1863:
1864:
1865:
1866:
1867:
1868:
1869:
1870:
1871:
1872:
1873:
1874:
1875:
1876:
1877:
1878:
1879:
1880:
1881:
1882:
1883:
1884:
1885:
1886:
1887:
1888:
1889:
1890:
1891:
1892:
1893:
1894:
1895:
1896:
1897:
1898:
1899:
1900:
1901:
1902:
1903:
1904:
1905:
1906:
1907:
1908:
1909:
1910:
1911:
1912:
1913:
1914:
1915:
1916:
1917:
1918:
1919:
1920:
1921:
1922:
1923:
1924:
1925:
1926:
1927:
1928:
1929:
1930:
1931:
1932:
1933:
1934:
1935:
1936:
1937:
1938:
1939:
1940:
1941:
1942:
1943:
1944:
1945:
1946:
1947:
1948:
1949:
1950:
1951:
1952:
1953:
1954:
1955:
1956:
1957:
1958:
1959:
1960:
1961:
1962:
1963:
1964:
1965:
1966:
1967:
1968:
1969:
1970:
1971:
1972:
1973:
1974:
1975:
1976:
1977:
1978:
1979:
1980:
1981:
1982:
1983:
1984:
1985:
1986:
1987:
1988:
1989:
1990:
1991:
1992:
1993:
1994:
1995:
1996:
1997:
1998:
1999:
2000:
2001:
2002:
2003:
2004:
2005:
2006:
2007:
2008:
2009:
2010:
2011:
2012:
2013:
2014:
2015:
2016:
2017:
2018:
2019:
2020:
2021:
2022:
2023:
2024:
2025:
2026:
2027:
2028:
2029:
2030:
2031:
2032:
2033:
2034:
2035:
2036:
2037:
2038:
2039:
2040:
2041:
2042:
2043:
2044:
2045:
2046:
2047:
2048:
2049:
2050:
2051:
2052:
2053:
2054:
2055:
2056:
2057:
2058:
2059:
2060:
2061:
2062:
2063:
2064:
2065:
2066:
2067:
2068:
2069:
2070:
2071:
2072:
2073:
2074:
2075:
2076:
2077:
2078:
2079:
2080:
2081:
2082:
2083:
2084:
2085:
2086:
2087:
2088:
2089:
2090:
2091:
2092:
2093:
2094:
2095:
2096:
2097:
2098:
2099:
2100:
2101:
2102:
2103:
2104:
2105:
|
class= do
>< notpretty " do class= " do id= " codeSnippet651343 do ”. t (“o módulo do comentário permite que os visitantes comentem em seus bornes, criando placas ad hoc da discussão. Algum href= " @content-type " type >content do do Default ajustado a Read/Write para permitir que os comentários, ou Disabled, impeçam comentários. Os ajustes da exposição do comentário e outros controles podem igualmente ser personalizados para cada tipo satisfeito (alguns ajustes da exposição são customizáveis por usuários individuais). ”, disposição (“@content-type do” URL => (“admin/índice/tipos "))). “”;
$output. = “”. t (do “as permissões comentário são atribuídas aos papéis de usuário, e usadas para determinar se estão permitidos aos usuários anónimos (ou outros papéis) comentar em bornes. Se são permitidos aos usuários anónimos comentar, sua informação de contato individual pode ser retida nos bolinhos armazenados em seu computador local para o uso em umas submissões mais atrasadas do comentário. Quando um comentário não tem nenhuma resposta, pode (opcionalmente) ser editado por seu autor. O módulo do comentário usa os mesmos formatos da entrada e os Tag do HTML disponíveis ao criar outros formulários de content."). “ ”;
$output. = “”. t (“para mais informação, ver a entrada em linha do manual para >Comment module " do @comment o " do href= do 'http://drupal.org/handbook/modules/comment/')). “”;
$output do retorno;
caso “admin/índice/comentário”:
retornar o “”. t (“está abaixo uma lista dos comentários os mais atrasados afixados a seu local. Estalar sobre um assunto para ver o comentário, o nome do autor para editar a informação de usuário do autor, “editar” para modificar o texto, e a “supressão” para remover seu submission."). “ ”;
caso “admin/índice/comentário/aprovaçã0”:
retornar o “”. t (“está abaixo uma lista dos comentários afixada a seu local que precisam a aprovaçã0. Para aprovar um comentário, estalar sobre “editam” e mudam então seu da “status moderação” a aprovado. Estalar sobre um assunto para ver o comentário, o nome do autor para editar a informação de usuário do autor, “editar” para modificar o texto, e a “supressão” para remover seu submission."). “ ”;
}
}
/**
* Execução do hook_theme ().
*
comment_theme da função () {
disposição do retorno (
disposição do => do “comment_block” (
disposição do => dos “argumentos” (),
),
disposição do => do “comment_admin_overview” (
disposição do => dos “argumentos” (ZERO do => do “formulário”),
),
disposição do => do “comment_preview” (
disposição do => dos “argumentos” (disposição do => do ZERO, das “ligações” do => do ZERO, do “nó” do => do “comentário” (), => “visível” 1),
),
disposição do => do “comment_view” (
disposição do => dos “argumentos” (disposição do => do ZERO, das “ligações” do => do ZERO, do “nó” do => do “comentário” (), => “visível” 1),
),
disposição do => dos “comment_controls” (
disposição do => dos “argumentos” (ZERO do => do “formulário”),
),
disposição do => do “comentário” (
=> “comentário” do “molde”,
disposição do => dos “argumentos” (ZERO do => do “comentário”, ZERO do => do “nó”, disposição do => das “ligações” ()),
),
“comment_folded” a disposição do => (
” => “do “molde comentar-dobrado”,
disposição do => dos “argumentos” (ZERO do => do “comentário”),
),
“comment_flat_collapsed” a disposição do => (
disposição do => dos “argumentos” (ZERO do => do ZERO, do “nó” do => do “comentário”),
),
“comment_flat_expanded” a disposição do => (
disposição do => dos “argumentos” (ZERO do => do ZERO, do “nó” do => do “comentário”),
),
“comment_thread_collapsed” a disposição do => (
disposição do => dos “argumentos” (ZERO do => do ZERO, do “nó” do => do “comentário”),
),
“comment_thread_expanded” a disposição do => (
disposição do => dos “argumentos” (ZERO do => do ZERO, do “nó” do => do “comentário”),
),
“comment_post_forbidden” a disposição do => (
disposição do => dos “argumentos” (ZERO do => do “nid”),
),
disposição do => do “comment_wrapper” (
=> “comentar-envoltório” do “molde”,
disposição do => dos “argumentos” (ZERO do => do ZERO, do “nó” do => do “índice”),
),
“comment_submitted” a disposição do => (
disposição do => dos “argumentos” (ZERO do => do “comentário”),
),
);
}
/**
* Execução do hook_menu ().
*
comment_menu da função () {
$items [“admin/índice/comentário”] = disposição (
” o => “do “título comenta”,
lista” do => a “da “descrição e edita comentários do local e a fila da moderação do comentário. ”,
“paginar => “comment_admin” da rechamada”,
“alcançar argumentos” disposição do => (“administrar comentários "),
“arquivar” o => “comment.admin.inc”,
);
Abas de //:
$items [“admin/índice/comentário/novo”] = disposição (
=> “comentários publicados” do “título”,
“datilografar” o => MENU_DEFAULT_LOCAL_TASK,
“tornar mais pesado” o => -10,
);
$items [“admin/índice/comentário/aprovaçã0”] = disposição (
“intitular” o => da “fila aprovaçã0”,
“paginar argumentos” disposição do => (a “aprovaçã0 "),
“alcançar argumentos” disposição do => (“administrar comentários "),
“datilografar” o => MENU_LOCAL_TASK,
“arquivar” o => “comment.admin.inc”,
);
$items [“comentário/supressão”] = disposição (
=> da “comentário do “título” supressão”,
“paginar => “comment_delete” da rechamada”,
“alcançar argumentos” disposição do => (“administrar comentários "),
“datilografar” o => MENU_CALLBACK,
“arquivar” o => “comment.admin.inc”,
);
$items [o “comentário/edita”] = disposição (
” o => “do “título edita o comentário”,
“paginar => “comment_edit” da rechamada”,
“alcançar argumentos” disposição do => (do “os comentários borne "),
“datilografar” o => MENU_CALLBACK,
“arquivar” o => “comment.pages.inc”,
);
$items [“comentário/reply/%node”] = disposição (
=> “resposta do “título” ao comentário”,
“paginar” => “da rechamada comment_reply”,
“paginar a disposição do => dos argumentos” (2),
“alcançar => “node_access” da rechamada”,
“alcançar disposição do => dos argumentos” (“vista”, 2),
“datilografar” o => MENU_CALLBACK,
“arquivar” o => “comment.pages.inc”,
);
$items do retorno;
}
/**
* Execução do hook_node_type ().
*
comment_node_type da função ($op, $info) {
$settings = disposição (
“comentário”,
“comment_default_mode”,
“comment_default_order”,
“comment_default_per_page”,
“comment_controls”,
“comment_anonymous”,
“comment_subject_field”,
“comment_preview”,
“comment_form_location”,
);
comutar ($op) {
encaixotar a “supressão”:
foreach ($settings como $setting) {
variable_del ($setting. “_”. $info->type);
}
ruptura;
}
}
/**
* Execução do hook_perm ().
*
comment_perm da função () {
disposição do retorno (o “acesso comenta”, “borne comenta”, “administra comentários”, do “comentários borne sem aprovaçã0 ");
}
/**
* Execução do hook_block ().
*
* Gera um bloco com os comentários os mais recentes.
*
comment_block da função ($op = “lista”, $delta = 0) {
se (lista do == de $op “") {
$blocks [0] [“informação”] = t (“comentários recentes ");
$blocks do retorno;
}
mais se (user_access do && da “opinião” do == de $op (do “comentários acesso ")) {
$block [“assunto”] = t (“comentários recentes ");
$block [“índice”] = tema (“comment_block ");
$block do retorno;
}
}
/**
* Encontrar um número de comentários recentes. Isto é feito em duas etapas.
* 1. encontram os nós de n (especific por $number) que têm o mais recente
* comentários. Isto é feito pelo node_comment_statistics de pergunta que tem
* um índice no last_comment_timestamp, e é assim uma pergunta rápida.
* 2. que carregam a informação da tabela dos comentários baseada nos nids encontrados
* em etapa 1.
*
* @param $number
* (opcional) o número máximo de comentários a encontrar.
* @return
* Uma disposição de comentário objeta cada um que contem um nid,
* assunto, cid, e timestamp, ou uma disposição vazia se não há nenhum recente
* comentários visíveis ao usuário atual.
*
função comment_get_recent ($number = 10) {
// seleciona os nós de $number (visíveis ao usuário atual) com mais
comentários recentes de //. Este está eficiente devido ao índice ligada
last_comment_timestamp de //.
$result = db_query_range (db_rewrite_sql (“nc.nid SELETO {node_comment_statistics} do nc ONDE ment_count de nc.com > 0 ORDENS por nc.last_comment_timestamp DESC”, do “nc "), 0, $number);
$nids = disposição ();
quando ($row = db_fetch_object ($result)) {
$nids [] = $row->nid;
}
$comments = disposição ();
se (! esvaziar ($nids)) {
// entre dos comentários nos nós selecionados na primeira pergunta,
// encontra os comentários os mais recentes de $number.
$result = db_query_range (“c.nid SELETOS, c.subject, c.cid, c.timestamp {comentários} de c INTERNO SE JUNTAM {nó} a n EM n.nid = c.nid ONDE c.nid DENTRO (”. implode (“,”, $nids) .") E n.status = 1 E ORDEM de c.status = de %d por c.cid DESC”, POR COMMENT_PUBLISHED, 0, $number);
quando ($comment = db_fetch_object ($result)) {
$comments [] = $comment;
}
}
$comments do retorno;
}
/**
* Calcular o número de página para o primeiro comentário novo.
*
* @param $num_comments
* Número de comentários.
* @param $new_replies
* Número de respostas novas.
* @param $node
* O primeiro nó novo do comentário.
* @return
* “page=X” se o número de página é maior de zero; corda vazia de outra maneira.
*
comment_new_page_count da função ($num_comments, $new_replies, $node) {
$comments_per_page = _comment_get_display_setting (“comments_per_page”, $node);
$mode = _comment_get_display_setting (“modalidade”, $node);
$order = _comment_get_display_setting (“sorte”, $node);
$pagenum = ZERO;
$flat = in_array ($mode, disposição (COMMENT_MODE_FLAT_COLLAPSED, COMMENT_MODE_FLAT_EXPANDED));
se (<= $comments_per_page de $num_comments || (== COMMENT_ORDER_NEWEST_FIRST do && $order de $flat)) {
// somente uma página dos comentários ou do primeiros liso do fórum e o mais novo.
O comentário novo de // primeiramente estará sempre na primeira página.
$pageno = 0;
}
mais {
se ($flat) {
Comentários do plano de // e os primeiros o mais velho.
$count = $num_comments - $new_replies;
}
mais {
// rosqueou comentários. Ver a documentação para o comment_render ().
se (== COMMENT_ORDER_NEWEST_FIRST de $order) {
O primeiro o mais novo de //: encontrar a última linha com comentário novo
$result = db_query (“(linha SELETA DE {comentários} ONDE nid = %d E status = 0 ORDENS PELA ORDEM do LIMITE de timestamp DESC %d) PELO LIMITE 1”, $node->nid, $new_replies da linha DESC);
$thread = db_result ($result);
$result_count = db_query (“CONTAGEM SELETA (*) DE {comentários} ONDE nid = %d E status = 0 E linha > “”. $thread. “” “, $node->nid);
}
mais {
O primeiro o mais velho de //: encontrar a primeira linha com comentário novo
$result = db_query (“(linha SELETA DE {comentários} ONDE nid = %d E status = 0 ORDENS PELA ORDEM do LIMITE de timestamp DESC %d) POR SUBSTRING (linha, 1, (COMPRIMENTO (linha) - 1)) LIMITAR 1”, $node->nid, $new_replies);
$thread = substr (db_result ($result), 0, -1);
$result_count = db_query (“CONTAGEM SELETA (*) DE {comentários} ONDE nid = %d E status = 0 E SUBSTRING (linha, 1, (COMPRIMENTO (linha) - 1)) < “”. $thread. “” “, $node->nid);
}
$count = db_result ($result_count);
}
$pageno = $count/$comments_per_page;
}
se (>= 1 de $pageno) {
$pagenum = “page=”. intval ($pageno);
}
$pagenum do retorno;
}
/**
* Retorna uma lista formatada de comentários recentes a ser indicados no bloco do comentário.
*
* @return
* O HTML da lista do comentário.
* @ingroup themeable
*
theme_comment_block da função () {
$items = disposição ();
foreach (comment_get_recent () como $comment) {
$items [] = l ($comment->subject, “nó”. $comment->nid, disposição (=> “comentário” do “fragmento”. $comment->cid)). “ ”. t (o “@time há”, disposição (=> do “@time” format_interval (tempo () - $comment->timestamp)));
}
se ($items) {
tema do retorno (“item_list”, $items);
}
}
/**
* Execução do hook_link ().
*
comment_link da função ($type, $node = ZERO, $teaser = FALSO) {
$links = disposição ();
se (&& $node->comment do “nó” do == de $type) {
se ($teaser) {
Página principal de //: indicar o número de comentários que foram afixados.
se (user_access (do “comentários acesso ")) {
$all = comment_num_all ($node->nid);
se ($all) {
$links [“comment_comments”] = disposição (
“título” => format_plural ($all, “1 comentário”, do “comentários @count "),
=> “node/$node->nid” do “href”,
“atribui” a disposição do => (“título” => t (o “salto ao primeiro comentário deste posting.")),
” o => “do “fragmento comenta”
);
$new = comment_num_new ($node->nid);
se ($new) {
$links [“comment_new_comments”] = disposição (
“título” => format_plural ($new, “1 comentário novo”, do “comentários novos @count "),
=> “node/$node->nid” do “href”,
comment_new_page_count do => da “pergunta” ($all, $new, $node),
“atribui” a disposição do => (“título” => t (o “salto ao primeiro comentário novo deste posting.")),
” => “do “fragmento novo”
);
}
}
mais {
se (== COMMENT_NODE_READ_WRITE de $node->comment) {
se (user_access (do “comentários borne ")) {
$links [“comment_add”] = disposição (
“título” => t (“adicionar o comentário novo "),
=> “comentário do “href”/reply/$node->nid”,
“atribui” a disposição do => (“título” => t (“adicionar um comentário novo a este page.")),
“fragmentar” o => “comentar-formulário”
);
}
mais {
$links [“comment_forbidden”] [“título”] = tema (“comment_post_forbidden”, $node);
}
}
}
}
}
mais {
Página do nó de //: adicionar do “uma ligação do comentário borne” se é permitido ao usuário a
o borne de // comenta, se este nó não é de leitura apenas, e se o formulário de comentário não está mostrado já
se (== COMMENT_NODE_READ_WRITE de $node->comment) {
se (user_access (do “comentários borne ")) {
se (variable_get (“comment_form_location_”. $NODE->TYPE, == COMMENT_FORM_SEPARATE_PAGE DE COMMENT_FORM_SEPARATE_PAGE)) {
$links [“comment_add”] = disposição (
“título” => t (“adicionar o comentário novo "),
=> “comentário do “href”/reply/$node->nid”,
“atribui” a disposição do => (“título” => t (“compartilhar de seus pensamentos e opiniões relativos a este posting.")),
“fragmentar” o => “comentar-formulário”
);
}
}
mais {
$links [“comment_forbidden”] [“título”] = tema (“comment_post_forbidden”, $node);
}
}
}
}
se (comentário do == de $type “") {
$links = comment_links ($node, $teaser);
}
se (isset ($links [“comment_forbidden”])) {
$links [“comment_forbidden”] [“HTML”] = RETIFICAM;
}
retornar $links;
}
/**
* Execução do hook_form_alter ().
*
comment_form_alter da função (&$form, $form_state, $form_id) {
se (isset do && do “node_type_form” do == de $form_id ($form [“identidade”] [“tipo”])) {
$form [“comentário”] = disposição (
=> “fieldset” do “#type”,
“#title” => t (do “ajustes comentário "),
=> “#collapsible” VERDADEIRO,
=> “#collapsed” VERDADEIRO,
);
$form [“comentário”] [“comentário”] = disposição (
” o => “do “#type transmite por rádio”,
“#title” => t (do “ajuste do comentário defeito "),
variable_get do => do “#default_value” (“comment_”. >type de $form [“#node_type”] -, COMMENT_NODE_READ_WRITE),
do => dos “#options” (t (“incapacitou "), t disposição (“lido somente "), t (“Read/Write ")),
“#description” => t (os “usuários com a permissão do administer comments poderão cancelar este setting."),
);
$form [“comentário”] [“comment_default_mode”] = disposição (
” o => “do “#type transmite por rádio”,
“#title” => t (do “modalidade de exposição defeito "),
variable_get do => do “#default_value” (“comment_default_mode_”. >type de $form [“#node_type”] -, COMMENT_MODE_THREADED_EXPANDED),
_comment_get_modes do => dos “#options” (),
“#description” => t (“a opinião do defeito para comentários. As vistas expandidas indicam o corpo do comentário. As vistas rosqueadas mantêm respostas together."),
);
$form [“comentário”] [“comment_default_order”] = disposição (
” o => “do “#type transmite por rádio”,
“#title” => t (do “ordem da exposição defeito "),
variable_get do => do “#default_value” (“comment_default_order_”. >type de $form [“#node_type”] -, COMMENT_ORDER_NEWEST_FIRST),
_comment_get_orders do => dos “#options” (),
“#description” => t (“o defeito que classifica para usuários novos e usuários anónimos ao ver comenta. Estes usuários podem mudar sua opinião using o painel de controle do comentário. Para usuários registados, esta mudança é recordada como um usuário persistente preference."),
);
$form [“comentário”] [“comment_default_per_page”] = disposição (
” o => “do “#type seleciona”,
“#title” => t (o “defeito comenta por a página "),
variable_get do => do “#default_value” (“comment_default_per_page_”. >type de $form [“#node_type”] -, 50),
_comment_per_page do => dos “#options” (),
“#description” => t (do “número defeito dos comentários para cada página: mais comentários são distribuídos em diverso pages."),
);
$form [“comentário”] [“comment_controls”] = disposição (
” o => “do “#type transmite por rádio”,
“#title” => t (do “controles comentário "),
variable_get do => do “#default_value” (“comment_controls_”. >type de $form [“#node_type”] -, COMMENT_CONTROLS_HIDDEN),
disposição do => dos “#options” (
t (“exposição acima dos comentários "),
t (“exposição abaixo dos comentários "),
t (“exposição acima e abaixo dos comentários "),
t (“não faz a exposição ")),
“#description” => t (“posição da caixa de controles do comentário. Os controles do comentário deixaram o usuário mudar a modalidade de exposição do defeito e indicar uma ordem de comments."),
);
$form [“comentário”] [“comment_anonymous”] = disposição (
” o => “do “#type transmite por rádio”,
“#title” => t (“comentário anónimo "),
variable_get do => do “#default_value” (“comment_anonymous_”. >type de $form [“#node_type”] -, COMMENT_ANONYMOUS_MAYNOT_CONTACT),
disposição do => dos “#options” (
=> t de COMMENT_ANONYMOUS_MAYNOT_CONTACT (“os posteres anónimos não podem incorporar sua informação de contato "),
=> t de COMMENT_ANONYMOUS_MAY_CONTACT (“os posteres anónimos podem sair de sua informação de contato "),
=> t de COMMENT_ANONYMOUS_MUST_CONTACT (“os posteres anónimos devem sair de sua informação de contato ")),
“#description” => t (“esta opção é permitida quando os usuários anónimos tiverem a permissão afixar comentários >permissions page " do @url nos " do href= do (“admin/usuário/permissões”, disposição (o” => ““do fragmento módulo-comenta ")))),
);
se (! user_access (o “borne comenta”, o drupal_anonymous_user ())) {
$form [“comentário”] [“comment_anonymous”] [“#disabled”] = RETIFICAR;
}
$form [“comentário”] [“comment_subject_field”] = disposição (
” o => “do “#type transmite por rádio”,
“#title” => t (do “campo temático comentário "),
variable_get do => do “#default_value” (“comment_subject_field_”. >type de $form [“#node_type”] -, 1),
do => dos “#options” (t disposição (“incapacitou "), t (“permitido ")),
“#description” => t (“podem os usuários fornecer um assunto original para seus comentários? "),
);
$form [“comentário”] [“comment_preview”] = disposição (
” o => “do “#type transmite por rádio”,
“#title” => t (da “comentário inspeção prévia "),
variable_get do => do “#default_value” (“comment_preview_”. >type de $form [“#node_type”] -, COMMENT_PREVIEW_REQUIRED),
do => dos “#options” (t disposição (“opcional "), t (“exigiu ")),
=> t do “#description” (“forças um usuário para olhar seu comentário estalando “em uma inspeção prévia” tecla antes que puderem realmente adicionar o comentário”),
);
$form [“comentário”] [“comment_form_location”] = disposição (
” o => “do “#type transmite por rádio”,
“#title” => t (“posição do formulário da submissão do comentário "),
variable_get do => do “#default_value” (“comment_form_location_”. >type de $form [“#node_type”] -, COMMENT_FORM_SEPARATE_PAGE),
do => dos “#options” (t disposição (“exposição na página separada "), t (“exposição abaixo do borne ou dos comentários ")),
);
}
isset do && do elseif (isset ($form [“tipo”]) ($form [“#node”])) {
se ($form [“tipo”] [“#value”]. == $form_id do “_node_form”) {
$node = $form [“#node”];
$form [“comment_settings”] = disposição (
=> “fieldset” do “#type”,
“#access” user_access do => (“administrar comentários "),
“#title” => t (do “ajustes comentário "),
=> “#collapsible” VERDADEIRO,
=> “#collapsed” VERDADEIRO,
=> 30 do “#weight”,
);
$form [“comment_settings”] [“comentário”] = disposição (
” o => “do “#type transmite por rádio”,
“#parents” disposição do => (“comentário "),
=> $node->comment do “#default_value”,
do => dos “#options” (t (“incapacitou "), t disposição (“lido somente "), t (“Read/Write ")),
);
}
}
}
/**
* Execução do hook_nodeapi ().
*
comment_nodeapi da função (&$node, $op, $arg = 0) {
comutar ($op) {
encaixotar a “carga”:
retornar db_fetch_array (db_query (“last_comment_timestamp SELETO, last_comment_name, comment_count DE {node_comment_statistics} ONDE nid = %d”, $node->nid));
ruptura;
o caso “prepara-se”:
se (! isset ($node->comment)) {
$node->comment = variable_get (“comment_$node->type”, COMMENT_NODE_READ_WRITE);
}
ruptura;
caso “inserção”:
db_query (a “INSERÇÃO EM {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) AVALIA (%d, %d, ZERO, %d, 0)”, $node->nid, $node->changed, $node->uid);
ruptura;
caso “supressão”:
db_query (“SUPRESSÃO DE {comentários} ONDE nid = %d”, $node->nid);
db_query (“SUPRESSÃO DE {node_comment_statistics} ONDE nid = %d”, $node->nid);
ruptura;
caso da “índice atualização”:
$text = '';
$comments = db_query (“assunto SELETO, comentário, formato DE {comentários} ONDE nid = %d E status = %d”, $node->nid, COMMENT_PUBLISHED);
quando ($comment = db_fetch_object ($comments)) {
$text. = “”. check_plain ($comment->subject). “”. check_markup ($comment->comment, $comment->format, FALSOS);
}
$text do retorno;
caso da “resultado busca”:
$comments = db_result (db_query (“comment_count SELETO DE {node_comment_statistics} ONDE nid = %d”, $node->nid));
format_plural do retorno ($comments, “1 comentário”, do “comentários @count ");
caso dos “artigo rss”:
se ($node->comment! = COMMENT_NODE_DISABLED) {
disposição do retorno (disposição (URL do => do “valor”” do => “da “chave comenta”, (“nó”. $node->nid, disposição (” o => “do “fragmento comenta”, => “absoluto” VERDADEIRO))));
}
mais {
disposição do retorno ();
}
}
}
/**
* Execução do hook_user ().
*
comment_user da função ($type, $edit, &$user, $category = ZERO) {
se (supressão do == de $type “") {
db_query (a “ATUALIZAÇÃO {comentários} AJUSTOU o uid = 0 ONDE uid = %d”, $user->uid);
db_query (a “ATUALIZAÇÃO {node_comment_statistics} AJUSTOU o last_comment_uid = 0 ONDE last_comment_uid = %d”, $user->uid);
}
}
/**
* Este é *not* um a execução dos hook_access (). Esta função é chamada
* para determinar se o usuário atual tem o acesso a um comentário particular.
*
* Os usuários autenticados podem editar seus comentários porque não têm sido por muito tempo
* respondido a. Isto impede que os povos mudem ou revisem seus
* indicações baseadas nas respostas a seus bornes.
*
* @param $op
* A operação que deve ser executada no comentário. Somente “editar” é reconhecido agora.
* @param $comment
* O objeto do comentário.
* @return
* RETIFICAR se o usuário atual tem acces ao comentário, FALSO de outra maneira.
*
comment_access da função ($op, $comment) {
$user global;
se (o == de $op “edita ") {
retornar (== 0 dos comment_num_replies do && do == $comment->uid do && $user->uid de $user->uid ($comment->cid)) || user_access (“administrar comentários ");
}
}
/**
* Uma função simples do ajudante.
*
* @return
* Os 0th e øs componentes do trajeto juntaram-se por um corte.
*
comment_node_url da função () {
arg do retorno (0). “/”. arg (1);
}
/**
* Aceita uma submissão do índice novo ou mudado do comentário.
*
* @param $edit
* Uma disposição do comentário.
*
* @return
* Se o comentário é conservado com sucesso a identificação do comentário está retornada. Se o comentário
* não é conservado, FALSO é retornado.
*
comment_save da função ($edit) {
$user global;
se (&& dos user_access (do “comentários borne ") (user_access (“administrar comentários ") || == COMMENT_NODE_READ_WRITE do node_comment_mode ($edit [“nid”]))) {
se (! form_get_errors ()) {
disposição de $edit += (
“correio” => '',
“homepage” => '',
“nome” => '',
“status” user_access do => (o “borne comenta sem aprovaçã0 ")? COMMENT_PUBLISHED: COMMENT_NOT_PUBLISHED,
);
se ($edit [“cid”]) {
Atualização de // o comentário na base de dados.
db_query (a “ATUALIZAÇÃO {comentários} AJUSTOU o status = o %d, timestamp = %d, assunto = “%s”, comentário = “%s”, formato = %d, uid = %d, nome = “%s”, correio = “%s”, homepage = “%s” ONDE cid = %d”, $edit [“status”], $edit [“timestamp”], $edit [“assunto”], $edit [“comentário”], $edit [“formato”], $edit [“uid”], $edit [“nome”], $edit [“correio”], $edit [o “homepage”], $edit [“cid”]);
// permite que os módulos respondam à atualização de um comentário.
comment_invoke_comment ($edit, “atualização ");
// adiciona uma entrada ao registro do cão de guarda.
cão de guarda (“índice”, “comentário: %subject atualizado. $edit [“nid”], disposição (=> “comentário” do “fragmento”. $edit [“cid”])));
}
mais {
// adiciona o comentário à base de dados.
// aqui nós estamos construindo o campo da linha. Ver a documentação para
comment_render de // ().
se (== 0 de $edit [“pid”]) {
// isto é um comentário sem o comentário do pai (profundidade 0): nós começamos
// recuperando o nível máximo da linha.
$max = db_result (db_query (“max SELETO (linha) DE {comentários} ONDE nid = %d”, $edit [“nid”]));
Tira de // “/” da extremidade da linha.
$max = rtrim ($max, “/");
// finalmente, constrói o campo da linha para este comentário novo.
$thread = int2vancode (vancode2int ($max) + 1). “/”;
}
mais {
// isto é comentário com um comentário do pai: nós aumentamos
// a parte do valor da linha na profundidade apropriada.
// começ o comentário do pai:
$parent = _comment_load ($edit [“pid”]);
Tira de // “/” da extremidade da linha do pai.
$parent->thread = rtrim (da corda) ((corda) $parent->thread, “/");
// começ o valor máximo na linha do _this_.
$max = db_result (db_query (“max SELETO (linha) DE {comentários} ONDE a linha GOSTA “de %s.%%” E de nid = de %d”, $parent->thread, $edit [“nid”]));
se (== de $max '') {
Primeira criança de // deste pai.
$thread = $parent->thread. “.”. int2vancode (0). “/”;
}
mais {
Tira de // “/” na extremidade da linha.
$max = rtrim ($max, “/");
// que nós precisamos de começ o valor na profundidade correta.
$parts = explodem (“. ”, $max);
$parent_depth = contagem (explodir (“. ”, $parent->thread));
$last = $parts [$parent_depth];
// finalmente, constrói o campo da linha para este comentário novo.
$thread = $parent->thread. “.”. int2vancode (vancode2int ($last) + 1). “/”;
}
}
se (esvaziar ($edit [o “timestamp”])) {
$edit [“timestamp”] = tempo ();
}
se (=== $user->uid) {// “===” de $edit [“uid”] porque nós queremos modificar demasiado usuários anónimos
$edit [“nome”] = $user->name;
}
db_query (a “INSERÇÃO EM {comentários} (nid, pid, uid, assunto, comentário, formato, hostname, timestamp, status, linha, nome, correio, homepage) AVALIA (%d, %d, %d, “%s”, “%s”, %d, “%s”, %d, %d, “%s”, “%s”, “%s”, “%s ")”, $edit [“nid”], $edit [“pid”], $edit [“uid”], $edit [“assunto”], $edit [“comentário”], $edit [“o formato”], ip_address (), $edit [“timestamp”], $edit [“status”], $thread, $edit [“nome”], $edit [“correio”], $edit [“homepage”]);
$edit [“cid”] = db_last_insert_id (“comentários”, “cid ");
// diz os outros módulos que um comentário novo foi submetido.
comment_invoke_comment ($edit, “inserção ");
// adiciona uma entrada ao registro do cão de guarda.
cão de guarda (“índice”, “comentário: %subject adicionado. $edit [“nid”], disposição (=> “comentário” do “fragmento”. $edit [“cid”])));
}
_comment_update_node_statistics ($edit [“nid”]);
O espaço livre de // o esconderijo assim que um usuário anónimo pode ver seu comentário que está sendo adicionado.
cache_clear_all ();
// explica a fila da aprovaçã0 caso necessário, e então
// reorienta o usuário ao nó que está comentando sobre.
se (== COMMENT_NOT_PUBLISHED de $edit [“status”]) {
drupal_set_message (t (“seu comentário foi enfileirado para a moderação por administradores do local e será publicado após approval."));
}
mais {
comment_invoke_comment ($edit, “publicam ");
}
$edit do retorno [“cid”];
}
mais {
FALSO do retorno;
}
}
mais {
cão de guarda (“índice”, “comentário: o comentário desautorizado submeteu-se ou comentário submetido a um borne fechado %subject. ”, disposição (“%subject” => $edit [“assunto”]), WATCHDOG_WARNING);
drupal_set_message (t (“comentário: o comentário desautorizado submeteu-se ou comentário submetido a um borne fechado %subject. ”, disposição (“de %subject” => $edit [“do assunto”])), “erro ");
FALSO do retorno;
}
}
/**
* Ligações do comando da configuração para um comentário (por exemplo \ editar, responder, supressão) no que diz respeito às permissões de acesso atuais de usuário.
*
* @param $comment
* O comentário a que as ligações serão relacionadas.
* @param $return
* Não usado.
* @return
* Uma disposição associativa que contem as ligações.
*
comment_links da função ($comment, $return = 1) {
$user global;
$links = disposição ();
// se nós estamos vendo apenas este comentário, nós lig de volta ao nó.
se ($return) {
$links [“comment_parent”] = disposição (
“título” => t (“pai "),
comment_node_url do => do “href” (),
=> “comment-$comment->cid” do “fragmento”
);
}
se (== COMMENT_NODE_READ_WRITE do node_comment_mode ($comment->nid)) {
se (user_access do && dos user_access (“administrar comentários ") (“comentários do borne ")) {
$links [“comment_delete”] = disposição (
“título” => t (“supressão "),
=> “comentário do “href”/delete/$comment->cid”
);
$links [“comment_edit”] = disposição (
“título” => t (“editar "),
=> “comentário do “href”/edit/$comment->cid”
);
$links [“comment_reply”] = disposição (
“título” => t (“resposta "),
=> “comentário do “href”/reply/$comment->nid/$comment->cid”
);
}
mais se (user_access (do “comentários borne ")) {
se (comment_access (“editar”, $comment)) {
$links [“comment_edit”] = disposição (
“título” => t (“editar "),
=> “comentário do “href”/edit/$comment->cid”
);
}
$links [“comment_reply”] = disposição (
“título” => t (“resposta "),
=> “comentário do “href”/reply/$comment->nid/$comment->cid”
);
}
mais {
$node = node_load ($comment->nid);
$links [“comment_forbidden”] [“título”] = tema (“comment_post_forbidden”, $node);
}
}
retornar $links;
}
/**
* Rende comentários.
*
* @param $node
* O nó que o comentário precisa de render.
* @param $cid
*, Somente um o comentário opcional, se dado é rendido.
*
* À exposição rosqueada comenta na ordem que correta nós mantemos um campo da “linha”
* e ordem por esse valor. Este campo mantem estes dados dentro
* uma maneira que seja fácil de atualizar e conveniente se usar.
*
* Começos de um valor da “linha” em “1”. Se nós adicionamos uma criança (a) a este comentário,
* nós atribuímos-lhe uma “linha” = “1.1”. Uma criança de (a) terá “1.1.1”. Em seguida
* o irmão de (a) começ “1.2”. O irmão seguinte do pai de (a) começ
* “2” e assim por diante.
*
* Anotar antes de mais nada que o campo da linha armazena a profundidade do comentário:
* a profundidade 0 será “X”, profundidade 1 “X.X”, profundidade 2 “X.X.X”, etc.
*
* Para começ agora a direita requisitando, considerar este exemplo:
*
* 1
* 1.1
* 1.1.1
* 1.2
* 2
*
* Se nós “REQUISITAMOS pela linha ASC” nós começ o resultado acima, e este é
* ordem natural classificada em o tempo. Entretanto, se nós “REQUISITAMOS pela linha DESC”
* nós começ:
*
* 2
* 1.2
* 1.1.1
* 1.1
* 1
*
* Claramente, esta não é uma maneira natural de ver uma linha, e os usuários começ
* confuso. A ordem natural para mostrar uma linha pelo desc do tempo seria:
*
* 2
* 1
* 1.2
* 1.1
* 1.1.1
*
* que é o que nós já fizemos antes do remendo padrão do pager. Para conseguir
* isto nós adicionamos simplesmente “/” no fim de cada valor da “linha”. Esta maneira para fora
* os campos da linha olharão como descrito abaixo:
*
* 1
* 1.1/
* 1.1.1/
* 1.2/
* 2
*
* nós adicionamos “/” desde que este carvão animal está, no ASCII, mais altamente do que cada número, assim se
* agora nós “REQUISITAMOS pela linha DESC” que nós começ a ordem correta. Entretanto isto
* estragar requisitar reverso, “ORDEM pela linha ASC” -- aqui, nós não precisamos
* para considerar “de arrasto/” assim nós usamos um substring somente.
*
comment_render da função ($node, $cid = 0) {
$user global;
$output = '';
se (user_access (do “comentários acesso ")) {
// Pre-process variáveis.
$nid = $node->nid;
se (esvaziar ($nid)) {
$nid = 0;
}
$mode = _comment_get_display_setting (“modalidade”, $node);
$order = _comment_get_display_setting (“sorte”, $node);
$comments_per_page = _comment_get_display_setting (“comments_per_page”, $node);
se (&& de $cid is_numeric ($cid)) {
Opinião do comentário de // única.
$query = “c.cid SELETO, c.pid, c.nid, c.subject, c.com ment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name COMO o registered_name, u.signature, u.picture, u.data, c.status {comentários} de c INTERNO JUNTAM-SE {usuários} a u EM c.uid = u.uid ONDE c.cid = %d”;
$query_args = disposição ($cid);
se (! user_access (“administrar comentários ")) {
$query. = “E c.status = %d”;
$query_args [] = COMMENT_PUBLISHED;
}
$query = db_rewrite_sql ($query, “c”, “cid ");
$result = db_query ($query, $query_args);
se ($comment = db_fetch_object ($result)) {
$comment->name = $comment->uid? $comment->registered_name: $comment->name;
$links = module_invoke_all (“ligação”, “comentário”, $comment, 1);
drupal_alter (“ligação”, $links, $node);
$output. = tema (“comment_view”, $comment, $node, $links);
}
}
mais {
Opinião múltipla do comentário de //
$query_count = “CONTAGEM SELETA (*) {comentários} de c ONDE c.nid = %d”;
$query = “c.cid SELETO como o cid, c.pid, c.nid, c.subject, c.com ment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name COMO o registered_name, u.signature, u.picture, u.data, c.thread, c.status {comentários} de c INTERNO JUNTAM-SE {usuários} a u EM c.uid = u.uid ONDE c.nid = %d”;
$query_args = disposição ($nid);
se (! user_access (“administrar comentários ")) {
$query. = “E c.status = %d”;
$query_count. = “E c.status = %d”;
$query_args [] = COMMENT_PUBLISHED;
}
se (== COMMENT_ORDER_NEWEST_FIRST de $order) {
se (== COMMENT_MODE_FLAT_COLLAPSED de $mode || == COMMENT_MODE_FLAT_EXPANDED de $mode) {
$query. = “ORDEM por c.cid DESC”;
}
mais {
$query. = “ORDEM por c.thread DESC”;
}
}
mais se (== COMMENT_ORDER_OLDEST_FIRST de $order) {
se (== COMMENT_MODE_FLAT_COLLAPSED de $mode || == COMMENT_MODE_FLAT_EXPANDED de $mode) {
$query. = “ORDEM por c.cid”;
}
mais {
// vê o comentário acima. A análise revela que esta não custa demasiado
// muito. Escala muito muito melhor do que tendo o comentário do todo
estrutura de //.
$query. = “ORDEM POR SUBSTRING (c.thread, 1, (COMPRIMENTO (c.thread) - 1))”;
}
}
$query = db_rewrite_sql ($query, “c”, “cid ");
$query_count = db_rewrite_sql ($query_count, “c”, “cid ");
Começo de // um formulário, para o uso com controle do comentário.
$result = pager_query ($query, $comments_per_page, 0, $query_count, $query_args);
$divs = 0;
$num_rows = FALSO;
$comments = '';
drupal_add_css (drupal_get_path (“módulo”, “comentário "). “/comment.css ");
quando ($comment = db_fetch_object ($result)) {
$comment = drupal_unpack ($comment);
$comment->name = $comment->uid? $comment->registered_name: $comment->name;
$comment->depth = contagem (explodir (“. ”, $comment->thread)) - 1;
se (== COMMENT_MODE_THREADED_COLLAPSED de $mode || == COMMENT_MODE_THREADED_EXPANDED de $mode) {
se ($comment->depth > $divs) {
$divs++;
$comments. = do “class= ”;
}
mais {
quando ($comment->depth < $divs) {
$divs--;
$comments. = “ ”;
}
}
}
se (== COMMENT_MODE_FLAT_COLLAPSED de $mode) {
$comments. = tema (“comment_flat_collapsed”, $comment, $node);
}
mais se (== COMMENT_MODE_FLAT_EXPANDED de $mode) {
$comments. = tema (“comment_flat_expanded”, $comment, $node);
}
mais se (== COMMENT_MODE_THREADED_COLLAPSED de $mode) {
$comments. = tema (“comment_thread_collapsed”, $comment, $node);
}
mais se (== COMMENT_MODE_THREADED_EXPANDED de $mode) {
$comments. = tema (“comment_thread_expanded”, $comment, $node);
}
$num_rows = RETIFICAM;
}
quando ($divs-- > 0) {
$comments. = “”;
}
$comment_controls = variable_get (“comment_controls_”. $node->type, COMMENT_CONTROLS_HIDDEN);
se (&& de $num_rows (== COMMENT_CONTROLS_ABOVE de $comment_controls || == COMMENT_CONTROLS_ABOVE_BELOW de $comment_controls)) {
$output. = drupal_get_form (“comment_controls”, $mode, $order, $comments_per_page);
}
$output. = $comments;
$output. = tema (“pager”, ZERO, $comments_per_page, 0);
se (&& de $num_rows (== COMMENT_CONTROLS_BELOW de $comment_controls || == COMMENT_CONTROLS_ABOVE_BELOW de $comment_controls)) {
$output. = drupal_get_form (“comment_controls”, $mode, $order, $comments_per_page);
}
}
// se permitido, mostra o formulário de comentário novo se não está sendo indicado já.
$reply = == “resposta” do arg do && do “comentário” do == do arg (0) (1);
se (&& do == COMMENT_NODE_READ_WRITE do node_comment_mode do && dos user_access (do “comentários borne ") ($nid) (variable_get (“comment_form_location_”. $NODE->TYPE, DE == COMMENT_FORM_BELOW DE COMMENT_FORM_SEPARATE_PAGE) &&)! $reply) {
$output. = comment_form_box (disposição (“nid” => $nid), t (do “comentário novo borne "));
}
$output = tema (“comment_wrapper”, $output, $node);
}
$output do retorno;
}
/**
* Operações do comentário. Nós oferecemos operações diferentes da atualização dependendo de
* que comentam página que da administração nós somos sobre.
*
* @param $action
* A página da administração do comentário.
* @return
* Uma disposição associativa que contem as operações oferecidas.
*
comment_operations da função ($action = ZERO) {
se (o == de $action “publica ") {
$operations = disposição (
“publicar” a disposição do => (t (“publicar os comentários selecionados "), “ATUALIZAÇÃO {comentários} AJUSTOU o status =”. COMMENT_PUBLISHED. “ONDE cid = %d "),
“suprimir” da disposição do => (t (“suprimir dos comentários selecionados "), '')
);
}
mais se (unpublish do == de $action “") {
$operations = disposição (
disposição do => do “unpublish” (t (“Unpublish os comentários selecionados "), “ATUALIZAÇÃO {comentários} AJUSTOU o status =”. COMMENT_NOT_PUBLISHED. “ONDE cid = %d "),
“supressão” disposição do => (t (“suprimir dos comentários selecionados "), '')
);
}
mais {
$operations = disposição (
“publicar” a disposição do => (t (“publicar os comentários selecionados "), “ATUALIZAÇÃO {comentários} AJUSTOU o status =”. COMMENT_PUBLISHED. “ONDE cid = %d "),
disposição do => do “unpublish” (t (“Unpublish os comentários selecionados "), “ATUALIZAÇÃO {comentários} AJUSTOU o status =”. COMMENT_NOT_PUBLISHED. “ONDE cid = %d "),
“supressão” disposição do => (t (“suprimir dos comentários selecionados "), '')
);
}
$operations do retorno;
}
/**
* Funções variadas: ajudantes, privates, história
*
/**
* Carregar o comentário inteiro pelo cid.
*
* @param $cid
* A identificação de identificação do comentário
* @return
* O objeto do comentário.
*
_comment_load da função ($cid) {
db_fetch_object do retorno (db_query (“SELETO * DE {comentários} ONDE cid = %d”, $cid));
}
/**
* Começ a contagem do comentário para um nó.
*
* @param $nid
* A identificação do nó
* @return
* A contagem do comentário.
*
comment_num_all da função ($nid) {
$cache de estática;
se (! isset ($cache [$nid])) {
$cache [$nid] = db_result (db_query (“comment_count SELETO DE {node_comment_statistics} ONDE nid = %d”, $nid));
}
$cache do retorno [$nid];
}
/**
* Começ a contagem das respostas para um comentário.
*
* @param $pid
* A identificação do comentário
* @return
* A contagem das respostas.
*
comment_num_replies da função ($pid) {
$cache de estática;
se (! isset ($cache [$pid])) {
$cache [$pid] = db_result (db_query (“CONTAGEM SELETA (cid) DE {comentários} ONDE pid = %d E status = %d”, $pid, COMMENT_PUBLISHED));
}
$cache do retorno [$pid];
}
/**
* Começ o número de comentários novos para o usuário atual e o nó especific.
*
* @param $nid
* nó-identificação para contar comentários para
* @param $timestamp
* hora de contar de (defeitos à época do último acesso de usuário
* ao nó)
*
comment_num_new da função ($nid, $timestamp = 0) {
$user global;
se ($user->uid) {
// recupera o timestamp em que o usuário atual viu por último
// especific o nó.
se (! $timestamp) {
$timestamp = node_last_viewed ($nid);
}
$timestamp = ($timestamp > NODE_NEW_LIMIT? $timestamp: NODE_NEW_LIMIT);
Uso de // o timestamp recuperar o número de comentários novos.
$result = db_result (db_query (“a CONTAGEM SELETA (c.cid) {nó} de n INTERNO SE JUNTA {comentários} a c EM n.nid = c.nid ONDE n.nid = %d E timestamp > %d E c.status = %d”, $nid, $timestamp, COMMENT_PUBLISHED));
$result do retorno;
}
mais {
retorno 0;
}
}
/**
* Validar dados do comentário.
*
* @param $edit
* Um containig associativo da disposição os dados do comentário.
* @return
* O $edit original.
*
comment_validate da função ($edit) {
$user global;
// invoca outros alimentadores da validação
comment_invoke_comment ($edit, “validam ");
se (isset ($edit [“data”])) {
// até à data de PHP 5.1.0, strtotime retorna FALSO em cima da falha em vez de -1.
se (strtotime ($edit [“data”]) <= 0) {
form_set_error (“data”, t (“você tem que especific um date.") válido);
}
}
se (isset ($edit [“autor”]) &&! $account = user_load (disposição (=> $edit do “nome” [“autor”]))) {
form_set_error (“autor”, t (“você tem que especific um author.") válido);
}
Validez da verificação de // do nome, do correio e do homepage (se dado)
se (! $user->uid || isset ($edit [“is_anonymous”])) {
$node = node_load ($edit [“nid”]);
se (variable_get (“comment_anonymous_”. $NODE->TYPE, COMMENT_ANONYMOUS_MAYNOT_CONTACT) > COMMENT_ANONYMOUS_MAYNOT_CONTACT) {
se ($edit [“nome”]) {
$taken = db_result (db_query (“SELECIONAR A CONTAGEM (uid) DE {usuários} ONDE MAIS BAIXO (nome) = “%s””, $edit [o “nome”]));
se ($taken! = 0) {
form_set_error (“nome”, t (“o nome que você se usou pertence a um user.") registado);
}
}
mais se (variable_get (“comment_anonymous_”. $NODE->TYPE, == COMMENT_ANONYMOUS_MUST_CONTACT DE COMMENT_ANONYMOUS_MAYNOT_CONTACT)) {
form_set_error (“nome”, t (“você tem que deixar seu name."));
}
se ($edit [“correio”]) {
se (! valid_email_address ($edit [“correio”])) {
form_set_error (“correio”, t (“o email address que você especific é invalid."));
}
}
mais se (variable_get (“comment_anonymous_”. $NODE->TYPE, == COMMENT_ANONYMOUS_MUST_CONTACT DE COMMENT_ANONYMOUS_MAYNOT_CONTACT)) {
form_set_error (“correio”, t (“você tem que deixar um email address ."));
}
se ($edit [“homepage”]) {
se (! valid_url ($edit [o “homepage”], RETIFICAM)) {
form_set_error (“homepage”, t (“O URL de seu homepage é inválido. Recordar que deve ser inteiramente - qualificado, isto é do do formulário http://example.com/directory ."));
}
}
}
}
retornar $edit;
}
/**
* Gerar o formulário de comentário básico, porque adição a um nó ou a uma exposição em uma página separada.
*
* @param $title
* Não usado.
* formulários do @ingroup
* comment_form_validate do @see ()
* comment_form_submit do @see ()
*
comment_form da função (&$form_state, $edit, $title = ZERO) {
$user global;
$op = isset ($_POST [“op”])? $_POST [“op”]: '';
$node = node_load ($edit [“nid”]);
se (! variable_get do && de $user->uid (“comment_anonymous_”. $node->type, COMMENT_ANONYMOUS_MAYNOT_CONTACT)! = COMMENT_ANONYMOUS_MAYNOT_CONTACT) {
drupal_add_js (drupal_get_path (“módulo”, “comentário "). “/comment.js ");
}
disposição de $edit += (“do correio” do “nome => '', “homepage” => ''” do => '',);
se ($user->uid) {
se (! ($edit [“cid”]) user_access vazios do && (“administrar comentários ")) {
se (! esvaziar ($edit [“autor”])) {
$author = $edit [“autor”];
}
elseif (! esvaziar ($edit [“nome”])) {
$author = $edit [“nome”];
}
mais {
$author = $edit [“registered_name”];
}
se (! esvaziar ($edit [“status”])) {
$status = $edit [“status”];
}
mais {
$status = 0;
}
se (! esvaziar ($edit [“data”])) {
$date = $edit [“data”];
}
mais {
$date = format_date ($edit [“timestamp”], “costume”, “Y-m-d H: i O ");
}
$form [“admin”] = disposição (
=> “fieldset” do “#type”,
“#title” => t (a “administração "),
=> “#collapsible” VERDADEIRO,
=> “#collapsed” VERDADEIRO,
=> -2 do “#weight”,
);
se ($edit [“registered_name”]! = '') {
// o comentário é por um usuário registado
$form [“admin”] [“autor”] = disposição (
=> “textfield” do “#type”,
“#title” => t (“sido o autor perto "),
“#size” o => 30,
=> 60 do “#maxlength”,
=> “usuário/autocomplete” do “#autocomplete_path”,
=> $author do “#default_value”,
=> -1 do “#weight”,
);
}
mais {
// o comentário é por um usuário anónimo
$form [“is_anonymous”] = disposição (
=> “valor” do “#type”,
=> do “#value” VERDADEIRO,
);
$form [“admin”] [“nome”] = disposição (
=> “textfield” do “#type”,
“#title” => t (“sido o autor perto "),
“#size” o => 30,
=> 60 do “#maxlength”,
=> $author do “#default_value”,
=> -1 do “#weight”,
);
$form [“admin”] [“correio”] = disposição (
=> “textfield” do “#type”,
“#title” => t (“email "),
=> 64 do “#maxlength”,
“#size” o => 30,
=> $edit do “#default_value” [“correio”],
“#description” => t (“o índice deste campo é mantido confidencial e não será mostrado publicly."),
);
$form [“admin”] [“homepage”] = disposição (
=> “textfield” do “#type”,
“#title” => t (“homepage "),
=> 255 do “#maxlength”,
“#size” o => 30,
=> $edit do “#default_value” [“homepage”],
);
}
}
mais {
$form [=> t do “#title”” do => “do “#type do “_author”] = disposição (artigo”, (“seu nome "), tema => “do #value do” (“username”, $user)
);
$form [“autor”] = disposição (#value”” do => do “#type do “=> $user->name do “valor”,);
}
}
mais se (variable_get (“comment_anonymous_”. $NODE->TYPE, == COMMENT_ANONYMOUS_MAY_CONTACT DE COMMENT_ANONYMOUS_MAYNOT_CONTACT)) {
$form [=> t do “#title”” do => o “do “#type do “nome”] = disposição (textfield”, (“seu nome "), => 60 “do #maxlength o”, “#size o” => 30, => $edit “do #default_value o” [“nome”]? $edit [“nome”]: variable_get (“anónimo”, t (“anónimo "))
);
$form [“correio”] = disposição (textfield”” do => do “#type o “, “#title” => t (“email "), “#maxlength” => 64, “#size o” => 30, “#default_value” => $edit [“correio”], “#description” => t (“o índice deste campo é mantido confidencial e não será mostrado publicly.")
);
$form [do “#title”” do => o “do “#type do “homepage”] = disposição (textfield”, (“homepage "), => 255 “do #maxlength o”, “#size do” => $edit => t => 30, “do #default_value o” [“homepage”]);
}
mais se (variable_get (“comment_anonymous_”. $NODE->TYPE, == COMMENT_ANONYMOUS_MUST_CONTACT DE COMMENT_ANONYMOUS_MAYNOT_CONTACT)) {
$form [=> t do “#title”” do => o “do “#type do “nome”] = disposição (textfield”, (“seu nome "), => 60 “do #maxlength o”, “#size o” => 30, => $edit “do #default_value o” [“nome”]? $edit [“nome”]: variable_get (“anónimo”, t (“anónimo ")), => “#required” VERDADEIRO);
$form [“correio”] = disposição (textfield”” do => do “#type o “, “#title” => t (“email "), “#maxlength” => 64, “#size o” => 30, “#default_value” => $edit [“correio”], “#description” => t (“o índice deste campo é mantido confidencial e não será mostrado publicly."), => “#required” VERDADEIRO);
$form [do “#title”” do => o “do “#type do “homepage”] = disposição (textfield”, (“homepage "), => 255 “do #maxlength o”, “#size do” => $edit => t => 30, “do #default_value o” [“homepage”]);
}
se (variable_get (“comment_subject_field_”. $node->type, 1) == 1) {
$form [=> t do “#title”” do => “do “#type do “assunto”] = disposição (textfield”, (“sujeito "), => 64 “do #maxlength”, => “do #default_value”! esvaziar ($edit [“assunto”])? $edit [“assunto”]: '');
}
se (! vazio ($edit [“comentário”])) {
$default = $edit [“comentário”];
}
mais {
$default = '';
}
$form [“comment_filter”] [“comentário”] = disposição (
=> “textarea” do “#type”,
“#title” => t (“comentário "),
=> 15 dos “#rows”,
=> $default do “#default_value”,
=> “#required” VERDADEIRO,
);
se (! isset ($edit [“formato”])) {
$edit [“formato”] = FILTER_FORMAT_DEFAULT;
}
$form [“comment_filter”] [“formato”] = filter_form ($edit [“formato”]);
$form [“cid”] = disposição (=> do “#value”” do => “do “#type valor”! esvaziar ($edit [“cid”])? $edit [“cid”]: ZERO);
$form [“pid”] = disposição (=> do “#value”” do => “do “#type valor”! esvaziar ($edit [“pid”])? $edit [“pid”]: ZERO);
$form [“nid”] = disposição (#value”” do => do “#type do “=> $edit do “valor”, [“nid”]);
$form [“uid”] = disposição (=> do “#value”” do => “do “#type valor”! esvaziar ($edit [“uid”])? $edit [“uid”]: ZERO);
Mostra de // somente excepto a tecla se a inspeção prévia é opcional ou se nós reagimos da modalidade da inspeção prévia.
// nós mostramos a tecla de salvaguarda na modalidade da inspeção prévia mesmo se há uns erros do formulário de modo que
os elementos opcionais do formulário de // (por exemplo, captcha) podem ser atualizados na modalidade da inspeção prévia.
se (! && dos form_get_errors () ((variable_get (“comment_preview_”. $NODE->TYPE, == COMMENT_PREVIEW_OPTIONAL DE COMMENT_PREVIEW_REQUIRED)) || (== t de $op (“inspeção prévia ")) || (== t de $op (“excepto ")))) {
$form [“submeter”] = disposição (do => t (“excepto "), “do #weight o” do “#value”” do => “do “#type submeter”, => 19);
}
$form [do => t (“inspeção prévia "), “do #weight” do “#value”” do => “do “#type da “inspeção prévia”] = disposição (tecla”, => 20);
$form [“#token”] = “comentário”. $edit [“nid”]. (isset ($edit [“pid”])? $edit [“pid”]: '');
se (== t de $op (“inspeção prévia ")) {
$form [“#after_build”] = disposição (“comment_form_add_preview ");
}
se (esvaziar ($edit [“cid”]) && vazio ($edit [“pid”])) {
$form [“#action”] = URL (“comentário/resposta”. $edit [“nid”]);
}
$form do retorno;
}
/**
* Tema a caixa do formulário de comentário.
*
* @param $edit
* A estrutura do formulário.
* @param $title
* O título do formulário.
*
comment_form_box da função ($edit, $title = ZERO) {
tema do retorno (“caixa”, $title, drupal_get_form (“comment_form”, $edit, $title));
}
/**
* Dar forma ao construtor; Gerar e validar um formulário da inspeção prévia do comentário.
*
* formulários do @ingroup
*
comment_form_add_preview da função ($form, &$form_state) {
$user global;
$edit = $form_state [“valores”];
drupal_set_title (t (da “comentário inspeção prévia "));
$output = '';
$node = node_load ($edit [“nid”]);
// invoca a validação cheia para o formulário, para proteger de encontro ao local transversal
falsificações do pedido de // (CSRF) e valores arbitrários do ajuste para campos como
// o formato da entrada. Inspecionar o comentário somente quando a validação do formulário não faz
// ajustou todos os erros.
drupal_validate_form ($form [“form_id”] [“#value”], $form, $form_state);
se (! form_get_errors ()) {
_comment_form_submit ($edit);
$comment = (objeto) $edit;
Anexo de // a informação do usuário e do tempo.
se (! esvaziar ($edit [“autor”])) {
$account = user_load (disposição (=> $edit do “nome” [“autor”]));
}
elseif (&& de $user->uid! isset ($edit [“is_anonymous”])) {
$account = $user;
}
se (! esvaziar ($account)) {
$comment->uid = $account->uid;
$comment->name = check_plain ($account->name);
}
elseif (esvaziar ($comment->name)) {
$comment->name = variable_get (“anónimo”, t (“anónimo "));
}
$comment->timestamp =! esvaziar ($edit [“timestamp”])? $edit [“timestamp”]: tempo ();
$output. = tema (“comment_view”, $comment, $node);
}
$form [“comment_preview”] = disposição (
=> $output do “#value”,
=> -100 do “#weight”,
inspeção prévia " do class= do “do “#prefix >”,
=> “ ” do “#suffix”,
);
$output = '';
se ($edit [“pid”]) {
$comment = db_fetch_object (db_query (“c.* SELETOS, u.uid, u.name COMO o registered_name, u.signature, u.picture, u.data {comentários} de c INTERNO SE JUNTAM {usuários} a u EM c.uid = u.uid ONDE c.cid = %d E c.status = %d”, $edit [“pid”], COMMENT_PUBLISHED));
$comment = drupal_unpack ($comment);
$comment->name = $comment->uid? $comment->registered_name: $comment->name;
$output. = tema (“comment_view”, $comment, $node);
}
mais {
$suffix = esvaziam ($form [“#suffix”])? '': $form [“#suffix”];
$form [“#suffix”] = $suffix. node_view ($node);
$edit [“pid”] = 0;
}
$form [“comment_preview_below”] = disposição (=> 100 do => $output, do “#weight” do “#value”);
$form do retorno;
}
/**
* Validar submissões do formulário de comentário.
*
comment_form_validate da função ($form, &$form_state) {
$user global;
se (=== 0 de $user->uid) {
foreach (disposição (“nome”, “homepage”, “correio ") como $field) {
// ajustou o bolinho por 365 dias.
se (isset ($form_state [“valores”] [$field])) {
setcookie (“comment_info_”. $field, $form_state [“valores”] [$field], tempo () + 31536000, “/");
}
}
}
comment_validate ($form_state [“valores”]);
}
/**
* Preparar um comentário para a submissão.
*
* @param $comment_values
* Uma disposição associativa que contem os dados do comentário.
*
_comment_form_submit da função (&$comment_values) {
disposição de $comment_values += (“assunto” => '');
se (! isset ($comment_values [“data”])) {
$comment_values [“data”] = “agora”;
}
$comment_values [“timestamp”] = strtotime ($comment_values [“data”]);
se (isset ($comment_values [“autor”])) {
$account = user_load (disposição (=> $comment_values do “nome” [“autor”]));
$comment_values [“uid”] = $account->uid;
$comment_values [“nome”] = $comment_values [“autor”];
}
// valida o assunto do comentário. Se não especific, extrato
// um do corpo do comentário.
se (guarnição ($comment_values [“assunto”]) == '') {
// o corpo pode estar em todo o formato, assim nós:
// 1) Filtrá-lo no HTML
// 2) Tira para fora todos os Tag do HTML
// 3) Entidades do converso de volta ao plain-text.
Nota de //: o formato é verific pelo check_markup ().
$comment_values [“assunto”] = guarnição (truncate_utf8 (decode_entities (strip_tags (check_markup ($comment_values [“comentário”], $comment_values [“formato”]))), 29, RETIFICAM));
Os casos da borda de // onde o corpo do comentário é povoado somente por Tag do HTML
// exige um assunto do defeito.
se (== de $comment_values [“assunto”] '') {
$comment_values [“assunto”] = t (“(nenhum assunto) ");
}
}
}
/**
* Submissões Process do formulário de comentário; preparar o comentário, armazená-lo, e ajustar um alvo da reorientação.
*
comment_form_submit da função ($form, &$form_state) {
_comment_form_submit ($form_state [“valores”]);
se ($cid = comment_save ($form_state [“valores”])) {
$node = node_load ($form_state [“valores”] [“nid”]);
$page = comment_new_page_count ($node->comment_count, 1, $node);
$form_state [“reorientar”] = disposição (“nó”. $node->nid, $page, “comment-$cid”);
retorno;
}
}
/**
* Tema um único bloco do comentário.
*
* @param $comment
* O objeto do comentário.
* @param $node
* O nó do comentário.
* @param $links
* Uma disposição associativa que contem as ligações de controle.
* @param $visible
* Interruptores entre vista dobrada/unfolded.
* @ingroup themeable
*
theme_comment_view da função ($comment, $node, $links = disposição (), $visible = RETIFICAM) {
de estática $first_new = RETIFICAM;
$output = '';
$comment->new = node_mark ($comment->nid, $comment->timestamp);
se (&& $comment->new de $first_new! = MARK_READ) {
// atribui a escora somente para o primeiro comentário novo. Isto evita a duplicata
atributos da identificação de // em uma página.
$first_new = FALSO;
$output. = do “id= \ n”;
}
$output. = do “id= cid \ “> \ n”;
O interruptor de // ao dobrado/unfolded a ideia do comentário
se ($visible) {
$comment->comment = check_markup ($comment->comment, $comment->format, FALSOS);
Gancho do API do comentário de //
comment_invoke_comment ($comment, “vista ");
$output. = tema (“comentário”, $comment, $node, $links);
}
mais {
$output. = tema (“comment_folded”, $comment);
}
$output do retorno;
}
/**
* Construir um formulário do controle do comentário.
*
* @param $mode
* Modalidade de exposição do comentário.
* @param $order
* Modalidade da ordem do comentário.
* @param $comments_per_page
* Comenta por a página.
* formulários do @ingroup
*
comment_controls da função ($mode = COMMENT_MODE_THREADED_EXPANDED, $order = COMMENT_ORDER_NEWEST_FIRST, $comments_per_page = 50) {
$form [“modalidade”] = disposição (” o => “do “#type seleciona”,
=> $mode do “#default_value”,
_comment_get_modes do => dos “#options” (),
=> 1 do “#weight”,
);
$form [“ordem”] = disposição (
” o => “do “#type seleciona”,
=> $order do “#default_value”,
_comment_get_orders do => dos “#options” (),
=> 2 do “#weight”,
);
foreach (_comment_per_page () como $i) {
$options [$i] = t (“! comentários por a página”, disposição (“! um” => $i));
}
$form [“comments_per_page”] = disposição (” o => “do “#type seleciona”,
=> $comments_per_page do “#default_value”,
=> $options dos “#options”,
=> 3 do “#weight”,
);
$form [“submeter”] = disposição (” o => “do “#type se submete”,
“#value” => t (“excepto ajustes "),
=> 20 do “#weight”,
);
$form do retorno;
}
/**
* Caixa de controles do comentário do tema onde o usuário pode mudar a modalidade de exposição do defeito e indicar a ordem de comentários.
*
* @param $form
* A estrutura do formulário.
* @ingroup themeable
*
theme_comment_controls da função ($form) {
$output = do “class= ”;
$output. = drupal_render ($form);
$output. = “ ”;
$output. = do “descrição " do class= ”. t (“selecionar sua maneira preferred de indicar os comentários e dos estalar “excepto ajustes” para ativar seu changes."). “ ”;
tema do retorno (“caixa”, t (do “opções da visão comentário "), $output);
}
/**
* Submissões Process do formulário dos comment_controls.
*
comment_controls_submit da função ($form, &$form_state) {
$user global;
$mode = $form_state [“valores”] [“modalidade”];
$order = $form_state [“valores”] [“ordem”];
$comments_per_page = $form_state [“valores”] [“comments_per_page”];
se ($user->uid) {
$account = user_save ($user, disposição (=> $mode da “modalidade”, de => $order, de “comments_per_page” da “sorte” => $comments_per_page));
// termina se um erro ocorreu durante o user_save ().
se (! $account) {
drupal_set_message (t (do “usuário da economia erro account."), “erro ");
retorno;
}
$user = $account;
}
mais {
$_SESSION [“comment_mode”] = $mode;
$_SESSION [“comment_sort”] = $order;
$_SESSION [“comment_comments_per_page”] = $comments_per_page;
}
}
/**
* Variáveis Process para comment.tpl.php.
*
* @see comment.tpl.php
* theme_comment do @see ()
*
template_preprocess_comment da função (&$variables) {
$comment = $variables [“comentário”];
$node = $variables [“nó”];
$variables [“autor”] = tema (“username”, $comment);
$variables [“índice”] = $comment->comment;
$variables [“data”] = format_date ($comment->timestamp);
$variables [“ligações”] = isset ($variables [“ligações”])? tema (“ligações”, $variables [“ligações”]): '';
$variables [“novo”] = $comment->new? t (“novo "): '';
$variables [“retrato”] = theme_get_setting (“toggle_comment_user_picture ")? tema (“user_picture”, $comment): '';
$variables [“assinatura”] = $comment->signature;
$variables [“submetido”] = tema (“comment_submitted”, $comment);
$variables [“título”] = l ($comment->subject, $_GET [“q”], disposição (=> “comment-$comment->cid” do “fragmento”));
$variables [“template_files”] [] = “comentário”. $node->type;
// ajustou o status a uma respresentação de corda do comment->status.
se (isset ($comment->preview)) {
$variables [“status”] = “comentar-inspecionam”;
}
mais {
$variables [“status”] = (== COMMENT_NOT_PUBLISHED de $comment->status)? “comentar-não-publicado”: “comentar-publicado”;
}
}
/**
* Variáveis Process para comment-folded.tpl.php.
*
* @see comment-folded.tpl.php
* @see theme_comment_folded ()
*
função template_preprocess_comment_folded (&$variables) {
$comment = $variables [“comentário”];
$variables [“autor”] = tema (“username”, $comment);
$variables [“data”] = format_date ($comment->timestamp);
$variables [“novo”] = $comment->new? t (“novo "): '';
$variables [“título”] = l ($comment->subject, comment_node_url (). “/”. $comment->cid, disposição (=> “comment-$comment->cid” do “fragmento”));
}
/**
* Opinião desmoronada lisa do comentário do tema.
*
* @param $comment
* O comentário a ser temático.
* @param $node
* O nó do comentário.
* @ingroup themeable
*
função theme_comment_flat_collapsed ($comment, $node) {
tema do retorno (“comment_view”, $comment, $node, '', 0);
}
/**
* Opinião expandida lisa do comentário do tema.
*
* @param $comment
* O comentário a ser temático.
* @param $node
* O nó do comentário.
* @ingroup themeable
*
função theme_comment_flat_expanded ($comment, $node) {
tema do retorno (“comment_view”, $comment, $node, module_invoke_all (“ligação”, “comentário”, $comment, 0));
}
/**
* A linha do comentário do tema desmoronou vista.
*
* @param $comment
* O comentário a ser temático.
* @param $node
* O nó do comentário.
* @ingroup themeable
*
função theme_comment_thread_collapsed ($comment, $node) {
tema do retorno (“comment_view”, $comment, $node, '', 0);
}
/**
* Opinião expandida linha do comentário do tema.
*
* @param $comment
* O comentário a ser temático.
* @param $node
* O nó do comentário.
* @ingroup themeable
*
função theme_comment_thread_expanded ($comment, $node) {
tema do retorno (“comment_view”, $comment, $node, module_invoke_all (“ligação”, “comentário”, $comment, 0));
}
/**
* Tema “você não pode afixar uma observação dos comentários”.
*
* @param $node
* O nó do comentário.
* @ingroup themeable
*
a função theme_comment_post_forbidden ($node) {
$user global;
$authenticated_post_comments de estática;
se (! $user->uid) {
se (! isset ($authenticated_post_comments)) {
// nós output somente toda a ligação se nós estamos certos, essa usuários começ a permissão
// para afixar comentários entrando. Nós igualmente pmos em esconderijo localmente esta informação.
$authenticated_post_comments = array_key_exists (DRUPAL_AUTHENTICATED_RID, user_roles (VERDADEIROS, do “comentários borne ") + user_roles (VERDADEIROS, “o borne comenta sem aprovaçã0 "));
}
se ($authenticated_post_comments) {
// nós não podemos usar o drupal_get_destination () porque estas ligações
// aparece às vezes em /node e em páginas da lista da taxonomia.
se (variable_get (“comment_form_location_”. $NODE->TYPE, == COMMENT_FORM_SEPARATE_PAGE DE COMMENT_FORM_SEPARATE_PAGE)) {
$destination = “destination=”. drupal_urlencode (“comentário/reply/$node->nid#comment-form”);
}
mais {
$destination = “destination=”. drupal_urlencode (“node/$node->nid#comment-form”);
}
se (variable_get (“user_register”, 1)) {
Os usuários de // podem registar-se.
t do retorno (do “o URL do => do “@login” " do @register " do href= do Login ou >register ao borne comentam”, a disposição ((“usuário/início de uma sessão”, disposição (=> $destination da “pergunta”));
}
mais {
Os admins de // somente podem adicionar usuários novos, nenhum registo público.
t do retorno (do “URL do => do “@login” " do @login " do href= Login ao borne comenta”, a disposição ((“usuário/início de uma sessão”, disposição (=> $destination da “pergunta”))));
}
}
}
}
/**
* Variáveis Process para comment-wrapper.tpl.php.
*
* @see comment-wrapper.tpl.php
* theme_comment_wrapper do @see ()
*
template_preprocess_comment_wrapper da função (&$variables) {
// fornece a informação contextual.
$variables [“display_mode”] = _comment_get_display_setting (“modalidade”, $variables [“nó”]);
$variables [“display_order”] = _comment_get_display_setting (“sorte”, $variables [“nó”]);
$variables [“comment_controls_state”] = variable_get (“comment_controls_”. >type de $variables [“nó”] -, COMMENT_CONTROLS_HIDDEN);
$variables [“template_files”] [] = “comentar-envoltório”. >type de $variables [“nó”] -;
}
/**
* Do tema “submetido por…” observação.
*
* @param $comment
* O comentário.
* @ingroup themeable
*
função theme_comment_submitted ($comment) {
t do retorno (“submetido perto! username no @datetime. ”,
disposição (
“! tema => do username do” (“username”, $comment),
format_date do => do “@datetime” ($comment->timestamp)
));
}
/**
* Retornar uma disposição de modalidades da visão para listas do comentário.
*
* Nós não podemos usar uma disposição da variável global porque o sistema do lugar
* não está inicializado ainda quando o módulo do comentário é carregado.
*
_comment_get_modes da função () {
disposição do retorno (
=> t de COMMENT_MODE_FLAT_COLLAPSED (“lista lisa - desmoronada "),
=> t de COMMENT_MODE_FLAT_EXPANDED (“lista lisa - expandida "),
=> t de COMMENT_MODE_THREADED_COLLAPSED (“lista rosqueada - desmoronada "),
=> t de COMMENT_MODE_THREADED_EXPANDED (“lista rosqueada - expandida ")
);
}
/**
* Retornar uma disposição de ordens da visão para listas do comentário.
*
* Nós não podemos usar uma disposição da variável global porque o sistema do lugar
* não está inicializado ainda quando o módulo do comentário é carregado.
*
_comment_get_orders da função () {
disposição do retorno (
=> t de COMMENT_ORDER_NEWEST_FIRST (“data - a primeira as mais novos "),
=> t de COMMENT_ORDER_OLDEST_FIRST (“data - a primeira o mais velho ")
);
}
/**
* Retornar uma disposição “comentários por de ajustes da página” de que o usuário
* pode escolher.
*
_comment_per_page da função () {
drupal_map_assoc do retorno (disposição (10, 30, 50, 70, 90, 150, 200, 250, 300));
}
/**
* Retornar um ajuste atual da exposição do comentário
*
* @param $setting
* pode ser um destes: “modalidade”, “sorte”, “comments_per_page”
* @param $node
* O nó do comentário na pergunta.
*
função que _comment_get_display_setting ($setting, $node) {
$user global;
se (isset ($_GET [$setting])) {
$value = $_GET [$setting];
}
mais {
// começ o defeito do local do ajuste
comutar ($setting) {
encaixotar a “modalidade”:
$default = variable_get (“comment_default_mode_”. $node->type, COMMENT_MODE_THREADED_EXPANDED);
ruptura;
caso “sorte”:
$default = variable_get (“comment_default_order_”. $node->type, COMMENT_ORDER_NEWEST_FIRST);
ruptura;
caso “comments_per_page”:
$default = variable_get (“comment_default_per_page_”. $node->type, 50);
}
se (variable_get (“comment_controls_”. $NODE->TYPE, == COMMENT_CONTROLS_HIDDEN DE COMMENT_CONTROLS_HIDDEN)) {
// se os controles do comentário são defeito deficiente do local do uso
$value = $default;
}
mais {
// de outra maneira uso o ajuste de usuário se jogo
se (&& $user->$setting do isset ($user->$setting)) {
$value = $user->$setting;
}
mais se (isset ($_SESSION [“comment_”. && $_SESSION de $setting]) [“comment_”. $setting]) {
$value = $_SESSION [“comment_”. $setting];
}
mais {
$value = $default;
}
}
}
$value do retorno;
}
/**
* Atualiza as estatísticas do comentário para um nó dado. Isto deve ser chamado alguns
* cronometrar um comentário é adicionado, suprimido, ou atualizado.
*
* Os seguintes campos são contidos na tabela do node_comment_statistics.
* - last_comment_timestamp: o timestamp do último comentário para este nó ou o nó criam o selo se nenhum comentário existe para o nó.
* - last_comment_name: o nome do poster anónimo para o último comentário
* - last_comment_uid: o uid do poster para o último comentário para este nó ou o uid dos autores do nó se nenhum comentário existe para o nó.
* - comment_count: o número total de aprovado/publicou comentários neste nó.
*
_comment_update_node_statistics da função ($nid) {
$count = db_result (db_query (“CONTAGEM SELETA (cid) DE {comentários} ONDE nid = %d E status = %d”, $nid, COMMENT_PUBLISHED));
os comentários de // existem
se ($count > 0) {
$last_reply = db_fetch_object (db_query_range (“cid SELETO, nome, timestamp, uid DE {comentários} ONDE nid = %d E status = ORDEM de %d por cid DESC”, $nid, COMMENT_PUBLISHED, 0, 1));
db_query (a “ATUALIZAÇÃO {node_comment_statistics} AJUSTOU o comment_count = o %d, last_comment_timestamp = %d, last_comment_name = “%s”, last_comment_uid = %d ONDE nid = %d”, $count, $last_reply->timestamp, $last_reply->uid? '': $last_reply->name, $last_reply->uid, $nid);
}
// nenhuns comentários
mais {
$node = db_fetch_object (db_query (“uid SELETO, criado DE {nó} ONDE nid = %d”, $nid));
db_query (a “ATUALIZAÇÃO {node_comment_statistics} AJUSTOU o comment_count = 0, last_comment_timestamp = %d, last_comment_name = '', last_comment_uid = %d ONDE nid = %d”, $node->created, $node->uid, $nid);
}
}
/**
* Invocar uma operação do hook_comment () em todos os módulos.
*
* @param &$comment
* Um objeto do comentário.
* @param $op
* Uma corda que contem o nome da operação do comentário.
* @return
* O valor retornado dos ganchos invocados.
*
comment_invoke_comment da função (&$comment, $op) {
$return = disposição ();
foreach (module_implements (“comentário ") como $name) {
$function = $name. “_comment”;
$result = $function ($comment, $op);
se (&& do isset ($result) is_array ($result)) {
$return = array_merge ($return, $result);
}
mais se (isset ($result)) {
$return [] = $result;
}
}
$return do retorno;
}
/**
* Gerar o vancode.
*
* Consiste em um caráter principal que indica o comprimento, seguido por dígitos de N
* com um valor numérico na base 36. Vancodes pode ser classificado como cordas
* sem sujar acima a ordem numérica.
*
* Vai:
* 00, 01, 02,…, 0y, 0z,
* 110, 111,…, 1zy, 1zz,
* 2100, 2101,…, 2zzy, 2zzz,
* 31000, 31001,…
*
função int2vancode ($i = 0) {
$num = base_convert ((int) $i, 10, 36);
$length = strlen ($num);
chr do retorno ($length + ord (“0”) - 1). $num;
}
/**
* Descodificar o vancode de volta a um inteiro.
*
função vancode2int ($c = “00”) {
base_convert do retorno (substr ($c, 1), 36, 10);
}
/**
* Execução do hook_hook_info ().
*
comment_hook_info da função () {
disposição do retorno (
disposição do => do “comentário” (
disposição do => do “comentário” (
“introduzir” a disposição do => (
“funcionamentos quando” => t (“após ter conservado um comentário novo "),
),
disposição do => da “atualização” (
“funcionamentos quando” => t (“após ter conservado um comentário atualizado "),
),
disposição do => da “supressão” (
“funcionamentos quando” => t (“após ter suprimido de um comentário ")
),
disposição do => da “vista” (
“funcionamentos quando” => t (“quando um comentário for visto por um usuário autenticado ")
),
),
),
);
}
/**
* Execução do hook_action_info ().
*
comment_action_info da função () {
disposição do retorno (
disposição do => do “comment_unpublish_action” (
“descrição” => t (de “comentário Unpublish "),
“datilografar” o => “comentário”,
=> “configurável” FALSO,
“engancha” a disposição do => (
“comentário” disposição do => (“inserção”, “atualização "),
)
),
disposição do => do “comment_unpublish_by_keyword_action” (
“descrição” => t (de “comentário Unpublish que contem palavras-chaves "),
“datilografar” o => “comentário”,
=> “configurável” VERDADEIRO,
“engancha” a disposição do => (
“comentário” disposição do => (“inserção”, “atualização "),
)
)
);
}
/**
* Ação de Drupal ao unpublish um comentário.
*
* @param $context
* Disposição fechada. Deve conter a identificação do comentário se $comment não é passado.
* @param $comment
* Um objeto opcional do comentário.
*
comment_unpublish_action da função ($comment, $context = disposição ()) {
se (isset ($comment->cid)) {
$cid = $comment->cid;
$subject = $comment->subject;
}
mais {
$cid = $context [“cid”];
$subject = db_result (db_query (“assunto SELETO DE {comentários} ONDE cid = %d”, $cid));
}
db_query (a “ATUALIZAÇÃO {comentários} AJUSTOU o status = o %d ONDE cid = %d”, COMMENT_NOT_PUBLISHED, $cid);
cão de guarda (“ação”, “comentário não-publicado %subject. ”, disposição (=> $subject “de %subject”));
}
/**
* Dar forma ao construtor; Preparar um formulário para palavras-chaves põr.
*
* formulários do @ingroup
*
comment_unpublish_by_keyword_action_form da função ($context) {
$form [“palavras-chaves”] = disposição (
“#title” => t (“palavras-chaves "),
=> “textarea” do “#type”,
“#description” => t (“o comentário será não-publicado se contem algumas das seqüências do caráter acima. Usar uma lista vírgula-separada de seqüências do caráter. Exemplo: engraçado, tirante com mola que salta, “companhia, Inc. ”. As seqüências do caráter são caixa-sensitive."),
do => do “#default_value” ($context isset [“palavras-chaves”])? drupal_implode_tags ($context [“palavras-chaves”]): '',
);
$form do retorno;
}
/**
* Submissões Process do formulário do comment_unpublish_by_keyword_action_form.
*
comment_unpublish_by_keyword_action_submit da função ($form, $form_state) {
disposição do retorno (do => das “palavras-chaves” ($form_state drupal_explode_tags [“valores”] [“palavras-chaves”]));
}
/**
* Execução de uma ação configurável de Drupal.
* Unpublish um comentário se contem uma determinada corda.
*
* @param $context
* Uma disposição que fornece mais informação sobre o contexto da chamada a esta ação.
* Não utilizado aqui desde que esta ação atualmente suporta somente os ops da inserção e da atualização de
* o gancho do comentário, ambo fornece um objeto completo de $comment.
* @param $comment
* Um objeto do comentário.
*
comment_unpublish_by_keyword_action da função ($comment, $context) {
foreach ($context [“palavras-chaves”] como $keyword) {
se (strstr ($comment->comment, $keyword) || strstr ($comment->subject, $keyword)) {
db_query (a “ATUALIZAÇÃO {comentários} AJUSTOU o status = o %d ONDE cid = %d”, COMMENT_NOT_PUBLISHED, $comment->cid);
cão de guarda (“ação”, “comentário não-publicado %subject. ”, disposição (=> $comment->subject “de %subject”));
ruptura;
}
}
}
|